lkml.org 
[lkml]   [2010]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/6] ioc4: use static work_struct for ioc4_load_modules()
    Date
    There is no reason to dynamically allocate work_struct for
    ioc4_load_modules(). It makes the code more complex and makes it
    impossible to flush the work directly. Use static work
    ioc4_load_modules_work instead and flush it directly on exit.

    This removes the use of flush_scheduled_work() which is being
    deprecated.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Brent Casavant <bcasavan@sgi.com>
    ---
    This is part of a series to remove flush_scheduled_work() usage to
    prepare for deprecation of flush_scheduled_work(). Patches in this
    series are self contained and mostly straight-forward.

    Please feel free to take it into the appropriate tree, or just ack it.
    In the latter case, I'll merge the patch through the workqueue tree
    during the next merge window.

    Thank you.

    drivers/misc/ioc4.c | 29 +++++++++--------------------
    1 files changed, 9 insertions(+), 20 deletions(-)

    diff --git a/drivers/misc/ioc4.c b/drivers/misc/ioc4.c
    index 1932066..668d41e 100644
    --- a/drivers/misc/ioc4.c
    +++ b/drivers/misc/ioc4.c
    @@ -273,13 +273,11 @@ ioc4_variant(struct ioc4_driver_data *idd)
    static void __devinit
    ioc4_load_modules(struct work_struct *work)
    {
    - /* arg just has to be freed */
    -
    request_module("sgiioc4");
    -
    - kfree(work);
    }

    +static DECLARE_WORK(ioc4_load_modules_work, ioc4_load_modules);
    +
    /* Adds a new instance of an IOC4 card */
    static int __devinit
    ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
    @@ -396,21 +394,12 @@ ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
    * PCI device.
    */
    if (idd->idd_variant != IOC4_VARIANT_PCI_RT) {
    - struct work_struct *work;
    - work = kzalloc(sizeof(struct work_struct), GFP_KERNEL);
    - if (!work) {
    - printk(KERN_WARNING
    - "%s: IOC4 unable to allocate memory for "
    - "load of sub-modules.\n", __func__);
    - } else {
    - /* Request the module from a work procedure as the
    - * modprobe goes out to a userland helper and that
    - * will hang if done directly from ioc4_probe().
    - */
    - printk(KERN_INFO "IOC4 loading sgiioc4 submodule\n");
    - INIT_WORK(work, ioc4_load_modules);
    - schedule_work(work);
    - }
    + /* Request the module from a work procedure as the modprobe
    + * goes out to a userland helper and that will hang if done
    + * directly from ioc4_probe().
    + */
    + printk(KERN_INFO "IOC4 loading sgiioc4 submodule\n");
    + schedule_work(&ioc4_load_modules_work);
    }

    return 0;
    @@ -498,7 +487,7 @@ static void __exit
    ioc4_exit(void)
    {
    /* Ensure ioc4_load_modules() has completed before exiting */
    - flush_scheduled_work();
    + flush_work_sync(&ioc4_load_modules_work);
    pci_unregister_driver(&ioc4_driver);
    }

    --
    1.7.1


    \
     
     \ /
      Last update: 2010-12-12 17:51    [W:2.344 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site