Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 171215
b: refs/heads/master
c: b0fbcb2
h: refs/heads/master
i:
  171213: 93c9e24
  171211: dc562d8
  171207: f3e4c5e
  171199: 6fbfd01
v: v3
  • Loading branch information
Inaky Perez-Gonzalez committed Oct 19, 2009
1 parent 155298b commit 214d5b5
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 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: 7329012e673231dee9a21567cfb9881f5ea462ba
refs/heads/master: b0fbcb2a0b54ee201fa8af61fdebe14c050f18fe
52 changes: 33 additions & 19 deletions trunk/drivers/net/wimax/i2400m/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,24 @@ MODULE_PARM_DESC(barkers,
"signal; values are appended to a list--setting one value "
"as zero cleans the existing list and starts a new one.");

static
struct i2400m_work *__i2400m_work_setup(
struct i2400m *i2400m, void (*fn)(struct work_struct *),
gfp_t gfp_flags, const void *pl, size_t pl_size)
{
struct i2400m_work *iw;

iw = kzalloc(sizeof(*iw) + pl_size, gfp_flags);
if (iw == NULL)
return NULL;
iw->i2400m = i2400m_get(i2400m);
iw->pl_size = pl_size;
memcpy(iw->pl, pl, pl_size);
INIT_WORK(&iw->ws, fn);
return iw;
}


/**
* i2400m_queue_work - schedule work on a i2400m's queue
*
Expand Down Expand Up @@ -166,14 +184,12 @@ int i2400m_queue_work(struct i2400m *i2400m,

BUG_ON(i2400m->work_queue == NULL);
result = -ENOMEM;
iw = kzalloc(sizeof(*iw) + pl_size, gfp_flags);
if (iw == NULL)
goto error_kzalloc;
iw->i2400m = i2400m_get(i2400m);
memcpy(iw->pl, pl, pl_size);
INIT_WORK(&iw->ws, fn);
result = queue_work(i2400m->work_queue, &iw->ws);
error_kzalloc:
iw = __i2400m_work_setup(i2400m, fn, gfp_flags, pl, pl_size);
if (iw != NULL) {
result = queue_work(i2400m->work_queue, &iw->ws);
if (WARN_ON(result == 0))
result = -ENXIO;
}
return result;
}
EXPORT_SYMBOL_GPL(i2400m_queue_work);
Expand All @@ -192,21 +208,19 @@ EXPORT_SYMBOL_GPL(i2400m_queue_work);
* it should not happen.
*/
int i2400m_schedule_work(struct i2400m *i2400m,
void (*fn)(struct work_struct *), gfp_t gfp_flags)
void (*fn)(struct work_struct *), gfp_t gfp_flags,
const void *pl, size_t pl_size)
{
int result;
struct i2400m_work *iw;

result = -ENOMEM;
iw = kzalloc(sizeof(*iw), gfp_flags);
if (iw == NULL)
goto error_kzalloc;
iw->i2400m = i2400m_get(i2400m);
INIT_WORK(&iw->ws, fn);
result = schedule_work(&iw->ws);
if (result == 0)
result = -ENXIO;
error_kzalloc:
iw = __i2400m_work_setup(i2400m, fn, gfp_flags, pl, pl_size);
if (iw != NULL) {
result = schedule_work(&iw->ws);
if (WARN_ON(result == 0))
result = -ENXIO;
}
return result;
}

Expand Down Expand Up @@ -630,7 +644,7 @@ int i2400m_dev_reset_handle(struct i2400m *i2400m)
i2400m->boot_mode = 1;
wmb(); /* Make sure i2400m_msg_to_dev() sees boot_mode */
return i2400m_schedule_work(i2400m, __i2400m_dev_reset_handle,
GFP_ATOMIC);
GFP_ATOMIC, NULL, 0);
}
EXPORT_SYMBOL_GPL(i2400m_dev_reset_handle);

Expand Down
6 changes: 4 additions & 2 deletions trunk/drivers/net/wimax/i2400m/i2400m.h
Original file line number Diff line number Diff line change
Expand Up @@ -695,8 +695,6 @@ extern void i2400m_dev_shutdown(struct i2400m *);

extern struct attribute_group i2400m_dev_attr_group;

extern int i2400m_schedule_work(struct i2400m *,
void (*)(struct work_struct *), gfp_t);

/* HDI message's payload description handling */

Expand Down Expand Up @@ -778,10 +776,14 @@ struct device *i2400m_dev(struct i2400m *i2400m)
struct i2400m_work {
struct work_struct ws;
struct i2400m *i2400m;
size_t pl_size;
u8 pl[0];
};
extern int i2400m_queue_work(struct i2400m *,
void (*)(struct work_struct *), gfp_t,
const void *, size_t);
extern int i2400m_schedule_work(struct i2400m *,
void (*)(struct work_struct *), gfp_t,
const void *, size_t);

extern int i2400m_msg_check_status(const struct i2400m_l3l4_hdr *,
Expand Down

0 comments on commit 214d5b5

Please sign in to comment.