diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-07 16:58:04 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-07 16:58:04 -0800 | 
| commit | 23d69b09b78c4876e134f104a3814c30747c53f1 (patch) | |
| tree | 40744de4f4126c21027ce537264524095e0e7979 /drivers/mmc/host/omap.c | |
| parent | e744070fd4ff9d3114277e52d77afa21579adce2 (diff) | |
| parent | 569ff2de2e1c8ac67c8df3a7367d46d0d9460a35 (diff) | |
Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
* 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (33 commits)
  usb: don't use flush_scheduled_work()
  speedtch: don't abuse struct delayed_work
  media/video: don't use flush_scheduled_work()
  media/video: explicitly flush request_module work
  ioc4: use static work_struct for ioc4_load_modules()
  init: don't call flush_scheduled_work() from do_initcalls()
  s390: don't use flush_scheduled_work()
  rtc: don't use flush_scheduled_work()
  mmc: update workqueue usages
  mfd: update workqueue usages
  dvb: don't use flush_scheduled_work()
  leds-wm8350: don't use flush_scheduled_work()
  mISDN: don't use flush_scheduled_work()
  macintosh/ams: don't use flush_scheduled_work()
  vmwgfx: don't use flush_scheduled_work()
  tpm: don't use flush_scheduled_work()
  sonypi: don't use flush_scheduled_work()
  hvsi: don't use flush_scheduled_work()
  xen: don't use flush_scheduled_work()
  gdrom: don't use flush_scheduled_work()
  ...
Fixed up trivial conflict in drivers/media/video/bt8xx/bttv-input.c
as per Tejun.
Diffstat (limited to 'drivers/mmc/host/omap.c')
| -rw-r--r-- | drivers/mmc/host/omap.c | 24 | 
1 files changed, 18 insertions, 6 deletions
| diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index 0c7e37f496e..379d2ffe4c8 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c @@ -173,6 +173,8 @@ struct mmc_omap_host {  	struct omap_mmc_platform_data *pdata;  }; +static struct workqueue_struct *mmc_omap_wq; +  static void mmc_omap_fclk_offdelay(struct mmc_omap_slot *slot)  {  	unsigned long tick_ns; @@ -289,7 +291,7 @@ static void mmc_omap_release_slot(struct mmc_omap_slot *slot, int clk_enabled)  		host->next_slot = new_slot;  		host->mmc = new_slot->mmc;  		spin_unlock_irqrestore(&host->slot_lock, flags); -		schedule_work(&host->slot_release_work); +		queue_work(mmc_omap_wq, &host->slot_release_work);  		return;  	} @@ -457,7 +459,7 @@ mmc_omap_xfer_done(struct mmc_omap_host *host, struct mmc_data *data)  	}  	host->stop_data = data; -	schedule_work(&host->send_stop_work); +	queue_work(mmc_omap_wq, &host->send_stop_work);  }  static void @@ -637,7 +639,7 @@ mmc_omap_cmd_timer(unsigned long data)  		OMAP_MMC_WRITE(host, IE, 0);  		disable_irq(host->irq);  		host->abort = 1; -		schedule_work(&host->cmd_abort_work); +		queue_work(mmc_omap_wq, &host->cmd_abort_work);  	}  	spin_unlock_irqrestore(&host->slot_lock, flags);  } @@ -826,7 +828,7 @@ static irqreturn_t mmc_omap_irq(int irq, void *dev_id)  		host->abort = 1;  		OMAP_MMC_WRITE(host, IE, 0);  		disable_irq_nosync(host->irq); -		schedule_work(&host->cmd_abort_work); +		queue_work(mmc_omap_wq, &host->cmd_abort_work);  		return IRQ_HANDLED;  	} @@ -1387,7 +1389,7 @@ static void mmc_omap_remove_slot(struct mmc_omap_slot *slot)  	tasklet_kill(&slot->cover_tasklet);  	del_timer_sync(&slot->cover_timer); -	flush_scheduled_work(); +	flush_workqueue(mmc_omap_wq);  	mmc_remove_host(mmc);  	mmc_free_host(mmc); @@ -1608,12 +1610,22 @@ static struct platform_driver mmc_omap_driver = {  static int __init mmc_omap_init(void)  { -	return platform_driver_probe(&mmc_omap_driver, mmc_omap_probe); +	int ret; + +	mmc_omap_wq = alloc_workqueue("mmc_omap", 0, 0); +	if (!mmc_omap_wq) +		return -ENOMEM; + +	ret = platform_driver_probe(&mmc_omap_driver, mmc_omap_probe); +	if (ret) +		destroy_workqueue(mmc_omap_wq); +	return ret;  }  static void __exit mmc_omap_exit(void)  {  	platform_driver_unregister(&mmc_omap_driver); +	destroy_workqueue(mmc_omap_wq);  }  module_init(mmc_omap_init); | 
