Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 22583
b: refs/heads/master
c: 071a651
h: refs/heads/master
i:
  22581: a45dc10
  22579: ed56f4b
  22575: c99a52a
v: v3
  • Loading branch information
Vasily Averin authored and James Bottomley committed Mar 12, 2006
1 parent 12ffd45 commit 32c0146
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cf7f5b45fe0180a0f0e3491183c0ec95e4b96d44
refs/heads/master: 071a651e28bfc1a66a885dc285792e335427a097
21 changes: 17 additions & 4 deletions trunk/drivers/message/i2o/exec-osm.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ struct i2o_exec_wait {
struct list_head list; /* node in global wait list */
};

/* Work struct needed to handle LCT NOTIFY replies */
struct i2o_exec_lct_notify_work {
struct work_struct work; /* work struct */
struct i2o_controller *c; /* controller on which the LCT NOTIFY
was received */
};

/* Exec OSM class handling definition */
static struct i2o_class_id i2o_exec_class_id[] = {
{I2O_CLASS_EXECUTIVE},
Expand Down Expand Up @@ -355,9 +362,12 @@ static int i2o_exec_remove(struct device *dev)
* new LCT and if the buffer for the LCT was to small sends a LCT NOTIFY
* again, otherwise send LCT NOTIFY to get informed on next LCT change.
*/
static void i2o_exec_lct_modified(struct i2o_controller *c)
static void i2o_exec_lct_modified(struct i2o_exec_lct_notify_work *work)
{
u32 change_ind = 0;
struct i2o_controller *c = work->c;

kfree(work);

if (i2o_device_parse_lct(c) != -EAGAIN)
change_ind = c->lct->change_ind + 1;
Expand Down Expand Up @@ -410,16 +420,19 @@ static int i2o_exec_reply(struct i2o_controller *c, u32 m,
return i2o_msg_post_wait_complete(c, m, msg, context);

if ((le32_to_cpu(msg->u.head[1]) >> 24) == I2O_CMD_LCT_NOTIFY) {
struct work_struct *work;
struct i2o_exec_lct_notify_work *work;

pr_debug("%s: LCT notify received\n", c->name);

work = kmalloc(sizeof(*work), GFP_ATOMIC);
if (!work)
return -ENOMEM;

INIT_WORK(work, (void (*)(void *))i2o_exec_lct_modified, c);
queue_work(i2o_exec_driver.event_queue, work);
work->c = c;

INIT_WORK(&work->work, (void (*)(void *))i2o_exec_lct_modified,
work);
queue_work(i2o_exec_driver.event_queue, &work->work);
return 1;
}

Expand Down

0 comments on commit 32c0146

Please sign in to comment.