Fixed minor issues on capability list sharing.

This commit is contained in:
Bahadir Balban
2009-12-13 18:02:47 +02:00
parent 8fe15ba811
commit c7069a8e8e
9 changed files with 86 additions and 22 deletions

View File

@@ -104,12 +104,17 @@
/*
* IRQ Control capability
*
*/
#define CAP_IRQCTRL_WAIT (1 << 8)
/*
* This is a common one and it applies to both
* CAP_TYPE_IRQCTRL and CAP_TYPE_MAP_PHYSMEM
*/
#define CAP_IRQCTRL_REGISTER (1 << 7)
/* Ipc capability */
#define CAP_IPC_SEND (1 << 0)
#define CAP_IPC_RECV (1 << 1)

View File

@@ -55,7 +55,12 @@ static inline void cap_list_remove(struct capability *cap,
static inline struct capability *
cap_list_detach(struct cap_list *clist)
{
struct link *list = list_detach(&clist->caps);
struct link *list;
if (!clist->ncaps)
return 0;
list = list_detach(&clist->caps);
clist->ncaps = 0;
return link_to_struct(list, struct capability, list);
}
@@ -75,6 +80,9 @@ static inline void cap_list_attach(struct capability *cap,
static inline void cap_list_move(struct cap_list *to,
struct cap_list *from)
{
if (!from->ncaps)
return;
struct capability *cap_head = cap_list_detach(from);
cap_list_attach(cap_head, to);
}