Changeset 91b60499 in mainline for kernel/generic/include/ipc


Ignore:
Timestamp:
2017-09-30T06:29:42Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
300f4c4
Parents:
d076f16 (diff), 6636fb19 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge support for capabilities from lp:~jakub/helenos/caps

This commit introduces capabilities as task-local names for references to kernel
objects. Kernel objects are reference-counted wrappers for a select group of
objects allocated in and by the kernel that can be made accessible to userspace
in a controlled way via integer handles.

So far, a kernel object encapsulates either an irq_t or a phone_t.

Support for the former lead to the removal of kernel-assigned devnos and
unsecure deregistration of IRQs in which a random task was able to unregister
some other task's IRQ.

Location:
kernel/generic/include/ipc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/ipc.h

    rd076f16 r91b60499  
    4242#include <abi/proc/task.h>
    4343#include <typedefs.h>
    44 
    45 #define IPC_MAX_PHONES  64
     44#include <mm/slab.h>
     45#include <cap/cap.h>
    4646
    4747struct answerbox;
     
    6262
    6363/** Structure identifying phone (in TASK structure) */
    64 typedef struct {
     64typedef struct phone {
    6565        mutex_t lock;
    6666        link_t link;
     
    6969        ipc_phone_state_t state;
    7070        atomic_t active_calls;
     71        kobject_t *kobject;
    7172} phone_t;
    7273
     
    9495        /** Notifications from IRQ handlers. */
    9596        list_t irq_notifs;
    96         /** IRQs with notifications to this answerbox. */
    97         list_t irq_list;
    9897} answerbox_t;
    9998
     
    170169} call_t;
    171170
     171extern slab_cache_t *phone_slab;
     172
    172173extern answerbox_t *ipc_phone_0;
    173174
  • kernel/generic/include/ipc/ipcrsc.h

    rd076f16 r91b60499  
    3838#include <proc/task.h>
    3939#include <ipc/ipc.h>
     40#include <cap/cap.h>
    4041
    4142extern call_t *get_call(sysarg_t);
    42 extern int phone_get(sysarg_t, phone_t **);
    43 extern int phone_alloc(task_t *);
    44 extern bool phone_connect(int, answerbox_t *);
    45 extern void phone_dealloc(int);
     43extern cap_handle_t phone_alloc(task_t *);
     44extern bool phone_connect(cap_handle_t, answerbox_t *);
     45extern void phone_dealloc(cap_handle_t);
    4646
    4747#endif
  • kernel/generic/include/ipc/irq.h

    rd076f16 r91b60499  
    4747#include <adt/list.h>
    4848
    49 extern int ipc_irq_subscribe(answerbox_t *, inr_t, devno_t, sysarg_t,
    50     irq_code_t *);
    5149
    5250extern irq_ownership_t ipc_irq_top_half_claim(irq_t *);
    5351extern void ipc_irq_top_half_handler(irq_t *);
    5452
    55 extern int ipc_irq_unsubscribe(answerbox_t *, inr_t, devno_t);
    56 extern void ipc_irq_cleanup(answerbox_t *);
     53extern int ipc_irq_subscribe(answerbox_t *, inr_t, sysarg_t, irq_code_t *);
     54extern int ipc_irq_unsubscribe(answerbox_t *, int);
    5755
    5856/*
  • kernel/generic/include/ipc/sysipc.h

    rd076f16 r91b60499  
    5656extern sysarg_t sys_ipc_hangup(sysarg_t);
    5757
    58 extern sysarg_t sys_ipc_irq_subscribe(inr_t, devno_t, sysarg_t, irq_code_t *);
    59 extern sysarg_t sys_ipc_irq_unsubscribe(inr_t, devno_t);
     58extern sysarg_t sys_ipc_irq_subscribe(inr_t, sysarg_t, irq_code_t *);
     59extern sysarg_t sys_ipc_irq_unsubscribe(sysarg_t);
    6060
    6161#ifdef __32_BITS__
Note: See TracChangeset for help on using the changeset viewer.