diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-01-29 15:50:52 -0500 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-02-01 16:53:21 -0500 |
commit | 7f0bd4c213ff8dca0eb3bdd887f5c62c8d30fab5 (patch) | |
tree | 99b45b5466dc27308e6d65751baf5e109eb37385 /include/litmus | |
parent | fab768a4cdc49ad7886cac0d0361f8432965a817 (diff) |
fdso: pass userpsace config argument to object constructor
As Glenn pointed out, it is useful for some protocols (e.g.,
k-exclusion protocols) to know the userspace configuration at object
creation time. This patch changes the fdso API to pass the parameter
to the object constructor, which is then in turn passed to the lock
allocater. The return code from the lock allocater is passed to
userspace in return.
This also fixes some null pointer dereferences in the FDSO code found
by the test suite in liblitmus.
Diffstat (limited to 'include/litmus')
-rw-r--r-- | include/litmus/fdso.h | 2 | ||||
-rw-r--r-- | include/litmus/sched_plugin.h | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/include/litmus/fdso.h b/include/litmus/fdso.h index 25a292d68d96..caf2a1e6918c 100644 --- a/include/litmus/fdso.h +++ b/include/litmus/fdso.h | |||
@@ -43,7 +43,7 @@ struct od_table_entry { | |||
43 | }; | 43 | }; |
44 | 44 | ||
45 | struct fdso_ops { | 45 | struct fdso_ops { |
46 | void* (*create)(obj_type_t type); | 46 | int (*create)(void** obj_ref, obj_type_t type, void* __user); |
47 | void (*destroy)(obj_type_t type, void*); | 47 | void (*destroy)(obj_type_t type, void*); |
48 | int (*open) (struct od_table_entry*, void* __user); | 48 | int (*open) (struct od_table_entry*, void* __user); |
49 | int (*close) (struct od_table_entry*); | 49 | int (*close) (struct od_table_entry*); |
diff --git a/include/litmus/sched_plugin.h b/include/litmus/sched_plugin.h index 8a3ed6d19a3c..6e7cabdddae8 100644 --- a/include/litmus/sched_plugin.h +++ b/include/litmus/sched_plugin.h | |||
@@ -55,7 +55,8 @@ typedef void (*task_exit_t) (struct task_struct *); | |||
55 | 55 | ||
56 | /* Called when the current task attempts to create a new lock of a given | 56 | /* Called when the current task attempts to create a new lock of a given |
57 | * protocol type. */ | 57 | * protocol type. */ |
58 | typedef long (*allocate_lock_t) (struct litmus_lock **lock, int type); | 58 | typedef long (*allocate_lock_t) (struct litmus_lock **lock, int type, |
59 | void* __user config); | ||
59 | 60 | ||
60 | 61 | ||
61 | /********************* sys call backends ********************/ | 62 | /********************* sys call backends ********************/ |