wimax/i2400m: clean up & add a payload argument to i2400m_schedule_work()
Forthcoming commits use having a payload argument added to i2400m_schedule_work(), which then becomes nearly identical to i2400m_queue_work(). This patch thus cleans up both's implementation, making it share common helpers and adding the payload argument to i2400m_schedule_work(). Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
This commit is contained in:
parent
7329012e67
commit
b0fbcb2a0b
2 changed files with 37 additions and 21 deletions
|
@ -107,6 +107,24 @@ MODULE_PARM_DESC(barkers,
|
||||||
"signal; values are appended to a list--setting one value "
|
"signal; values are appended to a list--setting one value "
|
||||||
"as zero cleans the existing list and starts a new one.");
|
"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
|
* i2400m_queue_work - schedule work on a i2400m's queue
|
||||||
*
|
*
|
||||||
|
@ -166,14 +184,12 @@ int i2400m_queue_work(struct i2400m *i2400m,
|
||||||
|
|
||||||
BUG_ON(i2400m->work_queue == NULL);
|
BUG_ON(i2400m->work_queue == NULL);
|
||||||
result = -ENOMEM;
|
result = -ENOMEM;
|
||||||
iw = kzalloc(sizeof(*iw) + pl_size, gfp_flags);
|
iw = __i2400m_work_setup(i2400m, fn, gfp_flags, pl, pl_size);
|
||||||
if (iw == NULL)
|
if (iw != NULL) {
|
||||||
goto error_kzalloc;
|
result = queue_work(i2400m->work_queue, &iw->ws);
|
||||||
iw->i2400m = i2400m_get(i2400m);
|
if (WARN_ON(result == 0))
|
||||||
memcpy(iw->pl, pl, pl_size);
|
result = -ENXIO;
|
||||||
INIT_WORK(&iw->ws, fn);
|
}
|
||||||
result = queue_work(i2400m->work_queue, &iw->ws);
|
|
||||||
error_kzalloc:
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(i2400m_queue_work);
|
EXPORT_SYMBOL_GPL(i2400m_queue_work);
|
||||||
|
@ -192,21 +208,19 @@ EXPORT_SYMBOL_GPL(i2400m_queue_work);
|
||||||
* it should not happen.
|
* it should not happen.
|
||||||
*/
|
*/
|
||||||
int i2400m_schedule_work(struct i2400m *i2400m,
|
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;
|
int result;
|
||||||
struct i2400m_work *iw;
|
struct i2400m_work *iw;
|
||||||
|
|
||||||
result = -ENOMEM;
|
result = -ENOMEM;
|
||||||
iw = kzalloc(sizeof(*iw), gfp_flags);
|
iw = __i2400m_work_setup(i2400m, fn, gfp_flags, pl, pl_size);
|
||||||
if (iw == NULL)
|
if (iw != NULL) {
|
||||||
goto error_kzalloc;
|
result = schedule_work(&iw->ws);
|
||||||
iw->i2400m = i2400m_get(i2400m);
|
if (WARN_ON(result == 0))
|
||||||
INIT_WORK(&iw->ws, fn);
|
result = -ENXIO;
|
||||||
result = schedule_work(&iw->ws);
|
}
|
||||||
if (result == 0)
|
|
||||||
result = -ENXIO;
|
|
||||||
error_kzalloc:
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +644,7 @@ int i2400m_dev_reset_handle(struct i2400m *i2400m)
|
||||||
i2400m->boot_mode = 1;
|
i2400m->boot_mode = 1;
|
||||||
wmb(); /* Make sure i2400m_msg_to_dev() sees boot_mode */
|
wmb(); /* Make sure i2400m_msg_to_dev() sees boot_mode */
|
||||||
return i2400m_schedule_work(i2400m, __i2400m_dev_reset_handle,
|
return i2400m_schedule_work(i2400m, __i2400m_dev_reset_handle,
|
||||||
GFP_ATOMIC);
|
GFP_ATOMIC, NULL, 0);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(i2400m_dev_reset_handle);
|
EXPORT_SYMBOL_GPL(i2400m_dev_reset_handle);
|
||||||
|
|
||||||
|
|
|
@ -695,8 +695,6 @@ extern void i2400m_dev_shutdown(struct i2400m *);
|
||||||
|
|
||||||
extern struct attribute_group i2400m_dev_attr_group;
|
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 */
|
/* HDI message's payload description handling */
|
||||||
|
|
||||||
|
@ -778,10 +776,14 @@ struct device *i2400m_dev(struct i2400m *i2400m)
|
||||||
struct i2400m_work {
|
struct i2400m_work {
|
||||||
struct work_struct ws;
|
struct work_struct ws;
|
||||||
struct i2400m *i2400m;
|
struct i2400m *i2400m;
|
||||||
|
size_t pl_size;
|
||||||
u8 pl[0];
|
u8 pl[0];
|
||||||
};
|
};
|
||||||
extern int i2400m_queue_work(struct i2400m *,
|
extern int i2400m_queue_work(struct i2400m *,
|
||||||
void (*)(struct work_struct *), gfp_t,
|
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);
|
const void *, size_t);
|
||||||
|
|
||||||
extern int i2400m_msg_check_status(const struct i2400m_l3l4_hdr *,
|
extern int i2400m_msg_check_status(const struct i2400m_l3l4_hdr *,
|
||||||
|
|
Loading…
Add table
Reference in a new issue