Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

WorkQueue: Fix up arch-specific work items where possible

Fix up arch-specific work items where possible to use the new work_struct and
delayed_work structs.

Three places that enqueue bits of their stack and then return have been marked
with #error as this is not permitted.

Signed-Off-By: David Howells <dhowells@redhat.com>

authored by

David Howells and committed by
David Howells
6d5aefb8 9db73724

+154 -121
+11 -11
arch/arm/common/sharpsl_pm.c
··· 60 60 static int sharpsl_fatal_check(void); 61 61 static int sharpsl_average_value(int ad); 62 62 static void sharpsl_average_clear(void); 63 - static void sharpsl_charge_toggle(void *private_); 64 - static void sharpsl_battery_thread(void *private_); 63 + static void sharpsl_charge_toggle(struct work_struct *private_); 64 + static void sharpsl_battery_thread(struct work_struct *private_); 65 65 66 66 67 67 /* 68 68 * Variables 69 69 */ 70 70 struct sharpsl_pm_status sharpsl_pm; 71 - DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL); 72 - DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL); 71 + DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle); 72 + DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread); 73 73 DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger); 74 74 75 75 ··· 116 116 EXPORT_SYMBOL(sharpsl_battery_kick); 117 117 118 118 119 - static void sharpsl_battery_thread(void *private_) 119 + static void sharpsl_battery_thread(struct work_struct *private_) 120 120 { 121 121 int voltage, percent, apm_status, i = 0; 122 122 ··· 128 128 /* Corgi cannot confirm when battery fully charged so periodically kick! */ 129 129 if (!sharpsl_pm.machinfo->batfull_irq && (sharpsl_pm.charge_mode == CHRG_ON) 130 130 && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL)) 131 - schedule_work(&toggle_charger); 131 + schedule_delayed_work(&toggle_charger, 0); 132 132 133 133 while(1) { 134 134 voltage = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); ··· 212 212 sharpsl_pm_led(SHARPSL_LED_OFF); 213 213 sharpsl_pm.charge_mode = CHRG_OFF; 214 214 215 - schedule_work(&sharpsl_bat); 215 + schedule_delayed_work(&sharpsl_bat, 0); 216 216 } 217 217 218 218 static void sharpsl_charge_error(void) ··· 222 222 sharpsl_pm.charge_mode = CHRG_ERROR; 223 223 } 224 224 225 - static void sharpsl_charge_toggle(void *private_) 225 + static void sharpsl_charge_toggle(struct work_struct *private_) 226 226 { 227 227 dev_dbg(sharpsl_pm.dev, "Toogling Charger at time: %lx\n", jiffies); 228 228 ··· 254 254 else if (sharpsl_pm.charge_mode == CHRG_ON) 255 255 sharpsl_charge_off(); 256 256 257 - schedule_work(&sharpsl_bat); 257 + schedule_delayed_work(&sharpsl_bat, 0); 258 258 } 259 259 260 260 ··· 279 279 sharpsl_charge_off(); 280 280 } else if (sharpsl_pm.full_count < 2) { 281 281 dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n"); 282 - schedule_work(&toggle_charger); 282 + schedule_delayed_work(&toggle_charger, 0); 283 283 } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) { 284 284 dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n"); 285 - schedule_work(&toggle_charger); 285 + schedule_delayed_work(&toggle_charger, 0); 286 286 } else { 287 287 sharpsl_charge_off(); 288 288 sharpsl_pm.charge_mode = CHRG_DONE;
+2 -1
arch/arm/mach-omap1/board-h3.c
··· 323 323 324 324 cancel_delayed_work(&irda_config->gpio_expa); 325 325 PREPARE_WORK(&irda_config->gpio_expa, set_trans_mode, &mode); 326 - schedule_work(&irda_config->gpio_expa); 326 + #error this is not permitted - mode is an argument variable 327 + schedule_delayed_work(&irda_config->gpio_expa, 0); 327 328 328 329 return 0; 329 330 }
+3 -3
arch/arm/mach-omap1/board-nokia770.c
··· 74 74 .rows = 8, 75 75 .cols = 8, 76 76 .keymap = nokia770_keymap, 77 - .keymapsize = ARRAY_SIZE(nokia770_keymap) 77 + .keymapsize = ARRAY_SIZE(nokia770_keymap), 78 78 .delay = 4, 79 79 }; 80 80 ··· 191 191 printk("HP connected\n"); 192 192 } 193 193 194 - static void codec_delayed_power_down(void *arg) 194 + static void codec_delayed_power_down(struct work_struct *work) 195 195 { 196 196 down(&audio_pwr_sem); 197 197 if (audio_pwr_state == -1) ··· 200 200 up(&audio_pwr_sem); 201 201 } 202 202 203 - static DECLARE_WORK(codec_power_down_work, codec_delayed_power_down, NULL); 203 + static DECLARE_DELAYED_WORK(codec_power_down_work, codec_delayed_power_down); 204 204 205 205 static void nokia770_audio_pwr_down(void) 206 206 {
+2 -2
arch/arm/mach-omap1/leds-osk.c
··· 35 35 36 36 static u8 tps_leds_change; 37 37 38 - static void tps_work(void *unused) 38 + static void tps_work(struct work_struct *unused) 39 39 { 40 40 for (;;) { 41 41 u8 leds; ··· 61 61 } 62 62 } 63 63 64 - static DECLARE_WORK(work, tps_work, NULL); 64 + static DECLARE_WORK(work, tps_work); 65 65 66 66 #ifdef CONFIG_OMAP_OSK_MISTRAL 67 67
+2 -1
arch/arm/mach-omap2/board-h4.c
··· 206 206 207 207 cancel_delayed_work(&irda_config->gpio_expa); 208 208 PREPARE_WORK(&irda_config->gpio_expa, set_trans_mode, &mode); 209 - schedule_work(&irda_config->gpio_expa); 209 + #error this is not permitted - mode is an argument variable 210 + schedule_delayed_work(&irda_config->gpio_expa, 0); 210 211 211 212 return 0; 212 213 }
+3 -3
arch/arm/mach-pxa/akita-ioexp.c
··· 36 36 37 37 static int max7310_write(struct i2c_client *client, int address, int data); 38 38 static struct i2c_client max7310_template; 39 - static void akita_ioexp_work(void *private_); 39 + static void akita_ioexp_work(struct work_struct *private_); 40 40 41 41 static struct device *akita_ioexp_device; 42 42 static unsigned char ioexp_output_value = AKITA_IOEXP_IO_OUT; 43 - DECLARE_WORK(akita_ioexp, akita_ioexp_work, NULL); 43 + DECLARE_WORK(akita_ioexp, akita_ioexp_work); 44 44 45 45 46 46 /* ··· 158 158 EXPORT_SYMBOL(akita_set_ioexp); 159 159 EXPORT_SYMBOL(akita_reset_ioexp); 160 160 161 - static void akita_ioexp_work(void *private_) 161 + static void akita_ioexp_work(struct work_struct *private_) 162 162 { 163 163 if (akita_ioexp_device) 164 164 max7310_set_ouputs(akita_ioexp_device, ioexp_output_value);
+2 -2
arch/ia64/hp/sim/simserial.c
··· 209 209 } 210 210 #endif 211 211 212 - static void do_softint(void *private_) 212 + static void do_softint(struct work_struct *private_) 213 213 { 214 214 printk(KERN_ERR "simserial: do_softint called\n"); 215 215 } ··· 698 698 info->flags = sstate->flags; 699 699 info->xmit_fifo_size = sstate->xmit_fifo_size; 700 700 info->line = line; 701 - INIT_WORK(&info->work, do_softint, info); 701 + INIT_WORK(&info->work, do_softint); 702 702 info->state = sstate; 703 703 if (sstate->info) { 704 704 kfree(info);
+4 -4
arch/ia64/kernel/mca.c
··· 678 678 * disable the cmc interrupt vector. 679 679 */ 680 680 static void 681 - ia64_mca_cmc_vector_disable_keventd(void *unused) 681 + ia64_mca_cmc_vector_disable_keventd(struct work_struct *unused) 682 682 { 683 683 on_each_cpu(ia64_mca_cmc_vector_disable, NULL, 1, 0); 684 684 } ··· 690 690 * enable the cmc interrupt vector. 691 691 */ 692 692 static void 693 - ia64_mca_cmc_vector_enable_keventd(void *unused) 693 + ia64_mca_cmc_vector_enable_keventd(struct work_struct *unused) 694 694 { 695 695 on_each_cpu(ia64_mca_cmc_vector_enable, NULL, 1, 0); 696 696 } ··· 1247 1247 monarch_cpu = -1; 1248 1248 } 1249 1249 1250 - static DECLARE_WORK(cmc_disable_work, ia64_mca_cmc_vector_disable_keventd, NULL); 1251 - static DECLARE_WORK(cmc_enable_work, ia64_mca_cmc_vector_enable_keventd, NULL); 1250 + static DECLARE_WORK(cmc_disable_work, ia64_mca_cmc_vector_disable_keventd); 1251 + static DECLARE_WORK(cmc_enable_work, ia64_mca_cmc_vector_enable_keventd); 1252 1252 1253 1253 /* 1254 1254 * ia64_mca_cmc_int_handler
+7 -5
arch/ia64/kernel/smpboot.c
··· 463 463 } 464 464 465 465 struct create_idle { 466 + struct work_struct work; 466 467 struct task_struct *idle; 467 468 struct completion done; 468 469 int cpu; 469 470 }; 470 471 471 472 void 472 - do_fork_idle(void *_c_idle) 473 + do_fork_idle(struct work_struct *work) 473 474 { 474 - struct create_idle *c_idle = _c_idle; 475 + struct create_idle *c_idle = 476 + container_of(work, struct create_idle, work); 475 477 476 478 c_idle->idle = fork_idle(c_idle->cpu); 477 479 complete(&c_idle->done); ··· 484 482 { 485 483 int timeout; 486 484 struct create_idle c_idle = { 485 + .work = __WORK_INITIALIZER(c_idle.work, do_fork_idle), 487 486 .cpu = cpu, 488 487 .done = COMPLETION_INITIALIZER(c_idle.done), 489 488 }; 490 - DECLARE_WORK(work, do_fork_idle, &c_idle); 491 489 492 490 c_idle.idle = get_idle_for_cpu(cpu); 493 491 if (c_idle.idle) { ··· 499 497 * We can't use kernel_thread since we must avoid to reschedule the child. 500 498 */ 501 499 if (!keventd_up() || current_is_keventd()) 502 - work.func(work.data); 500 + c_idle.work.func(&c_idle.work); 503 501 else { 504 - schedule_work(&work); 502 + schedule_work(&c_idle.work); 505 503 wait_for_completion(&c_idle.done); 506 504 } 507 505
+2 -2
arch/mips/kernel/kspd.c
··· 319 319 static int channel_open = 0; 320 320 321 321 /* the work handler */ 322 - static void sp_work(void *data) 322 + static void sp_work(struct work_struct *unused) 323 323 { 324 324 if (!channel_open) { 325 325 if( rtlx_open(RTLX_CHANNEL_SYSIO, 1) != 0) { ··· 354 354 return; 355 355 } 356 356 357 - INIT_WORK(&work, sp_work, NULL); 357 + INIT_WORK(&work, sp_work); 358 358 queue_work(workqueue, &work); 359 359 } else 360 360 queue_work(workqueue, &work);
+2 -2
arch/powerpc/platforms/embedded6xx/ls_uart.c
··· 14 14 15 15 static struct work_struct wd_work; 16 16 17 - static void wd_stop(void *unused) 17 + static void wd_stop(struct work_struct *unused) 18 18 { 19 19 const char string[] = "AAAAFFFFJJJJ>>>>VVVV>>>>ZZZZVVVVKKKK"; 20 20 int i = 0, rescue = 8; ··· 122 122 123 123 ls_uart_init(); 124 124 125 - INIT_WORK(&wd_work, wd_stop, NULL); 125 + INIT_WORK(&wd_work, wd_stop); 126 126 schedule_work(&wd_work); 127 127 128 128 return 0;
+6 -6
arch/powerpc/platforms/powermac/backlight.c
··· 18 18 19 19 #define OLD_BACKLIGHT_MAX 15 20 20 21 - static void pmac_backlight_key_worker(void *data); 22 - static void pmac_backlight_set_legacy_worker(void *data); 21 + static void pmac_backlight_key_worker(struct work_struct *work); 22 + static void pmac_backlight_set_legacy_worker(struct work_struct *work); 23 23 24 - static DECLARE_WORK(pmac_backlight_key_work, pmac_backlight_key_worker, NULL); 25 - static DECLARE_WORK(pmac_backlight_set_legacy_work, pmac_backlight_set_legacy_worker, NULL); 24 + static DECLARE_WORK(pmac_backlight_key_work, pmac_backlight_key_worker); 25 + static DECLARE_WORK(pmac_backlight_set_legacy_work, pmac_backlight_set_legacy_worker); 26 26 27 27 /* Although these variables are used in interrupt context, it makes no sense to 28 28 * protect them. No user is able to produce enough key events per second and ··· 94 94 return level; 95 95 } 96 96 97 - static void pmac_backlight_key_worker(void *data) 97 + static void pmac_backlight_key_worker(struct work_struct *work) 98 98 { 99 99 if (atomic_read(&kernel_backlight_disabled)) 100 100 return; ··· 166 166 return error; 167 167 } 168 168 169 - static void pmac_backlight_set_legacy_worker(void *data) 169 + static void pmac_backlight_set_legacy_worker(struct work_struct *work) 170 170 { 171 171 if (atomic_read(&kernel_backlight_disabled)) 172 172 return;
+13 -8
arch/ppc/8260_io/fcc_enet.c
··· 385 385 phy_info_t *phy; 386 386 struct work_struct phy_relink; 387 387 struct work_struct phy_display_config; 388 + struct net_device *dev; 388 389 389 390 uint sequence_done; 390 391 ··· 1392 1391 NULL 1393 1392 }; 1394 1393 1395 - static void mii_display_status(void *data) 1394 + static void mii_display_status(struct work_struct *work) 1396 1395 { 1397 - struct net_device *dev = data; 1398 - volatile struct fcc_enet_private *fep = dev->priv; 1396 + volatile struct fcc_enet_private *fep = 1397 + container_of(work, struct fcc_enet_private, phy_relink); 1398 + struct net_device *dev = fep->dev; 1399 1399 uint s = fep->phy_status; 1400 1400 1401 1401 if (!fep->link && !fep->old_link) { ··· 1430 1428 printk(".\n"); 1431 1429 } 1432 1430 1433 - static void mii_display_config(void *data) 1431 + static void mii_display_config(struct work_struct *work) 1434 1432 { 1435 - struct net_device *dev = data; 1436 - volatile struct fcc_enet_private *fep = dev->priv; 1433 + volatile struct fcc_enet_private *fep = 1434 + container_of(work, struct fcc_enet_private, 1435 + phy_display_config); 1436 + struct net_device *dev = fep->dev; 1437 1437 uint s = fep->phy_status; 1438 1438 1439 1439 printk("%s: config: auto-negotiation ", dev->name); ··· 1762 1758 cep->phy_id_done = 0; 1763 1759 cep->phy_addr = fip->fc_phyaddr; 1764 1760 mii_queue(dev, mk_mii_read(MII_PHYSID1), mii_discover_phy); 1765 - INIT_WORK(&cep->phy_relink, mii_display_status, dev); 1766 - INIT_WORK(&cep->phy_display_config, mii_display_config, dev); 1761 + INIT_WORK(&cep->phy_relink, mii_display_status); 1762 + INIT_WORK(&cep->phy_display_config, mii_display_config); 1763 + cep->dev = dev; 1767 1764 #endif /* CONFIG_USE_MDIO */ 1768 1765 1769 1766 fip++;
+13 -8
arch/ppc/8xx_io/fec.c
··· 173 173 uint phy_speed; 174 174 phy_info_t *phy; 175 175 struct work_struct phy_task; 176 + struct net_device *dev; 176 177 177 178 uint sequence_done; 178 179 ··· 1264 1263 printk(".\n"); 1265 1264 } 1266 1265 1267 - static void mii_display_config(void *priv) 1266 + static void mii_display_config(struct work_struct *work) 1268 1267 { 1269 - struct net_device *dev = (struct net_device *)priv; 1270 - struct fec_enet_private *fep = dev->priv; 1268 + struct fec_enet_private *fep = 1269 + container_of(work, struct fec_enet_private, phy_task); 1270 + struct net_device *dev = fep->dev; 1271 1271 volatile uint *s = &(fep->phy_status); 1272 1272 1273 1273 printk("%s: config: auto-negotiation ", dev->name); ··· 1297 1295 fep->sequence_done = 1; 1298 1296 } 1299 1297 1300 - static void mii_relink(void *priv) 1298 + static void mii_relink(struct work_struct *work) 1301 1299 { 1302 - struct net_device *dev = (struct net_device *)priv; 1303 - struct fec_enet_private *fep = dev->priv; 1300 + struct fec_enet_private *fep = 1301 + container_of(work, struct fec_enet_private, phy_task); 1302 + struct net_device *dev = fep->dev; 1304 1303 int duplex; 1305 1304 1306 1305 fep->link = (fep->phy_status & PHY_STAT_LINK) ? 1 : 0; ··· 1328 1325 { 1329 1326 struct fec_enet_private *fep = dev->priv; 1330 1327 1331 - INIT_WORK(&fep->phy_task, mii_relink, (void *)dev); 1328 + fep->dev = dev; 1329 + INIT_WORK(&fep->phy_task, mii_relink); 1332 1330 schedule_work(&fep->phy_task); 1333 1331 } 1334 1332 ··· 1337 1333 { 1338 1334 struct fec_enet_private *fep = dev->priv; 1339 1335 1340 - INIT_WORK(&fep->phy_task, mii_display_config, (void *)dev); 1336 + fep->dev = dev; 1337 + INIT_WORK(&fep->phy_task, mii_display_config); 1341 1338 schedule_work(&fep->phy_task); 1342 1339 } 1343 1340
+3 -3
arch/s390/appldata/appldata_base.c
··· 92 92 * Work queue 93 93 */ 94 94 static struct workqueue_struct *appldata_wq; 95 - static void appldata_work_fn(void *data); 96 - static DECLARE_WORK(appldata_work, appldata_work_fn, NULL); 95 + static void appldata_work_fn(struct work_struct *work); 96 + static DECLARE_WORK(appldata_work, appldata_work_fn); 97 97 98 98 99 99 /* ··· 125 125 * 126 126 * call data gathering function for each (active) module 127 127 */ 128 - static void appldata_work_fn(void *data) 128 + static void appldata_work_fn(struct work_struct *work) 129 129 { 130 130 struct list_head *lh; 131 131 struct appldata_ops *ops;
+1 -1
arch/um/drivers/chan_kern.c
··· 638 638 return -1; 639 639 } 640 640 641 - void chan_interrupt(struct list_head *chans, struct work_struct *task, 641 + void chan_interrupt(struct list_head *chans, struct delayed_work *task, 642 642 struct tty_struct *tty, int irq) 643 643 { 644 644 struct list_head *ele, *next;
+2 -2
arch/um/drivers/mconsole_kern.c
··· 56 56 57 57 static LIST_HEAD(mc_requests); 58 58 59 - static void mc_work_proc(void *unused) 59 + static void mc_work_proc(struct work_struct *unused) 60 60 { 61 61 struct mconsole_entry *req; 62 62 unsigned long flags; ··· 72 72 } 73 73 } 74 74 75 - static DECLARE_WORK(mconsole_work, mc_work_proc, NULL); 75 + static DECLARE_WORK(mconsole_work, mc_work_proc); 76 76 77 77 static irqreturn_t mconsole_interrupt(int irq, void *dev_id) 78 78 {
+1
arch/um/drivers/net_kern.c
··· 99 99 * same device, since it tests for (dev->flags & IFF_UP). So 100 100 * there's no harm in delaying the device shutdown. */ 101 101 schedule_work(&close_work); 102 + #error this is not permitted - close_work will go out of scope 102 103 goto out; 103 104 } 104 105 reactivate_fd(lp->fd, UM_ETH_IRQ);
+2 -2
arch/um/drivers/port_kern.c
··· 132 132 DECLARE_MUTEX(ports_sem); 133 133 struct list_head ports = LIST_HEAD_INIT(ports); 134 134 135 - void port_work_proc(void *unused) 135 + void port_work_proc(struct work_struct *unused) 136 136 { 137 137 struct port_list *port; 138 138 struct list_head *ele; ··· 150 150 local_irq_restore(flags); 151 151 } 152 152 153 - DECLARE_WORK(port_work, port_work_proc, NULL); 153 + DECLARE_WORK(port_work, port_work_proc); 154 154 155 155 static irqreturn_t port_interrupt(int irq, void *data) 156 156 {
+10 -6
drivers/macintosh/rack-meter.c
··· 48 48 } ____cacheline_aligned; 49 49 50 50 struct rackmeter_cpu { 51 - struct work_struct sniffer; 51 + struct delayed_work sniffer; 52 + struct rackmeter *rm; 52 53 cputime64_t prev_wall; 53 54 cputime64_t prev_idle; 54 55 int zero; ··· 209 208 rackmeter_do_pause(rm, 0); 210 209 } 211 210 212 - static void rackmeter_do_timer(void *data) 211 + static void rackmeter_do_timer(struct work_struct *work) 213 212 { 214 - struct rackmeter *rm = data; 213 + struct rackmeter_cpu *rcpu = 214 + container_of(work, struct rackmeter_cpu, sniffer.work); 215 + struct rackmeter *rm = rcpu->rm; 215 216 unsigned int cpu = smp_processor_id(); 216 - struct rackmeter_cpu *rcpu = &rm->cpu[cpu]; 217 217 cputime64_t cur_jiffies, total_idle_ticks; 218 218 unsigned int total_ticks, idle_ticks; 219 219 int i, offset, load, cumm, pause; ··· 265 263 * on those machines yet 266 264 */ 267 265 268 - INIT_WORK(&rm->cpu[0].sniffer, rackmeter_do_timer, rm); 269 - INIT_WORK(&rm->cpu[1].sniffer, rackmeter_do_timer, rm); 266 + rm->cpu[0].rm = rm; 267 + INIT_DELAYED_WORK(&rm->cpu[0].sniffer, rackmeter_do_timer); 268 + rm->cpu[1].rm = rm; 269 + INIT_DELAYED_WORK(&rm->cpu[1].sniffer, rackmeter_do_timer); 270 270 271 271 for_each_online_cpu(cpu) { 272 272 struct rackmeter_cpu *rcpu;
+1 -1
drivers/net/chelsio/cphy.h
··· 91 91 int state; /* Link status state machine */ 92 92 adapter_t *adapter; /* associated adapter */ 93 93 94 - struct work_struct phy_update; 94 + struct delayed_work phy_update; 95 95 96 96 u16 bmsr; 97 97 int count;
+5 -3
drivers/net/chelsio/my3126.c
··· 93 93 return cphy_cause_link_change; 94 94 } 95 95 96 - static void my3216_poll(void *arg) 96 + static void my3216_poll(struct work_struct *work) 97 97 { 98 - my3126_interrupt_handler(arg); 98 + struct cphy *cphy = container_of(work, struct cphy, phy_update.work); 99 + 100 + my3126_interrupt_handler(cphy); 99 101 } 100 102 101 103 static int my3126_set_loopback(struct cphy *cphy, int on) ··· 173 171 if (cphy) 174 172 cphy_init(cphy, adapter, phy_addr, &my3126_ops, mdio_ops); 175 173 176 - INIT_WORK(&cphy->phy_update, my3216_poll, cphy); 174 + INIT_DELAYED_WORK(&cphy->phy_update, my3216_poll); 177 175 cphy->bmsr = 0; 178 176 179 177 return (cphy);
+2 -1
drivers/net/netxen/netxen_nic.h
··· 714 714 spinlock_t lock; 715 715 struct work_struct watchdog_task; 716 716 struct work_struct tx_timeout_task; 717 + struct net_device *netdev; 717 718 struct timer_list watchdog_timer; 718 719 719 720 u32 curr_window; ··· 922 921 struct netxen_port *port); 923 922 int netxen_nic_rx_has_work(struct netxen_adapter *adapter); 924 923 int netxen_nic_tx_has_work(struct netxen_adapter *adapter); 925 - void netxen_watchdog_task(unsigned long v); 924 + void netxen_watchdog_task(struct work_struct *work); 926 925 void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx, 927 926 u32 ringid); 928 927 void netxen_process_cmd_ring(unsigned long data);
+3 -2
drivers/net/netxen/netxen_nic_init.c
··· 710 710 return rv; 711 711 } 712 712 713 - void netxen_watchdog_task(unsigned long v) 713 + void netxen_watchdog_task(struct work_struct *work) 714 714 { 715 715 int port_num; 716 716 struct netxen_port *port; 717 717 struct net_device *netdev; 718 - struct netxen_adapter *adapter = (struct netxen_adapter *)v; 718 + struct netxen_adapter *adapter = 719 + container_of(work, struct netxen_adapter, watchdog_task); 719 720 720 721 if (netxen_nic_check_temp(adapter)) 721 722 return;
+10 -9
drivers/net/netxen/netxen_nic_main.c
··· 64 64 static int netxen_nic_close(struct net_device *netdev); 65 65 static int netxen_nic_xmit_frame(struct sk_buff *, struct net_device *); 66 66 static void netxen_tx_timeout(struct net_device *netdev); 67 - static void netxen_tx_timeout_task(struct net_device *netdev); 67 + static void netxen_tx_timeout_task(struct work_struct *work); 68 68 static void netxen_watchdog(unsigned long); 69 69 static int netxen_handle_int(struct netxen_adapter *, struct net_device *); 70 70 static int netxen_nic_ioctl(struct net_device *netdev, ··· 274 274 adapter->ahw.xg_linkup = 0; 275 275 adapter->watchdog_timer.function = &netxen_watchdog; 276 276 adapter->watchdog_timer.data = (unsigned long)adapter; 277 - INIT_WORK(&adapter->watchdog_task, 278 - (void (*)(void *))netxen_watchdog_task, adapter); 277 + INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task); 279 278 adapter->ahw.pdev = pdev; 280 279 adapter->proc_cmd_buf_counter = 0; 281 280 pci_read_config_byte(pdev, PCI_REVISION_ID, &adapter->ahw.revision_id); ··· 378 379 dev_addr); 379 380 } 380 381 } 381 - INIT_WORK(&adapter->tx_timeout_task, 382 - (void (*)(void *))netxen_tx_timeout_task, netdev); 382 + adapter->netdev = netdev; 383 + INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task); 383 384 netif_carrier_off(netdev); 384 385 netif_stop_queue(netdev); 385 386 ··· 937 938 schedule_work(&adapter->tx_timeout_task); 938 939 } 939 940 940 - static void netxen_tx_timeout_task(struct net_device *netdev) 941 + static void netxen_tx_timeout_task(struct work_struct *work) 941 942 { 942 - struct netxen_port *port = (struct netxen_port *)netdev_priv(netdev); 943 + struct netxen_adapter *adapter = 944 + container_of(work, struct netxen_adapter, tx_timeout_task); 945 + struct net_device *netdev = adapter->netdev; 943 946 unsigned long flags; 944 947 945 948 printk(KERN_ERR "%s %s: transmit timeout, resetting.\n", 946 949 netxen_nic_driver_name, netdev->name); 947 950 948 - spin_lock_irqsave(&port->adapter->lock, flags); 951 + spin_lock_irqsave(&adapter->lock, flags); 949 952 netxen_nic_close(netdev); 950 953 netxen_nic_open(netdev); 951 - spin_unlock_irqrestore(&port->adapter->lock, flags); 954 + spin_unlock_irqrestore(&adapter->lock, flags); 952 955 netdev->trans_start = jiffies; 953 956 netif_wake_queue(netdev); 954 957 }
+9 -6
drivers/net/smc91x.c
··· 210 210 211 211 /* work queue */ 212 212 struct work_struct phy_configure; 213 + struct net_device *dev; 213 214 int work_pending; 214 215 215 216 spinlock_t lock; ··· 1115 1114 * of autonegotiation.) If the RPC ANEG bit is cleared, the selection 1116 1115 * is controlled by the RPC SPEED and RPC DPLX bits. 1117 1116 */ 1118 - static void smc_phy_configure(void *data) 1117 + static void smc_phy_configure(struct work_struct *work) 1119 1118 { 1120 - struct net_device *dev = data; 1121 - struct smc_local *lp = netdev_priv(dev); 1119 + struct smc_local *lp = 1120 + container_of(work, struct smc_local, phy_configure); 1121 + struct net_device *dev = lp->dev; 1122 1122 void __iomem *ioaddr = lp->base; 1123 1123 int phyaddr = lp->mii.phy_id; 1124 1124 int my_phy_caps; /* My PHY capabilities */ ··· 1594 1592 1595 1593 /* Configure the PHY, initialize the link state */ 1596 1594 if (lp->phy_type != 0) 1597 - smc_phy_configure(dev); 1595 + smc_phy_configure(&lp->phy_configure); 1598 1596 else { 1599 1597 spin_lock_irq(&lp->lock); 1600 1598 smc_10bt_check_media(dev, 1); ··· 1974 1972 #endif 1975 1973 1976 1974 tasklet_init(&lp->tx_task, smc_hardware_send_pkt, (unsigned long)dev); 1977 - INIT_WORK(&lp->phy_configure, smc_phy_configure, dev); 1975 + INIT_WORK(&lp->phy_configure, smc_phy_configure); 1976 + lp->dev = dev; 1978 1977 lp->mii.phy_id_mask = 0x1f; 1979 1978 lp->mii.reg_num_mask = 0x1f; 1980 1979 lp->mii.force_media = 0; ··· 2325 2322 smc_reset(ndev); 2326 2323 smc_enable(ndev); 2327 2324 if (lp->phy_type != 0) 2328 - smc_phy_configure(ndev); 2325 + smc_phy_configure(&lp->phy_configure); 2329 2326 netif_device_attach(ndev); 2330 2327 } 2331 2328 }
+13 -10
drivers/net/wireless/zd1211rw/zd_mac.c
··· 32 32 33 33 static void ieee_init(struct ieee80211_device *ieee); 34 34 static void softmac_init(struct ieee80211softmac_device *sm); 35 - static void set_rts_cts_work(void *d); 36 - static void set_basic_rates_work(void *d); 35 + static void set_rts_cts_work(struct work_struct *work); 36 + static void set_basic_rates_work(struct work_struct *work); 37 37 38 38 static void housekeeping_init(struct zd_mac *mac); 39 39 static void housekeeping_enable(struct zd_mac *mac); ··· 48 48 memset(mac, 0, sizeof(*mac)); 49 49 spin_lock_init(&mac->lock); 50 50 mac->netdev = netdev; 51 - INIT_WORK(&mac->set_rts_cts_work, set_rts_cts_work, mac); 52 - INIT_WORK(&mac->set_basic_rates_work, set_basic_rates_work, mac); 51 + INIT_DELAYED_WORK(&mac->set_rts_cts_work, set_rts_cts_work); 52 + INIT_DELAYED_WORK(&mac->set_basic_rates_work, set_basic_rates_work); 53 53 54 54 ieee_init(ieee); 55 55 softmac_init(ieee80211_priv(netdev)); ··· 366 366 spin_unlock_irqrestore(&mac->lock, flags); 367 367 } 368 368 369 - static void set_rts_cts_work(void *d) 369 + static void set_rts_cts_work(struct work_struct *work) 370 370 { 371 - struct zd_mac *mac = d; 371 + struct zd_mac *mac = 372 + container_of(work, struct zd_mac, set_rts_cts_work.work); 372 373 unsigned long flags; 373 374 u8 rts_rate; 374 375 unsigned int short_preamble; ··· 388 387 try_enable_tx(mac); 389 388 } 390 389 391 - static void set_basic_rates_work(void *d) 390 + static void set_basic_rates_work(struct work_struct *work) 392 391 { 393 - struct zd_mac *mac = d; 392 + struct zd_mac *mac = 393 + container_of(work, struct zd_mac, set_basic_rates_work.work); 394 394 unsigned long flags; 395 395 u16 basic_rates; 396 396 ··· 469 467 if (need_set_rts_cts && !mac->updating_rts_rate) { 470 468 mac->updating_rts_rate = 1; 471 469 netif_stop_queue(mac->netdev); 472 - queue_work(zd_workqueue, &mac->set_rts_cts_work); 470 + queue_delayed_work(zd_workqueue, &mac->set_rts_cts_work, 0); 473 471 } 474 472 if (need_set_rates && !mac->updating_basic_rates) { 475 473 mac->updating_basic_rates = 1; 476 474 netif_stop_queue(mac->netdev); 477 - queue_work(zd_workqueue, &mac->set_basic_rates_work); 475 + queue_delayed_work(zd_workqueue, &mac->set_basic_rates_work, 476 + 0); 478 477 } 479 478 spin_unlock_irqrestore(&mac->lock, flags); 480 479 }
+2 -2
drivers/net/wireless/zd1211rw/zd_mac.h
··· 133 133 struct iw_statistics iw_stats; 134 134 135 135 struct housekeeping housekeeping; 136 - struct work_struct set_rts_cts_work; 137 - struct work_struct set_basic_rates_work; 136 + struct delayed_work set_rts_cts_work; 137 + struct delayed_work set_basic_rates_work; 138 138 139 139 unsigned int stats_count; 140 140 u8 qual_buffer[ZD_MAC_STATS_BUFFER_SIZE];
+5 -4
drivers/spi/pxa2xx_spi.c
··· 148 148 void (*cs_control)(u32 command); 149 149 }; 150 150 151 - static void pump_messages(void *data); 151 + static void pump_messages(struct work_struct *work); 152 152 153 153 static int flush(struct driver_data *drv_data) 154 154 { ··· 884 884 } 885 885 } 886 886 887 - static void pump_messages(void *data) 887 + static void pump_messages(struct work_struct *work) 888 888 { 889 - struct driver_data *drv_data = data; 889 + struct driver_data *drv_data = 890 + container_of(work, struct driver_data, pump_messages); 890 891 unsigned long flags; 891 892 892 893 /* Lock queue and check for queue work */ ··· 1099 1098 tasklet_init(&drv_data->pump_transfers, 1100 1099 pump_transfers, (unsigned long)drv_data); 1101 1100 1102 - INIT_WORK(&drv_data->pump_messages, pump_messages, drv_data); 1101 + INIT_WORK(&drv_data->pump_messages, pump_messages); 1103 1102 drv_data->workqueue = create_singlethread_workqueue( 1104 1103 drv_data->master->cdev.dev->bus_id); 1105 1104 if (drv_data->workqueue == NULL)
+1 -1
drivers/usb/core/hub.c
··· 68 68 69 69 unsigned has_indicators:1; 70 70 u8 indicator[USB_MAXCHILDREN]; 71 - struct work_struct leds; 71 + struct delayed_work leds; 72 72 }; 73 73 74 74
+6 -5
drivers/usb/misc/appledisplay.c
··· 76 76 char *urbdata; /* interrupt URB data buffer */ 77 77 char *msgdata; /* control message data buffer */ 78 78 79 - struct work_struct work; 79 + struct delayed_work work; 80 80 int button_pressed; 81 81 spinlock_t lock; 82 82 }; ··· 117 117 case ACD_BTN_BRIGHT_UP: 118 118 case ACD_BTN_BRIGHT_DOWN: 119 119 pdata->button_pressed = 1; 120 - queue_work(wq, &pdata->work); 120 + queue_delayed_work(wq, &pdata->work, 0); 121 121 break; 122 122 case ACD_BTN_NONE: 123 123 default: ··· 184 184 .max_brightness = 0xFF 185 185 }; 186 186 187 - static void appledisplay_work(void *private) 187 + static void appledisplay_work(struct work_struct *work) 188 188 { 189 - struct appledisplay *pdata = private; 189 + struct appledisplay *pdata = 190 + container_of(work, struct appledisplay, work.work); 190 191 int retval; 191 192 192 193 up(&pdata->bd->sem); ··· 239 238 pdata->udev = udev; 240 239 241 240 spin_lock_init(&pdata->lock); 242 - INIT_WORK(&pdata->work, appledisplay_work, pdata); 241 + INIT_DELAYED_WORK(&pdata->work, appledisplay_work); 243 242 244 243 /* Allocate buffer for control messages */ 245 244 pdata->msgdata = kmalloc(ACD_MSG_BUFFER_LEN, GFP_KERNEL);
+4 -3
drivers/video/pxafb.c
··· 964 964 * Our LCD controller task (which is called when we blank or unblank) 965 965 * via keventd. 966 966 */ 967 - static void pxafb_task(void *dummy) 967 + static void pxafb_task(struct work_struct *work) 968 968 { 969 - struct pxafb_info *fbi = dummy; 969 + struct pxafb_info *fbi = 970 + container_of(work, struct pxafb_info, task); 970 971 u_int state = xchg(&fbi->task_state, -1); 971 972 972 973 set_ctrlr_state(fbi, state); ··· 1160 1159 } 1161 1160 1162 1161 init_waitqueue_head(&fbi->ctrlr_wait); 1163 - INIT_WORK(&fbi->task, pxafb_task, fbi); 1162 + INIT_WORK(&fbi->task, pxafb_task); 1164 1163 init_MUTEX(&fbi->ctrlr_sem); 1165 1164 1166 1165 return fbi;
+1 -1
include/asm-arm/arch-omap/irda.h
··· 24 24 /* Very specific to the needs of some platforms (h3,h4) 25 25 * having calls which can sleep in irda_set_speed. 26 26 */ 27 - struct work_struct gpio_expa; 27 + struct delayed_work gpio_expa; 28 28 int rx_channel; 29 29 int tx_channel; 30 30 unsigned long dest_start;
+1 -1
include/linux/netpoll.h
··· 32 32 struct netpoll *rx_np; /* netpoll that registered an rx_hook */ 33 33 struct sk_buff_head arp_tx; /* list of arp requests to reply to */ 34 34 struct sk_buff_head txq; 35 - struct work_struct tx_work; 35 + struct delayed_work tx_work; 36 36 }; 37 37 38 38 void netpoll_poll(struct netpoll *np);