diff options
227 files changed, 824 insertions, 937 deletions
| diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 5da0aec8ce90..438b10c44d73 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c @@ -65,9 +65,9 @@ srmcons_do_receive_chars(struct tty_port *port)  }  static void -srmcons_receive_chars(unsigned long data) +srmcons_receive_chars(struct timer_list *t)  { -	struct srmcons_private *srmconsp = (struct srmcons_private *)data; +	struct srmcons_private *srmconsp = from_timer(srmconsp, t, timer);  	struct tty_port *port = &srmconsp->port;  	unsigned long flags;  	int incr = 10; @@ -206,8 +206,7 @@ static const struct tty_operations srmcons_ops = {  static int __init  srmcons_init(void)  { -	setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, -			(unsigned long)&srmcons_singleton); +	timer_setup(&srmcons_singleton.timer, srmcons_receive_chars, 0);  	if (srm_is_registered_console) {  		struct tty_driver *driver;  		int err; diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c index 4a64a11ba63c..3b73813c6b04 100644 --- a/arch/arm/mach-iop32x/n2100.c +++ b/arch/arm/mach-iop32x/n2100.c @@ -305,7 +305,7 @@ static void n2100_restart(enum reboot_mode mode, const char *cmd)  static struct timer_list power_button_poll_timer; -static void power_button_poll(unsigned long dummy) +static void power_button_poll(struct timer_list *unused)  {  	if (gpio_get_value(N2100_POWER_BUTTON) == 0) {  		ctrl_alt_del(); @@ -336,7 +336,7 @@ static int __init n2100_request_gpios(void)  			pr_err("could not set power GPIO as input\n");  	}  	/* Set up power button poll timer */ -	setup_timer(&power_button_poll_timer, power_button_poll, 0UL); +	timer_setup(&power_button_poll_timer, power_button_poll, 0);  	power_button_poll_timer.expires = jiffies + (HZ / 10);  	add_timer(&power_button_poll_timer);  	return 0; diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index 3f5863de766a..39eae10ac8de 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c @@ -172,7 +172,7 @@ static struct platform_device db88f5281_nand_flash = {  static void __iomem *db88f5281_7seg;  static struct timer_list db88f5281_timer; -static void db88f5281_7seg_event(unsigned long data) +static void db88f5281_7seg_event(struct timer_list *unused)  {  	static int count = 0;  	writel(0, db88f5281_7seg + (count << 4)); @@ -189,7 +189,7 @@ static int __init db88f5281_7seg_init(void)  			printk(KERN_ERR "Failed to ioremap db88f5281_7seg\n");  			return -EIO;  		} -		setup_timer(&db88f5281_timer, db88f5281_7seg_event, 0); +		timer_setup(&db88f5281_timer, db88f5281_7seg_event, 0);  		mod_timer(&db88f5281_timer, jiffies + 2 * HZ);  	} diff --git a/arch/blackfin/kernel/nmi.c b/arch/blackfin/kernel/nmi.c index 828f4fbdb58a..8a211d95821f 100644 --- a/arch/blackfin/kernel/nmi.c +++ b/arch/blackfin/kernel/nmi.c @@ -166,7 +166,7 @@ int check_nmi_wdt_touched(void)  	return 1;  } -static void nmi_wdt_timer(unsigned long data) +static void nmi_wdt_timer(struct timer_list *unused)  {  	if (check_nmi_wdt_touched())  		nmi_wdt_keepalive(); @@ -180,7 +180,7 @@ static int __init init_nmi_wdt(void)  	nmi_wdt_start();  	nmi_active = true; -	setup_timer(&ntimer, nmi_wdt_timer, 0UL); +	timer_setup(&ntimer, nmi_wdt_timer, 0);  	ntimer.expires = jiffies + NMI_CHECK_TIMEOUT;  	add_timer(&ntimer); diff --git a/arch/mips/lasat/picvue_proc.c b/arch/mips/lasat/picvue_proc.c index a8103f6972cd..5d89e1ec5fcc 100644 --- a/arch/mips/lasat/picvue_proc.c +++ b/arch/mips/lasat/picvue_proc.c @@ -156,7 +156,7 @@ static const struct file_operations pvc_scroll_proc_fops = {  	.write		= pvc_scroll_proc_write,  }; -void pvc_proc_timerfunc(unsigned long data) +void pvc_proc_timerfunc(struct timer_list *unused)  {  	if (scroll_dir < 0)  		pvc_move(DISPLAY|RIGHT); @@ -197,7 +197,7 @@ static int __init pvc_proc_init(void)  	if (proc_entry == NULL)  		goto error; -	setup_timer(&timer, pvc_proc_timerfunc, 0UL); +	timer_setup(&timer, pvc_proc_timerfunc, 0);  	return 0;  error: diff --git a/arch/powerpc/kernel/tau_6xx.c b/arch/powerpc/kernel/tau_6xx.c index e3c5f75d137c..8cdd852aedd1 100644 --- a/arch/powerpc/kernel/tau_6xx.c +++ b/arch/powerpc/kernel/tau_6xx.c @@ -188,7 +188,7 @@ static void tau_timeout(void * info)  	local_irq_restore(flags);  } -static void tau_timeout_smp(unsigned long unused) +static void tau_timeout_smp(struct timer_list *unused)  {  	/* schedule ourselves to be run again */ @@ -230,7 +230,7 @@ int __init TAU_init(void)  	/* first, set up the window shrinking timer */ -	setup_timer(&tau_timer, tau_timeout_smp, 0UL); +	timer_setup(&tau_timer, tau_timeout_smp, 0);  	tau_timer.expires = jiffies + shrink_timer;  	add_timer(&tau_timer); diff --git a/arch/powerpc/oprofile/op_model_cell.c b/arch/powerpc/oprofile/op_model_cell.c index 264b6ab11978..b90a21bc2f3f 100644 --- a/arch/powerpc/oprofile/op_model_cell.c +++ b/arch/powerpc/oprofile/op_model_cell.c @@ -451,7 +451,7 @@ static inline void enable_ctr(u32 cpu, u32 ctr, u32 *pm07_cntrl)   * This routine will alternate loading the virtual counters for   * virtual CPUs   */ -static void cell_virtual_cntr(unsigned long data) +static void cell_virtual_cntr(struct timer_list *unused)  {  	int i, prev_hdw_thread, next_hdw_thread;  	u32 cpu; @@ -555,7 +555,7 @@ static void cell_virtual_cntr(unsigned long data)  static void start_virt_cntrs(void)  { -	setup_timer(&timer_virt_cntr, cell_virtual_cntr, 0UL); +	timer_setup(&timer_virt_cntr, cell_virtual_cntr, 0);  	timer_virt_cntr.expires = jiffies + HZ / 10;  	add_timer(&timer_virt_cntr);  } @@ -587,7 +587,7 @@ static int cell_reg_setup_spu_cycles(struct op_counter_config *ctr,   * periodically based on kernel timer to switch which SPU is   * being monitored in a round robbin fashion.   */ -static void spu_evnt_swap(unsigned long data) +static void spu_evnt_swap(struct timer_list *unused)  {  	int node;  	int cur_phys_spu, nxt_phys_spu, cur_spu_evnt_phys_spu_indx; @@ -677,7 +677,7 @@ static void spu_evnt_swap(unsigned long data)  static void start_spu_event_swap(void)  { -	setup_timer(&timer_spu_event_swap, spu_evnt_swap, 0UL); +	timer_setup(&timer_spu_event_swap, spu_evnt_swap, 0);  	timer_spu_event_swap.expires = jiffies + HZ / 25;  	add_timer(&timer_spu_event_swap);  } diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c index e47761cdcb98..9033c8194eda 100644 --- a/arch/powerpc/platforms/cell/spufs/sched.c +++ b/arch/powerpc/platforms/cell/spufs/sched.c @@ -992,13 +992,13 @@ static void spu_calc_load(void)  	CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);  } -static void spusched_wake(unsigned long data) +static void spusched_wake(struct timer_list *unused)  {  	mod_timer(&spusched_timer, jiffies + SPUSCHED_TICK);  	wake_up_process(spusched_task);  } -static void spuloadavg_wake(unsigned long data) +static void spuloadavg_wake(struct timer_list *unused)  {  	mod_timer(&spuloadavg_timer, jiffies + LOAD_FREQ);  	spu_calc_load(); @@ -1124,8 +1124,8 @@ int __init spu_sched_init(void)  	}  	spin_lock_init(&spu_prio->runq_lock); -	setup_timer(&spusched_timer, spusched_wake, 0); -	setup_timer(&spuloadavg_timer, spuloadavg_wake, 0); +	timer_setup(&spusched_timer, spusched_wake, 0); +	timer_setup(&spuloadavg_timer, spuloadavg_wake, 0);  	spusched_task = kthread_run(spusched_thread, NULL, "spusched");  	if (IS_ERR(spusched_task)) { diff --git a/arch/powerpc/platforms/powermac/low_i2c.c b/arch/powerpc/platforms/powermac/low_i2c.c index 39a1d4225e0f..3408f315ef48 100644 --- a/arch/powerpc/platforms/powermac/low_i2c.c +++ b/arch/powerpc/platforms/powermac/low_i2c.c @@ -361,9 +361,9 @@ static irqreturn_t kw_i2c_irq(int irq, void *dev_id)  	return IRQ_HANDLED;  } -static void kw_i2c_timeout(unsigned long data) +static void kw_i2c_timeout(struct timer_list *t)  { -	struct pmac_i2c_host_kw *host = (struct pmac_i2c_host_kw *)data; +	struct pmac_i2c_host_kw *host = from_timer(host, t, timeout_timer);  	unsigned long flags;  	spin_lock_irqsave(&host->lock, flags); @@ -513,7 +513,7 @@ static struct pmac_i2c_host_kw *__init kw_i2c_host_init(struct device_node *np)  	mutex_init(&host->mutex);  	init_completion(&host->complete);  	spin_lock_init(&host->lock); -	setup_timer(&host->timeout_timer, kw_i2c_timeout, (unsigned long)host); +	timer_setup(&host->timeout_timer, kw_i2c_timeout, 0);  	psteps = of_get_property(np, "AAPL,address-step", NULL);  	steps = psteps ? (*psteps) : 0x10; diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 5cbd52169348..be6198193ec2 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c @@ -523,7 +523,7 @@ static void __init stp_reset(void)  	}  } -static void stp_timeout(unsigned long dummy) +static void stp_timeout(struct timer_list *unused)  {  	queue_work(time_sync_wq, &stp_work);  } @@ -532,7 +532,7 @@ static int __init stp_init(void)  {  	if (!test_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags))  		return 0; -	setup_timer(&stp_timer, stp_timeout, 0UL); +	timer_setup(&stp_timer, stp_timeout, 0);  	time_init_wq();  	if (!stp_online)  		return 0; diff --git a/arch/sh/drivers/heartbeat.c b/arch/sh/drivers/heartbeat.c index c6d96049a0bb..e8af2ff29bc3 100644 --- a/arch/sh/drivers/heartbeat.c +++ b/arch/sh/drivers/heartbeat.c @@ -59,9 +59,9 @@ static inline void heartbeat_toggle_bit(struct heartbeat_data *hd,  	}  } -static void heartbeat_timer(unsigned long data) +static void heartbeat_timer(struct timer_list *t)  { -	struct heartbeat_data *hd = (struct heartbeat_data *)data; +	struct heartbeat_data *hd = from_timer(hd, t, timer);  	static unsigned bit = 0, up = 1;  	heartbeat_toggle_bit(hd, bit, hd->flags & HEARTBEAT_INVERTED); @@ -133,7 +133,7 @@ static int heartbeat_drv_probe(struct platform_device *pdev)  		}  	} -	setup_timer(&hd->timer, heartbeat_timer, (unsigned long)hd); +	timer_setup(&hd->timer, heartbeat_timer, 0);  	platform_set_drvdata(pdev, hd);  	return mod_timer(&hd->timer, jiffies + 1); diff --git a/arch/sh/drivers/pci/common.c b/arch/sh/drivers/pci/common.c index 0d7eb7b5ac8d..fe163ecd0719 100644 --- a/arch/sh/drivers/pci/common.c +++ b/arch/sh/drivers/pci/common.c @@ -85,18 +85,18 @@ int __init pci_is_66mhz_capable(struct pci_channel *hose,  	return cap66 > 0;  } -static void pcibios_enable_err(unsigned long __data) +static void pcibios_enable_err(struct timer_list *t)  { -	struct pci_channel *hose = (struct pci_channel *)__data; +	struct pci_channel *hose = from_timer(hose, t, err_timer);  	del_timer(&hose->err_timer);  	printk(KERN_DEBUG "PCI: re-enabling error IRQ.\n");  	enable_irq(hose->err_irq);  } -static void pcibios_enable_serr(unsigned long __data) +static void pcibios_enable_serr(struct timer_list *t)  { -	struct pci_channel *hose = (struct pci_channel *)__data; +	struct pci_channel *hose = from_timer(hose, t, serr_timer);  	del_timer(&hose->serr_timer);  	printk(KERN_DEBUG "PCI: re-enabling system error IRQ.\n"); @@ -106,13 +106,11 @@ static void pcibios_enable_serr(unsigned long __data)  void pcibios_enable_timers(struct pci_channel *hose)  {  	if (hose->err_irq) { -		setup_timer(&hose->err_timer, pcibios_enable_err, -			    (unsigned long)hose); +		timer_setup(&hose->err_timer, pcibios_enable_err, 0);  	}  	if (hose->serr_irq) { -		setup_timer(&hose->serr_timer, pcibios_enable_serr, -			    (unsigned long)hose); +		timer_setup(&hose->serr_timer, pcibios_enable_serr, 0);  	}  } diff --git a/arch/sh/drivers/push-switch.c b/arch/sh/drivers/push-switch.c index 2dc791507968..a17181160233 100644 --- a/arch/sh/drivers/push-switch.c +++ b/arch/sh/drivers/push-switch.c @@ -26,9 +26,9 @@ static ssize_t switch_show(struct device *dev,  }  static DEVICE_ATTR(switch, S_IRUGO, switch_show, NULL); -static void switch_timer(unsigned long data) +static void switch_timer(struct timer_list *t)  { -	struct push_switch *psw = (struct push_switch *)data; +	struct push_switch *psw = from_timer(psw, t, debounce);  	schedule_work(&psw->work);  } @@ -78,7 +78,7 @@ static int switch_drv_probe(struct platform_device *pdev)  	}  	INIT_WORK(&psw->work, switch_work_handler); -	setup_timer(&psw->debounce, switch_timer, (unsigned long)psw); +	timer_setup(&psw->debounce, switch_timer, 0);  	/* Workqueue API brain-damage */  	psw->pdev = pdev; diff --git a/block/blk-stat.c b/block/blk-stat.c index 3a2f3c96f367..28003bf9941c 100644 --- a/block/blk-stat.c +++ b/block/blk-stat.c @@ -79,9 +79,9 @@ void blk_stat_add(struct request *rq)  	rcu_read_unlock();  } -static void blk_stat_timer_fn(unsigned long data) +static void blk_stat_timer_fn(struct timer_list *t)  { -	struct blk_stat_callback *cb = (void *)data; +	struct blk_stat_callback *cb = from_timer(cb, t, timer);  	unsigned int bucket;  	int cpu; @@ -130,7 +130,7 @@ blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *),  	cb->bucket_fn = bucket_fn;  	cb->data = data;  	cb->buckets = buckets; -	setup_timer(&cb->timer, blk_stat_timer_fn, (unsigned long)cb); +	timer_setup(&cb->timer, blk_stat_timer_fn, 0);  	return cb;  } diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 96ad32623427..825bc29767e6 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -225,7 +225,7 @@ struct throtl_data  	bool track_bio_latency;  }; -static void throtl_pending_timer_fn(unsigned long arg); +static void throtl_pending_timer_fn(struct timer_list *t);  static inline struct throtl_grp *pd_to_tg(struct blkg_policy_data *pd)  { @@ -478,8 +478,7 @@ static void throtl_service_queue_init(struct throtl_service_queue *sq)  	INIT_LIST_HEAD(&sq->queued[0]);  	INIT_LIST_HEAD(&sq->queued[1]);  	sq->pending_tree = RB_ROOT; -	setup_timer(&sq->pending_timer, throtl_pending_timer_fn, -		    (unsigned long)sq); +	timer_setup(&sq->pending_timer, throtl_pending_timer_fn, 0);  }  static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node) @@ -1249,9 +1248,9 @@ static bool throtl_can_upgrade(struct throtl_data *td,   * the top-level service_tree is reached, throtl_data->dispatch_work is   * kicked so that the ready bio's are issued.   */ -static void throtl_pending_timer_fn(unsigned long arg) +static void throtl_pending_timer_fn(struct timer_list *t)  { -	struct throtl_service_queue *sq = (void *)arg; +	struct throtl_service_queue *sq = from_timer(sq, t, pending_timer);  	struct throtl_grp *tg = sq_to_tg(sq);  	struct throtl_data *td = sq_to_td(sq);  	struct request_queue *q = td->queue; diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index acf16c323e38..dd286ad404f8 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c @@ -293,7 +293,7 @@ static inline void __init show_version (void) {  */ -static void do_housekeeping (unsigned long arg); +static void do_housekeeping (struct timer_list *t);  /********** globals **********/  static unsigned short debug = 0; @@ -1493,8 +1493,8 @@ static const struct atmdev_ops amb_ops = {  };  /********** housekeeping **********/ -static void do_housekeeping (unsigned long arg) { -  amb_dev * dev = (amb_dev *) arg; +static void do_housekeeping (struct timer_list *t) { +  amb_dev * dev = from_timer(dev, t, housekeeping);    // could collect device-specific (not driver/atm-linux) stats here @@ -2267,8 +2267,7 @@ static int amb_probe(struct pci_dev *pci_dev,  	dev->atm_dev->ci_range.vpi_bits = NUM_VPI_BITS;  	dev->atm_dev->ci_range.vci_bits = NUM_VCI_BITS; -	setup_timer(&dev->housekeeping, do_housekeeping, -		    (unsigned long)dev); +	timer_setup(&dev->housekeeping, do_housekeeping, 0);  	mod_timer(&dev->housekeeping, jiffies);  	// enable host interrupts diff --git a/drivers/atm/firestream.c b/drivers/atm/firestream.c index 534001270be5..d97c05690faa 100644 --- a/drivers/atm/firestream.c +++ b/drivers/atm/firestream.c @@ -1656,9 +1656,9 @@ static irqreturn_t fs_irq (int irq, void *dev_id)  #ifdef FS_POLL_FREQ -static void fs_poll (unsigned long data) +static void fs_poll (struct timer_list *t)  { -	struct fs_dev *dev = (struct fs_dev *) data; +	struct fs_dev *dev = from_timer(dev, t, timer);  	fs_irq (0, dev);  	dev->timer.expires = jiffies + FS_POLL_FREQ; @@ -1885,7 +1885,7 @@ static int fs_init(struct fs_dev *dev)  	}  #ifdef FS_POLL_FREQ -	setup_timer (&dev->timer, fs_poll, (unsigned long)dev); +	timer_setup(&dev->timer, fs_poll, 0);  	dev->timer.expires = jiffies + FS_POLL_FREQ;  	add_timer (&dev->timer);  #endif diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c index e121b8485731..5ddc203206b8 100644 --- a/drivers/atm/horizon.c +++ b/drivers/atm/horizon.c @@ -357,7 +357,7 @@ static inline void __init show_version (void) {  /********** globals **********/ -static void do_housekeeping (unsigned long arg); +static void do_housekeeping (struct timer_list *t);  static unsigned short debug = 0;  static unsigned short vpi_bits = 0; @@ -1418,9 +1418,9 @@ static irqreturn_t interrupt_handler(int irq, void *dev_id)  /********** housekeeping **********/ -static void do_housekeeping (unsigned long arg) { +static void do_housekeeping (struct timer_list *t) {    // just stats at the moment -  hrz_dev * dev = (hrz_dev *) arg; +  hrz_dev * dev = from_timer(dev, t, housekeeping);    // collect device-specific (not driver/atm-linux) stats here    dev->tx_cell_count += rd_regw (dev, TX_CELL_COUNT_OFF); @@ -2796,7 +2796,7 @@ static int hrz_probe(struct pci_dev *pci_dev,  	dev->atm_dev->ci_range.vpi_bits = vpi_bits;  	dev->atm_dev->ci_range.vci_bits = 10-vpi_bits; -	setup_timer(&dev->housekeeping, do_housekeeping, (unsigned long) dev); +	timer_setup(&dev->housekeeping, do_housekeeping, 0);  	mod_timer(&dev->housekeeping, jiffies);  out: diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c index 0e3b9c44c808..0277f36be85b 100644 --- a/drivers/atm/idt77252.c +++ b/drivers/atm/idt77252.c @@ -1528,9 +1528,9 @@ idt77252_tx(struct idt77252_dev *card)  static void -tst_timer(unsigned long data) +tst_timer(struct timer_list *t)  { -	struct idt77252_dev *card = (struct idt77252_dev *)data; +	struct idt77252_dev *card = from_timer(card, t, tst_timer);  	unsigned long base, idle, jump;  	unsigned long flags;  	u32 pc; @@ -3634,7 +3634,7 @@ static int idt77252_init_one(struct pci_dev *pcidev,  	spin_lock_init(&card->cmd_lock);  	spin_lock_init(&card->tst_lock); -	setup_timer(&card->tst_timer, tst_timer, (unsigned long)card); +	timer_setup(&card->tst_timer, tst_timer, 0);  	/* Do the I/O remapping... */  	card->membase = ioremap(membase, 1024); diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 87e8b5dfac39..6664aa50789e 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c @@ -1761,9 +1761,9 @@ static void iter_dequeue(struct lanai_dev *lanai, vci_t vci)  }  #endif /* !DEBUG_RW */ -static void lanai_timed_poll(unsigned long arg) +static void lanai_timed_poll(struct timer_list *t)  { -	struct lanai_dev *lanai = (struct lanai_dev *) arg; +	struct lanai_dev *lanai = from_timer(lanai, t, timer);  #ifndef DEBUG_RW  	unsigned long flags;  #ifdef USE_POWERDOWN @@ -1790,7 +1790,7 @@ static void lanai_timed_poll(unsigned long arg)  static inline void lanai_timed_poll_start(struct lanai_dev *lanai)  { -	setup_timer(&lanai->timer, lanai_timed_poll, (unsigned long)lanai); +	timer_setup(&lanai->timer, lanai_timed_poll, 0);  	lanai->timer.expires = jiffies + LANAI_POLL_PERIOD;  	add_timer(&lanai->timer);  } diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c index 335447ed0ba4..cbec9adc01c7 100644 --- a/drivers/atm/nicstar.c +++ b/drivers/atm/nicstar.c @@ -145,7 +145,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user * arg);  #ifdef EXTRA_DEBUG  static void which_list(ns_dev * card, struct sk_buff *skb);  #endif -static void ns_poll(unsigned long arg); +static void ns_poll(struct timer_list *unused);  static void ns_phy_put(struct atm_dev *dev, unsigned char value,  		       unsigned long addr);  static unsigned char ns_phy_get(struct atm_dev *dev, unsigned long addr); @@ -284,7 +284,7 @@ static int __init nicstar_init(void)  	XPRINTK("nicstar: nicstar_init() returned.\n");  	if (!error) { -		setup_timer(&ns_timer, ns_poll, 0UL); +		timer_setup(&ns_timer, ns_poll, 0);  		ns_timer.expires = jiffies + NS_POLL_PERIOD;  		add_timer(&ns_timer);  	} @@ -2679,7 +2679,7 @@ static void which_list(ns_dev * card, struct sk_buff *skb)  }  #endif /* EXTRA_DEBUG */ -static void ns_poll(unsigned long arg) +static void ns_poll(struct timer_list *unused)  {  	int i;  	ns_dev *card; diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c index 6f14cdd6015b..442e777bdfb2 100644 --- a/drivers/block/DAC960.c +++ b/drivers/block/DAC960.c @@ -3079,8 +3079,8 @@ DAC960_InitializeController(DAC960_Controller_T *Controller)        /*  	Initialize the Monitoring Timer.        */ -      setup_timer(&Controller->MonitoringTimer, -                  DAC960_MonitoringTimerFunction, (unsigned long)Controller); +      timer_setup(&Controller->MonitoringTimer, +                  DAC960_MonitoringTimerFunction, 0);        Controller->MonitoringTimer.expires =  	jiffies + DAC960_MonitoringTimerInterval;        add_timer(&Controller->MonitoringTimer); @@ -5619,9 +5619,9 @@ static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *Command)    the status of DAC960 Controllers.  */ -static void DAC960_MonitoringTimerFunction(unsigned long TimerData) +static void DAC960_MonitoringTimerFunction(struct timer_list *t)  { -  DAC960_Controller_T *Controller = (DAC960_Controller_T *) TimerData; +  DAC960_Controller_T *Controller = from_timer(Controller, t, MonitoringTimer);    DAC960_Command_T *Command;    unsigned long flags; diff --git a/drivers/block/DAC960.h b/drivers/block/DAC960.h index 85fa9bb63759..6a6226a2b932 100644 --- a/drivers/block/DAC960.h +++ b/drivers/block/DAC960.h @@ -4406,7 +4406,7 @@ static irqreturn_t DAC960_PD_InterruptHandler(int, void *);  static irqreturn_t DAC960_P_InterruptHandler(int, void *);  static void DAC960_V1_QueueMonitoringCommand(DAC960_Command_T *);  static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *); -static void DAC960_MonitoringTimerFunction(unsigned long); +static void DAC960_MonitoringTimerFunction(struct timer_list *);  static void DAC960_Message(DAC960_MessageLevel_T, unsigned char *,  			   DAC960_Controller_T *, ...);  static void DAC960_CreateProcEntries(DAC960_Controller_T *); diff --git a/drivers/block/rsxx/dma.c b/drivers/block/rsxx/dma.c index 6a1b2177951c..beaccf197a5a 100644 --- a/drivers/block/rsxx/dma.c +++ b/drivers/block/rsxx/dma.c @@ -354,9 +354,9 @@ static void rsxx_handle_dma_error(struct rsxx_dma_ctrl *ctrl,  		rsxx_complete_dma(ctrl, dma, status);  } -static void dma_engine_stalled(unsigned long data) +static void dma_engine_stalled(struct timer_list *t)  { -	struct rsxx_dma_ctrl *ctrl = (struct rsxx_dma_ctrl *)data; +	struct rsxx_dma_ctrl *ctrl = from_timer(ctrl, t, activity_timer);  	int cnt;  	if (atomic_read(&ctrl->stats.hw_q_depth) == 0 || @@ -838,8 +838,7 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev,  	mutex_init(&ctrl->work_lock);  	INIT_LIST_HEAD(&ctrl->queue); -	setup_timer(&ctrl->activity_timer, dma_engine_stalled, -					(unsigned long)ctrl); +	timer_setup(&ctrl->activity_timer, dma_engine_stalled, 0);  	ctrl->issue_wq = alloc_ordered_workqueue(DRIVER_NAME"_issue", 0);  	if (!ctrl->issue_wq) diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c index 2819f23e8bf2..de0d08133c7e 100644 --- a/drivers/block/skd_main.c +++ b/drivers/block/skd_main.c @@ -707,9 +707,9 @@ static void skd_start_queue(struct work_struct *work)  	blk_mq_start_hw_queues(skdev->queue);  } -static void skd_timer_tick(ulong arg) +static void skd_timer_tick(struct timer_list *t)  { -	struct skd_device *skdev = (struct skd_device *)arg; +	struct skd_device *skdev = from_timer(skdev, t, timer);  	unsigned long reqflags;  	u32 state; @@ -857,7 +857,7 @@ static int skd_start_timer(struct skd_device *skdev)  {  	int rc; -	setup_timer(&skdev->timer, skd_timer_tick, (ulong)skdev); +	timer_setup(&skdev->timer, skd_timer_tick, 0);  	rc = mod_timer(&skdev->timer, (jiffies + HZ));  	if (rc) diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c index ad9749463d4f..5ca56bfae63c 100644 --- a/drivers/block/sunvdc.c +++ b/drivers/block/sunvdc.c @@ -81,7 +81,7 @@ struct vdc_port {  static void vdc_ldc_reset(struct vdc_port *port);  static void vdc_ldc_reset_work(struct work_struct *work); -static void vdc_ldc_reset_timer(unsigned long _arg); +static void vdc_ldc_reset_timer(struct timer_list *t);  static inline struct vdc_port *to_vdc_port(struct vio_driver_state *vio)  { @@ -974,8 +974,7 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)  	 */  	ldc_timeout = mdesc_get_property(hp, vdev->mp, "vdc-timeout", NULL);  	port->ldc_timeout = ldc_timeout ? *ldc_timeout : 0; -	setup_timer(&port->ldc_reset_timer, vdc_ldc_reset_timer, -		    (unsigned long)port); +	timer_setup(&port->ldc_reset_timer, vdc_ldc_reset_timer, 0);  	INIT_WORK(&port->ldc_reset_work, vdc_ldc_reset_work);  	err = vio_driver_init(&port->vio, vdev, VDEV_DISK, @@ -1087,9 +1086,9 @@ static void vdc_queue_drain(struct vdc_port *port)  		__blk_end_request_all(req, BLK_STS_IOERR);  } -static void vdc_ldc_reset_timer(unsigned long _arg) +static void vdc_ldc_reset_timer(struct timer_list *t)  { -	struct vdc_port *port = (struct vdc_port *) _arg; +	struct vdc_port *port = from_timer(port, t, ldc_reset_timer);  	struct vio_driver_state *vio = &port->vio;  	unsigned long flags; diff --git a/drivers/block/umem.c b/drivers/block/umem.c index b4d4ccfe7582..8077123678ad 100644 --- a/drivers/block/umem.c +++ b/drivers/block/umem.c @@ -718,7 +718,7 @@ static void check_batteries(struct cardinfo *card)  		set_fault_to_battery_status(card);  } -static void check_all_batteries(unsigned long ptr) +static void check_all_batteries(struct timer_list *unused)  {  	int i; @@ -738,7 +738,7 @@ static void check_all_batteries(unsigned long ptr)  static void init_battery_timer(void)  { -	setup_timer(&battery_timer, check_all_batteries, 0UL); +	timer_setup(&battery_timer, check_all_batteries, 0);  	battery_timer.expires = jiffies + (HZ * 60);  	add_timer(&battery_timer);  } diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 14459d66ef0c..c24589414c75 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c @@ -770,9 +770,9 @@ static void ace_fsm_tasklet(unsigned long data)  	spin_unlock_irqrestore(&ace->lock, flags);  } -static void ace_stall_timer(unsigned long data) +static void ace_stall_timer(struct timer_list *t)  { -	struct ace_device *ace = (void *)data; +	struct ace_device *ace = from_timer(ace, t, stall_timer);  	unsigned long flags;  	dev_warn(ace->dev, @@ -984,7 +984,7 @@ static int ace_setup(struct ace_device *ace)  	 * Initialize the state machine tasklet and stall timer  	 */  	tasklet_init(&ace->fsm_tasklet, ace_fsm_tasklet, (unsigned long)ace); -	setup_timer(&ace->stall_timer, ace_stall_timer, (unsigned long)ace); +	timer_setup(&ace->stall_timer, ace_stall_timer, 0);  	/*  	 * Initialize the request queue diff --git a/drivers/char/ipmi/bt-bmc.c b/drivers/char/ipmi/bt-bmc.c index c4ef73c6f455..6edfaa72b98b 100644 --- a/drivers/char/ipmi/bt-bmc.c +++ b/drivers/char/ipmi/bt-bmc.c @@ -367,9 +367,9 @@ static const struct file_operations bt_bmc_fops = {  	.unlocked_ioctl	= bt_bmc_ioctl,  }; -static void poll_timer(unsigned long data) +static void poll_timer(struct timer_list *t)  { -	struct bt_bmc *bt_bmc = (void *)data; +	struct bt_bmc *bt_bmc = from_timer(bt_bmc, t, poll_timer);  	bt_bmc->poll_timer.expires += msecs_to_jiffies(500);  	wake_up(&bt_bmc->queue); @@ -487,8 +487,7 @@ static int bt_bmc_probe(struct platform_device *pdev)  		dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);  	} else {  		dev_info(dev, "No IRQ; using timer\n"); -		setup_timer(&bt_bmc->poll_timer, poll_timer, -			    (unsigned long)bt_bmc); +		timer_setup(&bt_bmc->poll_timer, poll_timer, 0);  		bt_bmc->poll_timer.expires = jiffies + msecs_to_jiffies(10);  		add_timer(&bt_bmc->poll_timer);  	} diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index 9de189db2cc3..f45732a2cb3e 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -4766,7 +4766,7 @@ static struct timer_list ipmi_timer;  static atomic_t stop_operation; -static void ipmi_timeout(unsigned long data) +static void ipmi_timeout(struct timer_list *unused)  {  	ipmi_smi_t intf;  	int nt = 0; @@ -5172,7 +5172,7 @@ static int ipmi_init_msghandler(void)  #endif /* CONFIG_IPMI_PROC_INTERFACE */ -	setup_timer(&ipmi_timer, ipmi_timeout, 0); +	timer_setup(&ipmi_timer, ipmi_timeout, 0);  	mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);  	atomic_notifier_chain_register(&panic_notifier_list, &panic_block); diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index 71d33a1807e4..779869ed32b1 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -1091,9 +1091,9 @@ static void set_need_watch(void *send_info, bool enable)  	spin_unlock_irqrestore(&smi_info->si_lock, flags);  } -static void smi_timeout(unsigned long data) +static void smi_timeout(struct timer_list *t)  { -	struct smi_info   *smi_info = (struct smi_info *) data; +	struct smi_info   *smi_info = from_timer(smi_info, t, si_timer);  	enum si_sm_result smi_result;  	unsigned long     flags;  	unsigned long     jiffies_now; @@ -1166,7 +1166,7 @@ static int smi_start_processing(void       *send_info,  	new_smi->intf = intf;  	/* Set up the timer that drives the interface. */ -	setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); +	timer_setup(&new_smi->si_timer, smi_timeout, 0);  	smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES);  	/* Try to claim any interrupts. */ diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c index 466b3a1c0adf..3cfaec728604 100644 --- a/drivers/char/ipmi/ipmi_ssif.c +++ b/drivers/char/ipmi/ipmi_ssif.c @@ -551,9 +551,9 @@ static void start_get(struct ssif_info *ssif_info)  	}  } -static void retry_timeout(unsigned long data) +static void retry_timeout(struct timer_list *t)  { -	struct ssif_info *ssif_info = (void *) data; +	struct ssif_info *ssif_info = from_timer(ssif_info, t, retry_timer);  	unsigned long oflags, *flags;  	bool waiting; @@ -1691,8 +1691,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)  	spin_lock_init(&ssif_info->lock);  	ssif_info->ssif_state = SSIF_NORMAL; -	setup_timer(&ssif_info->retry_timer, retry_timeout, -		    (unsigned long)ssif_info); +	timer_setup(&ssif_info->retry_timer, retry_timeout, 0);  	for (i = 0; i < SSIF_NUM_STATS; i++)  		atomic_set(&ssif_info->stats[i], 0); diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c index 461bf0b8a094..230b99288024 100644 --- a/drivers/char/tpm/tpm-dev-common.c +++ b/drivers/char/tpm/tpm-dev-common.c @@ -22,9 +22,9 @@  #include "tpm.h"  #include "tpm-dev.h" -static void user_reader_timeout(unsigned long ptr) +static void user_reader_timeout(struct timer_list *t)  { -	struct file_priv *priv = (struct file_priv *)ptr; +	struct file_priv *priv = from_timer(priv, t, user_read_timer);  	pr_warn("TPM user space timeout is deprecated (pid=%d)\n",  		task_tgid_nr(current)); @@ -48,8 +48,7 @@ void tpm_common_open(struct file *file, struct tpm_chip *chip,  	priv->chip = chip;  	atomic_set(&priv->data_pending, 0);  	mutex_init(&priv->buffer_mutex); -	setup_timer(&priv->user_read_timer, user_reader_timeout, -			(unsigned long)priv); +	timer_setup(&priv->user_read_timer, user_reader_timeout, 0);  	INIT_WORK(&priv->work, timeout_work);  	file->private_data = priv; diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c index 09c1c4ff93ca..3717b3df34a4 100644 --- a/drivers/gpu/drm/drm_vblank.c +++ b/drivers/gpu/drm/drm_vblank.c @@ -367,9 +367,9 @@ void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)  	spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);  } -static void vblank_disable_fn(unsigned long arg) +static void vblank_disable_fn(struct timer_list *t)  { -	struct drm_vblank_crtc *vblank = (void *)arg; +	struct drm_vblank_crtc *vblank = from_timer(vblank, t, disable_timer);  	struct drm_device *dev = vblank->dev;  	unsigned int pipe = vblank->pipe;  	unsigned long irqflags; @@ -436,8 +436,7 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)  		vblank->dev = dev;  		vblank->pipe = i;  		init_waitqueue_head(&vblank->queue); -		setup_timer(&vblank->disable_timer, vblank_disable_fn, -			    (unsigned long)vblank); +		timer_setup(&vblank->disable_timer, vblank_disable_fn, 0);  		seqlock_init(&vblank->seqlock);  	} @@ -1019,7 +1018,7 @@ static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)  		if (drm_vblank_offdelay == 0)  			return;  		else if (drm_vblank_offdelay < 0) -			vblank_disable_fn((unsigned long)vblank); +			vblank_disable_fn(&vblank->disable_timer);  		else if (!dev->vblank_disable_immediate)  			mod_timer(&vblank->disable_timer,  				  jiffies + ((drm_vblank_offdelay * HZ)/1000)); @@ -1650,7 +1649,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)  	spin_unlock_irqrestore(&dev->event_lock, irqflags);  	if (disable_irq) -		vblank_disable_fn((unsigned long)vblank); +		vblank_disable_fn(&vblank->disable_timer);  	return true;  } diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index 53e03f8af3d5..e6b0940b1ac2 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -161,9 +161,9 @@ static const struct exynos_drm_crtc_ops vidi_crtc_ops = {  	.atomic_flush = exynos_crtc_handle_event,  }; -static void vidi_fake_vblank_timer(unsigned long arg) +static void vidi_fake_vblank_timer(struct timer_list *t)  { -	struct vidi_context *ctx = (void *)arg; +	struct vidi_context *ctx = from_timer(ctx, t, timer);  	if (drm_crtc_handle_vblank(&ctx->crtc->base))  		mod_timer(&ctx->timer, @@ -449,7 +449,7 @@ static int vidi_probe(struct platform_device *pdev)  	ctx->pdev = pdev; -	setup_timer(&ctx->timer, vidi_fake_vblank_timer, (unsigned long)ctx); +	timer_setup(&ctx->timer, vidi_fake_vblank_timer, 0);  	mutex_init(&ctx->lock); diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c index 4d1f45acf2cd..127815253a84 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c @@ -601,9 +601,9 @@ tda998x_reset(struct tda998x_priv *priv)   * we have seen a HPD inactive->active transition.  This code implements   * that delay.   */ -static void tda998x_edid_delay_done(unsigned long data) +static void tda998x_edid_delay_done(struct timer_list *t)  { -	struct tda998x_priv *priv = (struct tda998x_priv *)data; +	struct tda998x_priv *priv = from_timer(priv, t, edid_delay_timer);  	priv->edid_delay_active = false;  	wake_up(&priv->edid_delay_waitq); @@ -1492,8 +1492,7 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)  	mutex_init(&priv->mutex);	/* protect the page access */  	init_waitqueue_head(&priv->edid_delay_waitq); -	setup_timer(&priv->edid_delay_timer, tda998x_edid_delay_done, -		    (unsigned long)priv); +	timer_setup(&priv->edid_delay_timer, tda998x_edid_delay_done, 0);  	INIT_WORK(&priv->detect_work, tda998x_detect_work);  	/* wake up the device: */ diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c index 40f4840ef98e..970c7963ae29 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c @@ -82,9 +82,9 @@ static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu)  	return NULL;  } -static void a5xx_preempt_timer(unsigned long data) +static void a5xx_preempt_timer(struct timer_list *t)  { -	struct a5xx_gpu *a5xx_gpu = (struct a5xx_gpu *) data; +	struct a5xx_gpu *a5xx_gpu = from_timer(a5xx_gpu, t, preempt_timer);  	struct msm_gpu *gpu = &a5xx_gpu->base.base;  	struct drm_device *dev = gpu->dev;  	struct msm_drm_private *priv = dev->dev_private; @@ -300,6 +300,5 @@ void a5xx_preempt_init(struct msm_gpu *gpu)  		}  	} -	setup_timer(&a5xx_gpu->preempt_timer, a5xx_preempt_timer, -		(unsigned long) a5xx_gpu); +	timer_setup(&a5xx_gpu->preempt_timer, a5xx_preempt_timer, 0);  } diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 8d4477818ec2..232201403439 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -353,9 +353,9 @@ static void hangcheck_timer_reset(struct msm_gpu *gpu)  			round_jiffies_up(jiffies + DRM_MSM_HANGCHECK_JIFFIES));  } -static void hangcheck_handler(unsigned long data) +static void hangcheck_handler(struct timer_list *t)  { -	struct msm_gpu *gpu = (struct msm_gpu *)data; +	struct msm_gpu *gpu = from_timer(gpu, t, hangcheck_timer);  	struct drm_device *dev = gpu->dev;  	struct msm_drm_private *priv = dev->dev_private;  	struct msm_ringbuffer *ring = gpu->funcs->active_ring(gpu); @@ -703,8 +703,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,  	INIT_WORK(&gpu->recover_work, recover_worker); -	setup_timer(&gpu->hangcheck_timer, hangcheck_handler, -			(unsigned long)gpu); +	timer_setup(&gpu->hangcheck_timer, hangcheck_handler, 0);  	spin_lock_init(&gpu->perf_lock); diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index cea744e4d9bd..c2cf6d98e577 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -4095,7 +4095,7 @@ static void dsi_update_screen_dispc(struct platform_device *dsidev)  }  #ifdef DSI_CATCH_MISSING_TE -static void dsi_te_timeout(unsigned long arg) +static void dsi_te_timeout(struct timer_list *unused)  {  	DSSERR("TE not received for 250ms!\n");  } @@ -5449,7 +5449,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)  			     dsi_framedone_timeout_work_callback);  #ifdef DSI_CATCH_MISSING_TE -	setup_timer(&dsi->te_timer, dsi_te_timeout, 0); +	timer_setup(&dsi->te_timer, dsi_te_timeout, 0);  #endif  	dsi_mem = platform_get_resource_byname(dsidev, IORESOURCE_MEM, "proto"); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c index a553e182ff53..3acfd576b7df 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_psr.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_psr.c @@ -101,9 +101,9 @@ static void psr_set_state(struct psr_drv *psr, enum psr_state state)  	spin_unlock_irqrestore(&psr->lock, flags);  } -static void psr_flush_handler(unsigned long data) +static void psr_flush_handler(struct timer_list *t)  { -	struct psr_drv *psr = (struct psr_drv *)data; +	struct psr_drv *psr = from_timer(psr, t, flush_timer);  	unsigned long flags;  	/* If the state has changed since we initiated the flush, do nothing */ @@ -232,7 +232,7 @@ int rockchip_drm_psr_register(struct drm_encoder *encoder,  	if (!psr)  		return -ENOMEM; -	setup_timer(&psr->flush_timer, psr_flush_handler, (unsigned long)psr); +	timer_setup(&psr->flush_timer, psr_flush_handler, 0);  	spin_lock_init(&psr->lock);  	psr->active = true; diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem/vgem_fence.c index 8fd52f211e9d..b28876c222b4 100644 --- a/drivers/gpu/drm/vgem/vgem_fence.c +++ b/drivers/gpu/drm/vgem/vgem_fence.c @@ -85,9 +85,9 @@ static const struct dma_fence_ops vgem_fence_ops = {  	.timeline_value_str = vgem_fence_timeline_value_str,  }; -static void vgem_fence_timeout(unsigned long data) +static void vgem_fence_timeout(struct timer_list *t)  { -	struct vgem_fence *fence = (struct vgem_fence *)data; +	struct vgem_fence *fence = from_timer(fence, t, timer);  	dma_fence_signal(&fence->base);  } @@ -105,7 +105,7 @@ static struct dma_fence *vgem_fence_create(struct vgem_file *vfile,  	dma_fence_init(&fence->base, &vgem_fence_ops, &fence->lock,  		       dma_fence_context_alloc(1), 1); -	setup_timer(&fence->timer, vgem_fence_timeout, (unsigned long)fence); +	timer_setup(&fence->timer, vgem_fence_timeout, 0);  	/* We force the fence to expire within 10s to prevent driver hangs */  	mod_timer(&fence->timer, jiffies + VGEM_FENCE_TIMEOUT); diff --git a/drivers/gpu/drm/via/via_dmablit.c b/drivers/gpu/drm/via/via_dmablit.c index 32c9938e1e1e..d6e84a589ef1 100644 --- a/drivers/gpu/drm/via/via_dmablit.c +++ b/drivers/gpu/drm/via/via_dmablit.c @@ -452,9 +452,9 @@ via_dmablit_sync(struct drm_device *dev, uint32_t handle, int engine)  static void -via_dmablit_timer(unsigned long data) +via_dmablit_timer(struct timer_list *t)  { -	drm_via_blitq_t *blitq = (drm_via_blitq_t *) data; +	drm_via_blitq_t *blitq = from_timer(blitq, t, poll_timer);  	struct drm_device *dev = blitq->dev;  	int engine = (int)  		(blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues); @@ -559,8 +559,7 @@ via_init_dmablit(struct drm_device *dev)  			init_waitqueue_head(blitq->blit_queue + j);  		init_waitqueue_head(&blitq->busy_queue);  		INIT_WORK(&blitq->wq, via_dmablit_workqueue); -		setup_timer(&blitq->poll_timer, via_dmablit_timer, -				(unsigned long)blitq); +		timer_setup(&blitq->poll_timer, via_dmablit_timer, 0);  	}  } diff --git a/drivers/hid/hid-appleir.c b/drivers/hid/hid-appleir.c index 07cbc70f00e7..eae7d52cf1a8 100644 --- a/drivers/hid/hid-appleir.c +++ b/drivers/hid/hid-appleir.c @@ -173,9 +173,9 @@ static void battery_flat(struct appleir *appleir)  	dev_err(&appleir->input_dev->dev, "possible flat battery?\n");  } -static void key_up_tick(unsigned long data) +static void key_up_tick(struct timer_list *t)  { -	struct appleir *appleir = (struct appleir *)data; +	struct appleir *appleir = from_timer(appleir, t, key_up_timer);  	struct hid_device *hid = appleir->hid;  	unsigned long flags; @@ -303,8 +303,7 @@ static int appleir_probe(struct hid_device *hid, const struct hid_device_id *id)  	hid->quirks |= HID_QUIRK_HIDINPUT_FORCE;  	spin_lock_init(&appleir->lock); -	setup_timer(&appleir->key_up_timer, -		    key_up_tick, (unsigned long) appleir); +	timer_setup(&appleir->key_up_timer, key_up_tick, 0);  	hid_set_drvdata(hid, appleir); diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c index 49c4bd34b3c5..87eda34ea2f8 100644 --- a/drivers/hid/hid-prodikeys.c +++ b/drivers/hid/hid-prodikeys.c @@ -239,9 +239,9 @@ drop_note:  	return;  } -static void pcmidi_sustained_note_release(unsigned long data) +static void pcmidi_sustained_note_release(struct timer_list *t)  { -	struct pcmidi_sustain *pms = (struct pcmidi_sustain *)data; +	struct pcmidi_sustain *pms = from_timer(pms, t, timer);  	pcmidi_send_note(pms->pm, pms->status, pms->note, pms->velocity);  	pms->in_use = 0; @@ -256,8 +256,7 @@ static void init_sustain_timers(struct pcmidi_snd *pm)  		pms = &pm->sustained_notes[i];  		pms->in_use = 0;  		pms->pm = pm; -		setup_timer(&pms->timer, pcmidi_sustained_note_release, -			(unsigned long)pms); +		timer_setup(&pms->timer, pcmidi_sustained_note_release, 0);  	}  } diff --git a/drivers/hid/hid-wiimote-core.c b/drivers/hid/hid-wiimote-core.c index d00391418d1a..579884ebd94d 100644 --- a/drivers/hid/hid-wiimote-core.c +++ b/drivers/hid/hid-wiimote-core.c @@ -1226,9 +1226,9 @@ static void wiimote_schedule(struct wiimote_data *wdata)  	spin_unlock_irqrestore(&wdata->state.lock, flags);  } -static void wiimote_init_timeout(unsigned long arg) +static void wiimote_init_timeout(struct timer_list *t)  { -	struct wiimote_data *wdata = (void*)arg; +	struct wiimote_data *wdata = from_timer(wdata, t, timer);  	wiimote_schedule(wdata);  } @@ -1740,7 +1740,7 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)  	wdata->state.cmd_battery = 0xff;  	INIT_WORK(&wdata->init_worker, wiimote_init_worker); -	setup_timer(&wdata->timer, wiimote_init_timeout, (long)wdata); +	timer_setup(&wdata->timer, wiimote_init_timeout, 0);  	return wdata;  } diff --git a/drivers/iio/common/ssp_sensors/ssp_dev.c b/drivers/iio/common/ssp_sensors/ssp_dev.c index ea7adb638d99..2ba2ff5e59c4 100644 --- a/drivers/iio/common/ssp_sensors/ssp_dev.c +++ b/drivers/iio/common/ssp_sensors/ssp_dev.c @@ -175,9 +175,9 @@ static void ssp_wdt_work_func(struct work_struct *work)  	data->timeout_cnt = 0;  } -static void ssp_wdt_timer_func(unsigned long ptr) +static void ssp_wdt_timer_func(struct timer_list *t)  { -	struct ssp_data *data = (struct ssp_data *)ptr; +	struct ssp_data *data = from_timer(data, t, wdt_timer);  	switch (data->fw_dl_state) {  	case SSP_FW_DL_STATE_FAIL: @@ -571,7 +571,7 @@ static int ssp_probe(struct spi_device *spi)  	INIT_WORK(&data->work_wdt, ssp_wdt_work_func);  	INIT_DELAYED_WORK(&data->work_refresh, ssp_refresh_task); -	setup_timer(&data->wdt_timer, ssp_wdt_timer_func, (unsigned long)data); +	timer_setup(&data->wdt_timer, ssp_wdt_timer_func, 0);  	ret = request_threaded_irq(data->spi->irq, NULL,  				   ssp_irq_thread_fn, diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c index 9beee9cef137..ee0ee1f9994b 100644 --- a/drivers/infiniband/hw/mlx5/mr.c +++ b/drivers/infiniband/hw/mlx5/mr.c @@ -642,9 +642,9 @@ err:  	return -ENOMEM;  } -static void delay_time_func(unsigned long ctx) +static void delay_time_func(struct timer_list *t)  { -	struct mlx5_ib_dev *dev = (struct mlx5_ib_dev *)ctx; +	struct mlx5_ib_dev *dev = from_timer(dev, t, delay_timer);  	dev->fill_delay = 0;  } @@ -663,7 +663,7 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev)  		return -ENOMEM;  	} -	setup_timer(&dev->delay_timer, delay_time_func, (unsigned long)dev); +	timer_setup(&dev->delay_timer, delay_time_func, 0);  	for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) {  		ent = &cache->ent[i];  		INIT_LIST_HEAD(&ent->head); diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c index cedc665364cd..73862a836062 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c @@ -202,9 +202,9 @@ void gameport_stop_polling(struct gameport *gameport)  }  EXPORT_SYMBOL(gameport_stop_polling); -static void gameport_run_poll_handler(unsigned long d) +static void gameport_run_poll_handler(struct timer_list *t)  { -	struct gameport *gameport = (struct gameport *)d; +	struct gameport *gameport = from_timer(gameport, t, poll_timer);  	gameport->poll_handler(gameport);  	if (gameport->poll_cnt) @@ -542,8 +542,7 @@ static void gameport_init_port(struct gameport *gameport)  	INIT_LIST_HEAD(&gameport->node);  	spin_lock_init(&gameport->timer_lock); -	setup_timer(&gameport->poll_timer, gameport_run_poll_handler, -		    (unsigned long)gameport); +	timer_setup(&gameport->poll_timer, gameport_run_poll_handler, 0);  }  /* diff --git a/drivers/input/joystick/db9.c b/drivers/input/joystick/db9.c index f4ad83eab67f..de0dd4756c84 100644 --- a/drivers/input/joystick/db9.c +++ b/drivers/input/joystick/db9.c @@ -364,9 +364,9 @@ static int db9_saturn(int mode, struct parport *port, struct input_dev *devs[])  	return 0;  } -static void db9_timer(unsigned long private) +static void db9_timer(struct timer_list *t)  { -	struct db9 *db9 = (void *) private; +	struct db9 *db9 = from_timer(db9, t, timer);  	struct parport *port = db9->pd->port;  	struct input_dev *dev = db9->dev[0];  	struct input_dev *dev2 = db9->dev[1]; @@ -609,7 +609,7 @@ static void db9_attach(struct parport *pp)  	db9->pd = pd;  	db9->mode = mode;  	db9->parportno = pp->number; -	setup_timer(&db9->timer, db9_timer, (long)db9); +	timer_setup(&db9->timer, db9_timer, 0);  	for (i = 0; i < (min(db9_mode->n_pads, DB9_MAX_DEVICES)); i++) { diff --git a/drivers/input/joystick/gamecon.c b/drivers/input/joystick/gamecon.c index ca734ea97e53..2ffb2e8bdc3b 100644 --- a/drivers/input/joystick/gamecon.c +++ b/drivers/input/joystick/gamecon.c @@ -743,9 +743,9 @@ static void gc_psx_process_packet(struct gc *gc)   * gc_timer() initiates reads of console pads data.   */ -static void gc_timer(unsigned long private) +static void gc_timer(struct timer_list *t)  { -	struct gc *gc = (void *) private; +	struct gc *gc = from_timer(gc, t, timer);  /*   * N64 pads - must be read first, any read confuses them for 200 us @@ -974,7 +974,7 @@ static void gc_attach(struct parport *pp)  	mutex_init(&gc->mutex);  	gc->pd = pd;  	gc->parportno = pp->number; -	setup_timer(&gc->timer, gc_timer, (long) gc); +	timer_setup(&gc->timer, gc_timer, 0);  	for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) {  		if (!pads[i]) diff --git a/drivers/input/joystick/turbografx.c b/drivers/input/joystick/turbografx.c index a1fdc75a438d..e2685753e460 100644 --- a/drivers/input/joystick/turbografx.c +++ b/drivers/input/joystick/turbografx.c @@ -89,9 +89,9 @@ static struct tgfx {   * tgfx_timer() reads and analyzes TurboGraFX joystick data.   */ -static void tgfx_timer(unsigned long private) +static void tgfx_timer(struct timer_list *t)  { -	struct tgfx *tgfx = (void *) private; +	struct tgfx *tgfx = from_timer(tgfx, t, timer);  	struct input_dev *dev;  	int data1, data2, i; @@ -200,7 +200,7 @@ static void tgfx_attach(struct parport *pp)  	mutex_init(&tgfx->sem);  	tgfx->pd = pd;  	tgfx->parportno = pp->number; -	setup_timer(&tgfx->timer, tgfx_timer, (long)tgfx); +	timer_setup(&tgfx->timer, tgfx_timer, 0);  	for (i = 0; i < n_devs; i++) {  		if (n_buttons[i] < 1) diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index 466aaa8ba841..83fe2621effe 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -36,7 +36,7 @@ static unsigned long iova_rcache_get(struct iova_domain *iovad,  static void init_iova_rcaches(struct iova_domain *iovad);  static void free_iova_rcaches(struct iova_domain *iovad);  static void fq_destroy_all_entries(struct iova_domain *iovad); -static void fq_flush_timeout(unsigned long data); +static void fq_flush_timeout(struct timer_list *t);  void  init_iova_domain(struct iova_domain *iovad, unsigned long granule, @@ -107,7 +107,7 @@ int init_iova_flush_queue(struct iova_domain *iovad,  		spin_lock_init(&fq->lock);  	} -	setup_timer(&iovad->fq_timer, fq_flush_timeout, (unsigned long)iovad); +	timer_setup(&iovad->fq_timer, fq_flush_timeout, 0);  	atomic_set(&iovad->fq_timer_on, 0);  	return 0; @@ -519,9 +519,9 @@ static void fq_destroy_all_entries(struct iova_domain *iovad)  	}  } -static void fq_flush_timeout(unsigned long data) +static void fq_flush_timeout(struct timer_list *t)  { -	struct iova_domain *iovad = (struct iova_domain *)data; +	struct iova_domain *iovad = from_timer(iovad, t, fq_timer);  	int cpu;  	atomic_set(&iovad->fq_timer_on, 0); diff --git a/drivers/isdn/capi/capidrv.c b/drivers/isdn/capi/capidrv.c index 89dd1303a98a..49fef08858c5 100644 --- a/drivers/isdn/capi/capidrv.c +++ b/drivers/isdn/capi/capidrv.c @@ -2235,9 +2235,9 @@ static void send_listen(capidrv_contr *card)  	send_message(card, &cmdcmsg);  } -static void listentimerfunc(unsigned long x) +static void listentimerfunc(struct timer_list *t)  { -	capidrv_contr *card = (capidrv_contr *)x; +	capidrv_contr *card = from_timer(card, t, listentimer);  	if (card->state != ST_LISTEN_NONE && card->state != ST_LISTEN_ACTIVE)  		printk(KERN_ERR "%s: controller dead ??\n", card->name);  	send_listen(card); @@ -2264,7 +2264,7 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)  		return -1;  	}  	card->owner = THIS_MODULE; -	setup_timer(&card->listentimer, listentimerfunc, (unsigned long)card); +	timer_setup(&card->listentimer, listentimerfunc, 0);  	strcpy(card->name, id);  	card->contrnr = contr;  	card->nbchan = profp->nbchannel; diff --git a/drivers/isdn/divert/isdn_divert.c b/drivers/isdn/divert/isdn_divert.c index 6f423bc49d0d..5620fd2c6009 100644 --- a/drivers/isdn/divert/isdn_divert.c +++ b/drivers/isdn/divert/isdn_divert.c @@ -55,10 +55,10 @@ DEFINE_SPINLOCK(divert_lock);  /***************************/  /* timer callback function */  /***************************/ -static void deflect_timer_expire(ulong arg) +static void deflect_timer_expire(struct timer_list *t)  {  	unsigned long flags; -	struct call_struc *cs = (struct call_struc *) arg; +	struct call_struc *cs = from_timer(cs, t, timer);  	spin_lock_irqsave(&divert_lock, flags);  	del_timer(&cs->timer); /* delete active timer */ @@ -157,7 +157,7 @@ int cf_command(int drvid, int mode,  	/* allocate mem for information struct */  	if (!(cs = kmalloc(sizeof(struct call_struc), GFP_ATOMIC)))  		return (-ENOMEM); /* no memory */ -	setup_timer(&cs->timer, deflect_timer_expire, (ulong)cs); +	timer_setup(&cs->timer, deflect_timer_expire, 0);  	cs->info[0] = '\0';  	cs->ics.driver = drvid;  	cs->ics.command = ISDN_CMD_PROT_IO; /* protocol specific io */ @@ -450,8 +450,7 @@ static int isdn_divert_icall(isdn_ctrl *ic)  					return (0); /* no external deflection needed */  			if (!(cs = kmalloc(sizeof(struct call_struc), GFP_ATOMIC)))  				return (0); /* no memory */ -			setup_timer(&cs->timer, deflect_timer_expire, -				    (ulong)cs); +			timer_setup(&cs->timer, deflect_timer_expire, 0);  			cs->info[0] = '\0';  			cs->ics = *ic; /* copy incoming data */ diff --git a/drivers/isdn/hardware/eicon/divasi.c b/drivers/isdn/hardware/eicon/divasi.c index c61049585cbd..0033d74a7291 100644 --- a/drivers/isdn/hardware/eicon/divasi.c +++ b/drivers/isdn/hardware/eicon/divasi.c @@ -78,7 +78,7 @@ static unsigned int um_idi_poll(struct file *file, poll_table *wait);  static int um_idi_open(struct inode *inode, struct file *file);  static int um_idi_release(struct inode *inode, struct file *file);  static int remove_entity(void *entity); -static void diva_um_timer_function(unsigned long data); +static void diva_um_timer_function(struct timer_list *t);  /*   * proc entry @@ -300,8 +300,7 @@ static int um_idi_open_adapter(struct file *file, int adapter_nr)  	p_os = (diva_um_idi_os_context_t *) diva_um_id_get_os_context(e);  	init_waitqueue_head(&p_os->read_wait);  	init_waitqueue_head(&p_os->close_wait); -	setup_timer(&p_os->diva_timer_id, (void *)diva_um_timer_function, -		    (unsigned long)p_os); +	timer_setup(&p_os->diva_timer_id, diva_um_timer_function, 0);  	p_os->aborted = 0;  	p_os->adapter_nr = adapter_nr;  	return (1); @@ -457,9 +456,9 @@ void diva_os_wakeup_close(void *os_context)  }  static -void diva_um_timer_function(unsigned long data) +void diva_um_timer_function(struct timer_list *t)  { -	diva_um_idi_os_context_t *p_os = (diva_um_idi_os_context_t *) data; +	diva_um_idi_os_context_t *p_os = from_timer(p_os, t, diva_timer_id);  	p_os->aborted = 1;  	wake_up_interruptible(&p_os->read_wait); diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index 3cf07b8ced1c..4d85645c87f7 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c @@ -2855,7 +2855,7 @@ irq_notforus:   */  static void -hfcmulti_dbusy_timer(struct hfc_multi *hc) +hfcmulti_dbusy_timer(struct timer_list *t)  {  } @@ -3877,8 +3877,7 @@ hfcmulti_initmode(struct dchannel *dch)  		if (hc->dnum[pt]) {  			mode_hfcmulti(hc, dch->slot, dch->dev.D.protocol,  				      -1, 0, -1, 0); -			setup_timer(&dch->timer, (void *)hfcmulti_dbusy_timer, -				    (long)dch); +			timer_setup(&dch->timer, hfcmulti_dbusy_timer, 0);  		}  		for (i = 1; i <= 31; i++) {  			if (!((1 << i) & hc->bmask[pt])) /* skip unused chan */ @@ -3984,8 +3983,7 @@ hfcmulti_initmode(struct dchannel *dch)  		hc->chan[i].slot_rx = -1;  		hc->chan[i].conf = -1;  		mode_hfcmulti(hc, i, dch->dev.D.protocol, -1, 0, -1, 0); -		setup_timer(&dch->timer, (void *)hfcmulti_dbusy_timer, -			    (long)dch); +		timer_setup(&dch->timer, hfcmulti_dbusy_timer, 0);  		hc->chan[i - 2].slot_tx = -1;  		hc->chan[i - 2].slot_rx = -1;  		hc->chan[i - 2].conf = -1; diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c index e4ebbee863a1..ba3fe14bbe00 100644 --- a/drivers/isdn/hardware/mISDN/hfcpci.c +++ b/drivers/isdn/hardware/mISDN/hfcpci.c @@ -1241,7 +1241,7 @@ hfcpci_int(int intno, void *dev_id)   * timer callback for D-chan busy resolution. Currently no function   */  static void -hfcpci_dbusy_timer(struct hfc_pci *hc) +hfcpci_dbusy_timer(struct timer_list *t)  {  } @@ -1717,8 +1717,7 @@ static void  inithfcpci(struct hfc_pci *hc)  {  	printk(KERN_DEBUG "inithfcpci: entered\n"); -	setup_timer(&hc->dch.timer, (void *)hfcpci_dbusy_timer, -		    (long)&hc->dch); +	timer_setup(&hc->dch.timer, hfcpci_dbusy_timer, 0);  	hc->chanlimit = 2;  	mode_hfcpci(&hc->bch[0], 1, -1);  	mode_hfcpci(&hc->bch[1], 2, -1); diff --git a/drivers/isdn/hardware/mISDN/mISDNisar.c b/drivers/isdn/hardware/mISDN/mISDNisar.c index 5b078591b6ee..b791688d0228 100644 --- a/drivers/isdn/hardware/mISDN/mISDNisar.c +++ b/drivers/isdn/hardware/mISDN/mISDNisar.c @@ -1146,9 +1146,9 @@ mISDNisar_irq(struct isar_hw *isar)  EXPORT_SYMBOL(mISDNisar_irq);  static void -ftimer_handler(unsigned long data) +ftimer_handler(struct timer_list *t)  { -	struct isar_ch *ch = (struct isar_ch *)data; +	struct isar_ch *ch = from_timer(ch, t, ftimer);  	pr_debug("%s: ftimer flags %lx\n", ch->is->name, ch->bch.Flags);  	test_and_clear_bit(FLG_FTI_RUN, &ch->bch.Flags); @@ -1635,11 +1635,9 @@ init_isar(struct isar_hw *isar)  	}  	if (isar->version != 1)  		return -EINVAL; -	setup_timer(&isar->ch[0].ftimer, &ftimer_handler, -		    (long)&isar->ch[0]); +	timer_setup(&isar->ch[0].ftimer, ftimer_handler, 0);  	test_and_set_bit(FLG_INITIALIZED, &isar->ch[0].bch.Flags); -	setup_timer(&isar->ch[1].ftimer, &ftimer_handler, -		    (long)&isar->ch[1]); +	timer_setup(&isar->ch[1].ftimer, ftimer_handler, 0);  	test_and_set_bit(FLG_INITIALIZED, &isar->ch[1].bch.Flags);  	return 0;  } diff --git a/drivers/isdn/i4l/isdn_common.c b/drivers/isdn/i4l/isdn_common.c index 3fa2f7b31131..8b03d618185e 100644 --- a/drivers/isdn/i4l/isdn_common.c +++ b/drivers/isdn/i4l/isdn_common.c @@ -231,7 +231,7 @@ static int isdn_timer_cnt2 = 0;  static int isdn_timer_cnt3 = 0;  static void -isdn_timer_funct(ulong dummy) +isdn_timer_funct(struct timer_list *unused)  {  	int tf = dev->tflags;  	if (tf & ISDN_TIMER_FAST) { @@ -2294,7 +2294,7 @@ static int __init isdn_init(void)  		printk(KERN_WARNING "isdn: Could not allocate device-struct.\n");  		return -EIO;  	} -	setup_timer(&dev->timer, isdn_timer_funct, 0UL); +	timer_setup(&dev->timer, isdn_timer_funct, 0);  	spin_lock_init(&dev->lock);  	spin_lock_init(&dev->timerlock);  #ifdef MODULE diff --git a/drivers/isdn/i4l/isdn_net.c b/drivers/isdn/i4l/isdn_net.c index 59d40160cab2..c138f66f2659 100644 --- a/drivers/isdn/i4l/isdn_net.c +++ b/drivers/isdn/i4l/isdn_net.c @@ -1509,9 +1509,9 @@ static int isdn_net_ioctl(struct net_device *dev,  /* called via cisco_timer.function */  static void -isdn_net_ciscohdlck_slarp_send_keepalive(unsigned long data) +isdn_net_ciscohdlck_slarp_send_keepalive(struct timer_list *t)  { -	isdn_net_local *lp = (isdn_net_local *) data; +	isdn_net_local *lp = from_timer(lp, t, cisco_timer);  	struct sk_buff *skb;  	unsigned char *p;  	unsigned long last_cisco_myseq = lp->cisco_myseq; @@ -1615,9 +1615,8 @@ isdn_net_ciscohdlck_connected(isdn_net_local *lp)  	/* send slarp request because interface/seq.no.s reset */  	isdn_net_ciscohdlck_slarp_send_request(lp); -	setup_timer(&lp->cisco_timer, -		    isdn_net_ciscohdlck_slarp_send_keepalive, -		    (unsigned long)lp); +	timer_setup(&lp->cisco_timer, +		    isdn_net_ciscohdlck_slarp_send_keepalive, 0);  	lp->cisco_timer.expires = jiffies + lp->cisco_keepalive_period * HZ;  	add_timer(&lp->cisco_timer);  } diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c index cd2b3c69771a..e07aefb9151d 100644 --- a/drivers/isdn/i4l/isdn_ppp.c +++ b/drivers/isdn/i4l/isdn_ppp.c @@ -50,7 +50,7 @@ static struct ippp_ccp_reset *isdn_ppp_ccp_reset_alloc(struct ippp_struct *is);  static void isdn_ppp_ccp_reset_free(struct ippp_struct *is);  static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is,  					  unsigned char id); -static void isdn_ppp_ccp_timer_callback(unsigned long closure); +static void isdn_ppp_ccp_timer_callback(struct timer_list *t);  static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is,  								   unsigned char id);  static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is, @@ -2327,10 +2327,10 @@ static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is,  /* The timer callback function which is called when a ResetReq has timed out,     aka has never been answered by a ResetAck */ -static void isdn_ppp_ccp_timer_callback(unsigned long closure) +static void isdn_ppp_ccp_timer_callback(struct timer_list *t)  {  	struct ippp_ccp_reset_state *rs = -		(struct ippp_ccp_reset_state *)closure; +		from_timer(rs, t, timer);  	if (!rs) {  		printk(KERN_ERR "ippp_ccp: timer cb with zero closure.\n"); @@ -2376,8 +2376,7 @@ static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_s  		rs->state = CCPResetIdle;  		rs->is = is;  		rs->id = id; -		setup_timer(&rs->timer, isdn_ppp_ccp_timer_callback, -			    (unsigned long)rs); +		timer_setup(&rs->timer, isdn_ppp_ccp_timer_callback, 0);  		is->reset->rs[id] = rs;  	}  	return rs; diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index d30130c8d0f3..960f26348bb5 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c @@ -541,9 +541,9 @@ isdn_tty_senddown(modem_info *info)   * into the tty's buffer.   */  static void -isdn_tty_modem_do_ncarrier(unsigned long data) +isdn_tty_modem_do_ncarrier(struct timer_list *t)  { -	modem_info *info = (modem_info *) data; +	modem_info *info = from_timer(info, t, nc_timer);  	isdn_tty_modem_result(RESULT_NO_CARRIER, info);  } @@ -1812,8 +1812,7 @@ isdn_tty_modem_init(void)  		info->isdn_channel = -1;  		info->drv_index = -1;  		info->xmit_size = ISDN_SERIAL_XMIT_SIZE; -		setup_timer(&info->nc_timer, isdn_tty_modem_do_ncarrier, -			    (unsigned long)info); +		timer_setup(&info->nc_timer, isdn_tty_modem_do_ncarrier, 0);  		skb_queue_head_init(&info->xmit_queue);  #ifdef CONFIG_ISDN_AUDIO  		skb_queue_head_init(&info->dtmf_queue); diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c index e179b33d3775..bc68dbbcaec1 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c @@ -145,9 +145,9 @@ void s5p_mfc_cleanup_queue(struct list_head *lh, struct vb2_queue *vq)  	}  } -static void s5p_mfc_watchdog(unsigned long arg) +static void s5p_mfc_watchdog(struct timer_list *t)  { -	struct s5p_mfc_dev *dev = (struct s5p_mfc_dev *)arg; +	struct s5p_mfc_dev *dev = from_timer(dev, t, watchdog_timer);  	if (test_bit(0, &dev->hw_lock))  		atomic_inc(&dev->watchdog_cnt); @@ -1314,8 +1314,7 @@ static int s5p_mfc_probe(struct platform_device *pdev)  	dev->hw_lock = 0;  	INIT_WORK(&dev->watchdog_work, s5p_mfc_watchdog_worker);  	atomic_set(&dev->watchdog_cnt, 0); -	setup_timer(&dev->watchdog_timer, s5p_mfc_watchdog, -		    (unsigned long)dev); +	timer_setup(&dev->watchdog_timer, s5p_mfc_watchdog, 0);  	ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);  	if (ret) diff --git a/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c b/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c index 59280ac31937..a0acee7671b1 100644 --- a/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c +++ b/drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c @@ -61,9 +61,9 @@ static int load_c8sectpfe_fw(struct c8sectpfei *fei);  #define FIFO_LEN 1024 -static void c8sectpfe_timer_interrupt(unsigned long ac8sectpfei) +static void c8sectpfe_timer_interrupt(struct timer_list *t)  { -	struct c8sectpfei *fei = (struct c8sectpfei *)ac8sectpfei; +	struct c8sectpfei *fei = from_timer(fei, t, timer);  	struct channel_info *channel;  	int chan_num; @@ -865,8 +865,7 @@ static int c8sectpfe_probe(struct platform_device *pdev)  	}  	/* Setup timer interrupt */ -	setup_timer(&fei->timer, c8sectpfe_timer_interrupt, -		    (unsigned long)fei); +	timer_setup(&fei->timer, c8sectpfe_timer_interrupt, 0);  	mutex_init(&fei->lock); diff --git a/drivers/media/platform/vim2m.c b/drivers/media/platform/vim2m.c index b01fba020d5f..7bf9fa2f8534 100644 --- a/drivers/media/platform/vim2m.c +++ b/drivers/media/platform/vim2m.c @@ -388,9 +388,9 @@ static void device_run(void *priv)  	schedule_irq(dev, ctx->transtime);  } -static void device_isr(unsigned long priv) +static void device_isr(struct timer_list *t)  { -	struct vim2m_dev *vim2m_dev = (struct vim2m_dev *)priv; +	struct vim2m_dev *vim2m_dev = from_timer(vim2m_dev, t, timer);  	struct vim2m_ctx *curr_ctx;  	struct vb2_v4l2_buffer *src_vb, *dst_vb;  	unsigned long flags; @@ -1024,7 +1024,7 @@ static int vim2m_probe(struct platform_device *pdev)  	v4l2_info(&dev->v4l2_dev,  			"Device registered as /dev/video%d\n", vfd->num); -	setup_timer(&dev->timer, device_isr, (long)dev); +	timer_setup(&dev->timer, device_isr, 0);  	platform_set_drvdata(pdev, dev);  	dev->m2m_dev = v4l2_m2m_init(&m2m_ops); diff --git a/drivers/media/usb/au0828/au0828-dvb.c b/drivers/media/usb/au0828/au0828-dvb.c index d701c04b3783..d9093a3c57c5 100644 --- a/drivers/media/usb/au0828/au0828-dvb.c +++ b/drivers/media/usb/au0828/au0828-dvb.c @@ -105,9 +105,9 @@ static struct tda18271_config hauppauge_woodbury_tunerconfig = {  static void au0828_restart_dvb_streaming(struct work_struct *work); -static void au0828_bulk_timeout(unsigned long data) +static void au0828_bulk_timeout(struct timer_list *t)  { -	struct au0828_dev *dev = (struct au0828_dev *) data; +	struct au0828_dev *dev = from_timer(dev, t, bulk_timeout);  	dprintk(1, "%s called\n", __func__);  	dev->bulk_timeout_running = 0; @@ -648,8 +648,7 @@ int au0828_dvb_register(struct au0828_dev *dev)  		return ret;  	} -	setup_timer(&dev->bulk_timeout, au0828_bulk_timeout, -		    (unsigned long)dev); +	timer_setup(&dev->bulk_timeout, au0828_bulk_timeout, 0);  	return 0;  } diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c index 654f67c25863..a240153821e0 100644 --- a/drivers/media/usb/au0828/au0828-video.c +++ b/drivers/media/usb/au0828/au0828-video.c @@ -954,9 +954,9 @@ int au0828_analog_unregister(struct au0828_dev *dev)  /* This function ensures that video frames continue to be delivered even if     the ITU-656 input isn't receiving any data (thereby preventing applications     such as tvtime from hanging) */ -static void au0828_vid_buffer_timeout(unsigned long data) +static void au0828_vid_buffer_timeout(struct timer_list *t)  { -	struct au0828_dev *dev = (struct au0828_dev *) data; +	struct au0828_dev *dev = from_timer(dev, t, vid_timeout);  	struct au0828_dmaqueue *dma_q = &dev->vidq;  	struct au0828_buffer *buf;  	unsigned char *vid_data; @@ -978,9 +978,9 @@ static void au0828_vid_buffer_timeout(unsigned long data)  	spin_unlock_irqrestore(&dev->slock, flags);  } -static void au0828_vbi_buffer_timeout(unsigned long data) +static void au0828_vbi_buffer_timeout(struct timer_list *t)  { -	struct au0828_dev *dev = (struct au0828_dev *) data; +	struct au0828_dev *dev = from_timer(dev, t, vbi_timeout);  	struct au0828_dmaqueue *dma_q = &dev->vbiq;  	struct au0828_buffer *buf;  	unsigned char *vbi_data; @@ -1953,10 +1953,8 @@ int au0828_analog_register(struct au0828_dev *dev,  	INIT_LIST_HEAD(&dev->vidq.active);  	INIT_LIST_HEAD(&dev->vbiq.active); -	setup_timer(&dev->vid_timeout, au0828_vid_buffer_timeout, -		    (unsigned long)dev); -	setup_timer(&dev->vbi_timeout, au0828_vbi_buffer_timeout, -		    (unsigned long)dev); +	timer_setup(&dev->vid_timeout, au0828_vid_buffer_timeout, 0); +	timer_setup(&dev->vbi_timeout, au0828_vbi_buffer_timeout, 0);  	dev->width = NTSC_STD_W;  	dev->height = NTSC_STD_H; diff --git a/drivers/memstick/core/ms_block.c b/drivers/memstick/core/ms_block.c index 22de7f5ed032..57b13dfbd21e 100644 --- a/drivers/memstick/core/ms_block.c +++ b/drivers/memstick/core/ms_block.c @@ -1492,9 +1492,9 @@ static int msb_ftl_scan(struct msb_data *msb)  	return 0;  } -static void msb_cache_flush_timer(unsigned long data) +static void msb_cache_flush_timer(struct timer_list *t)  { -	struct msb_data *msb = (struct msb_data *)data; +	struct msb_data *msb = from_timer(msb, t, cache_flush_timer);  	msb->need_flush_cache = true;  	queue_work(msb->io_queue, &msb->io_work);  } @@ -1514,8 +1514,7 @@ static void msb_cache_discard(struct msb_data *msb)  static int msb_cache_init(struct msb_data *msb)  { -	setup_timer(&msb->cache_flush_timer, msb_cache_flush_timer, -		(unsigned long)msb); +	timer_setup(&msb->cache_flush_timer, msb_cache_flush_timer, 0);  	if (!msb->cache)  		msb->cache = kzalloc(msb->block_size, GFP_KERNEL); diff --git a/drivers/mfd/rtsx_usb.c b/drivers/mfd/rtsx_usb.c index 691dab791f7a..59d61b04c197 100644 --- a/drivers/mfd/rtsx_usb.c +++ b/drivers/mfd/rtsx_usb.c @@ -40,9 +40,9 @@ static const struct mfd_cell rtsx_usb_cells[] = {  	},  }; -static void rtsx_usb_sg_timed_out(unsigned long data) +static void rtsx_usb_sg_timed_out(struct timer_list *t)  { -	struct rtsx_ucr *ucr = (struct rtsx_ucr *)data; +	struct rtsx_ucr *ucr = from_timer(ucr, t, sg_timer);  	dev_dbg(&ucr->pusb_intf->dev, "%s: sg transfer timed out", __func__);  	usb_sg_cancel(&ucr->current_sg); @@ -663,7 +663,7 @@ static int rtsx_usb_probe(struct usb_interface *intf,  		goto out_init_fail;  	/* initialize USB SG transfer timer */ -	setup_timer(&ucr->sg_timer, rtsx_usb_sg_timed_out, (unsigned long) ucr); +	timer_setup(&ucr->sg_timer, rtsx_usb_sg_timed_out, 0);  	ret = mfd_add_hotplug_devices(&intf->dev, rtsx_usb_cells,  				      ARRAY_SIZE(rtsx_usb_cells)); diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c index 35a9e4fd1a9f..64b03d6eaf18 100644 --- a/drivers/mmc/core/host.c +++ b/drivers/mmc/core/host.c @@ -160,9 +160,9 @@ out:  	return err;  } -static void mmc_retune_timer(unsigned long data) +static void mmc_retune_timer(struct timer_list *t)  { -	struct mmc_host *host = (struct mmc_host *)data; +	struct mmc_host *host = from_timer(host, t, retune_timer);  	mmc_retune_needed(host);  } @@ -389,7 +389,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)  	init_waitqueue_head(&host->wq);  	INIT_DELAYED_WORK(&host->detect, mmc_rescan);  	INIT_DELAYED_WORK(&host->sdio_irq_work, sdio_irq_work); -	setup_timer(&host->retune_timer, mmc_retune_timer, (unsigned long)host); +	timer_setup(&host->retune_timer, mmc_retune_timer, 0);  	/*  	 * By default, hosts do not support SGIO or large requests. diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c index 3692dd547879..4237c7cebf02 100644 --- a/drivers/mtd/sm_ftl.c +++ b/drivers/mtd/sm_ftl.c @@ -989,9 +989,9 @@ restart:  /* flush timer, runs a second after last write */ -static void sm_cache_flush_timer(unsigned long data) +static void sm_cache_flush_timer(struct timer_list *t)  { -	struct sm_ftl *ftl = (struct sm_ftl *)data; +	struct sm_ftl *ftl = from_timer(ftl, t, timer);  	queue_work(cache_flush_workqueue, &ftl->flush_work);  } @@ -1139,7 +1139,7 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)  	mutex_init(&ftl->mutex); -	setup_timer(&ftl->timer, sm_cache_flush_timer, (unsigned long)ftl); +	timer_setup(&ftl->timer, sm_cache_flush_timer, 0);  	INIT_WORK(&ftl->flush_work, sm_cache_flush_work);  	init_completion(&ftl->erase_completion); diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c index fed75e75207a..b8029ea03307 100644 --- a/drivers/net/caif/caif_hsi.c +++ b/drivers/net/caif/caif_hsi.c @@ -66,9 +66,9 @@ static const struct cfhsi_config  hsi_default_config = {  static LIST_HEAD(cfhsi_list); -static void cfhsi_inactivity_tout(unsigned long arg) +static void cfhsi_inactivity_tout(struct timer_list *t)  { -	struct cfhsi *cfhsi = (struct cfhsi *)arg; +	struct cfhsi *cfhsi = from_timer(cfhsi, t, inactivity_timer);  	netdev_dbg(cfhsi->ndev, "%s.\n",  		__func__); @@ -737,9 +737,9 @@ out_of_sync:  	schedule_work(&cfhsi->out_of_sync_work);  } -static void cfhsi_rx_slowpath(unsigned long arg) +static void cfhsi_rx_slowpath(struct timer_list *t)  { -	struct cfhsi *cfhsi = (struct cfhsi *)arg; +	struct cfhsi *cfhsi = from_timer(cfhsi, t, rx_slowpath_timer);  	netdev_dbg(cfhsi->ndev, "%s.\n",  		__func__); @@ -997,9 +997,9 @@ static void cfhsi_wake_down_cb(struct cfhsi_cb_ops *cb_ops)  	wake_up_interruptible(&cfhsi->wake_down_wait);  } -static void cfhsi_aggregation_tout(unsigned long arg) +static void cfhsi_aggregation_tout(struct timer_list *t)  { -	struct cfhsi *cfhsi = (struct cfhsi *)arg; +	struct cfhsi *cfhsi = from_timer(cfhsi, t, aggregation_timer);  	netdev_dbg(cfhsi->ndev, "%s.\n",  		__func__); @@ -1211,14 +1211,11 @@ static int cfhsi_open(struct net_device *ndev)  	init_waitqueue_head(&cfhsi->flush_fifo_wait);  	/* Setup the inactivity timer. */ -	setup_timer(&cfhsi->inactivity_timer, cfhsi_inactivity_tout, -		    (unsigned long)cfhsi); +	timer_setup(&cfhsi->inactivity_timer, cfhsi_inactivity_tout, 0);  	/* Setup the slowpath RX timer. */ -	setup_timer(&cfhsi->rx_slowpath_timer, cfhsi_rx_slowpath, -		    (unsigned long)cfhsi); +	timer_setup(&cfhsi->rx_slowpath_timer, cfhsi_rx_slowpath, 0);  	/* Setup the aggregation timer. */ -	setup_timer(&cfhsi->aggregation_timer, cfhsi_aggregation_tout, -		    (unsigned long)cfhsi); +	timer_setup(&cfhsi->aggregation_timer, cfhsi_aggregation_tout, 0);  	/* Activate HSI interface. */  	res = cfhsi->ops->cfhsi_up(cfhsi->ops); diff --git a/drivers/net/dsa/mv88e6xxx/phy.c b/drivers/net/dsa/mv88e6xxx/phy.c index 436668bd50dc..46af8052e535 100644 --- a/drivers/net/dsa/mv88e6xxx/phy.c +++ b/drivers/net/dsa/mv88e6xxx/phy.c @@ -149,9 +149,9 @@ static void mv88e6xxx_phy_ppu_reenable_work(struct work_struct *ugly)  	mutex_unlock(&chip->reg_lock);  } -static void mv88e6xxx_phy_ppu_reenable_timer(unsigned long _ps) +static void mv88e6xxx_phy_ppu_reenable_timer(struct timer_list *t)  { -	struct mv88e6xxx_chip *chip = (void *)_ps; +	struct mv88e6xxx_chip *chip = from_timer(chip, t, ppu_timer);  	schedule_work(&chip->ppu_work);  } @@ -193,8 +193,7 @@ static void mv88e6xxx_phy_ppu_state_init(struct mv88e6xxx_chip *chip)  {  	mutex_init(&chip->ppu_mutex);  	INIT_WORK(&chip->ppu_work, mv88e6xxx_phy_ppu_reenable_work); -	setup_timer(&chip->ppu_timer, mv88e6xxx_phy_ppu_reenable_timer, -		    (unsigned long)chip); +	timer_setup(&chip->ppu_timer, mv88e6xxx_phy_ppu_reenable_timer, 0);  }  static void mv88e6xxx_phy_ppu_state_destroy(struct mv88e6xxx_chip *chip) diff --git a/drivers/net/eql.c b/drivers/net/eql.c index fccce4b47778..74263f8efe1a 100644 --- a/drivers/net/eql.c +++ b/drivers/net/eql.c @@ -139,9 +139,9 @@ static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);  static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave); -static void eql_timer(unsigned long param) +static void eql_timer(struct timer_list *t)  { -	equalizer_t *eql = (equalizer_t *) param; +	equalizer_t *eql = from_timer(eql, t, timer);  	struct list_head *this, *tmp, *head;  	spin_lock(&eql->queue.lock); @@ -178,7 +178,7 @@ static void __init eql_setup(struct net_device *dev)  {  	equalizer_t *eql = netdev_priv(dev); -	setup_timer(&eql->timer, eql_timer, (unsigned long)eql); +	timer_setup(&eql->timer, eql_timer, 0);  	eql->timer.expires  	= jiffies + EQL_DEFAULT_RESCHED_IVAL;  	spin_lock_init(&eql->queue.lock); diff --git a/drivers/net/ethernet/adi/bfin_mac.c b/drivers/net/ethernet/adi/bfin_mac.c index 0658cde1586a..7120f2b9c6ef 100644 --- a/drivers/net/ethernet/adi/bfin_mac.c +++ b/drivers/net/ethernet/adi/bfin_mac.c @@ -1092,9 +1092,11 @@ static void tx_reclaim_skb(struct bfin_mac_local *lp)  	return;  } -static void tx_reclaim_skb_timeout(unsigned long lp) +static void tx_reclaim_skb_timeout(struct timer_list *t)  { -	tx_reclaim_skb((struct bfin_mac_local *)lp); +	struct bfin_mac_local *lp = from_timer(lp, t, tx_reclaim_timer); + +	tx_reclaim_skb(lp);  }  static int bfin_mac_hard_start_xmit(struct sk_buff *skb, @@ -1650,8 +1652,7 @@ static int bfin_mac_probe(struct platform_device *pdev)  	ndev->netdev_ops = &bfin_mac_netdev_ops;  	ndev->ethtool_ops = &bfin_mac_ethtool_ops; -	setup_timer(&lp->tx_reclaim_timer, tx_reclaim_skb_timeout, -		    (unsigned long)lp); +	timer_setup(&lp->tx_reclaim_timer, tx_reclaim_skb_timeout, 0);  	lp->flags = 0;  	netif_napi_add(ndev, &lp->napi, bfin_mac_poll, CONFIG_BFIN_RX_DESC_NUM); diff --git a/drivers/net/ethernet/agere/et131x.c b/drivers/net/ethernet/agere/et131x.c index 658e92f79d36..48220b6c600d 100644 --- a/drivers/net/ethernet/agere/et131x.c +++ b/drivers/net/ethernet/agere/et131x.c @@ -3080,9 +3080,9 @@ err_out:   * The routine called when the error timer expires, to track the number of   * recurring errors.   */ -static void et131x_error_timer_handler(unsigned long data) +static void et131x_error_timer_handler(struct timer_list *t)  { -	struct et131x_adapter *adapter = (struct et131x_adapter *)data; +	struct et131x_adapter *adapter = from_timer(adapter, t, error_timer);  	struct phy_device *phydev = adapter->netdev->phydev;  	if (et1310_in_phy_coma(adapter)) { @@ -3624,8 +3624,7 @@ static int et131x_open(struct net_device *netdev)  	int result;  	/* Start the timer to track NIC errors */ -	setup_timer(&adapter->error_timer, et131x_error_timer_handler, -		    (unsigned long)adapter); +	timer_setup(&adapter->error_timer, et131x_error_timer_handler, 0);  	adapter->error_timer.expires = jiffies +  		msecs_to_jiffies(TX_ERROR_PERIOD);  	add_timer(&adapter->error_timer); diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c index 1c1ddd891ca3..97c5a89a9cf7 100644 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c @@ -2859,9 +2859,9 @@ static void ena_update_host_info(struct ena_admin_host_info *host_info,  		(netdev->features & GENMASK_ULL(63, 32)) >> 32;  } -static void ena_timer_service(unsigned long data) +static void ena_timer_service(struct timer_list *t)  { -	struct ena_adapter *adapter = (struct ena_adapter *)data; +	struct ena_adapter *adapter = from_timer(adapter, t, timer_service);  	u8 *debug_area = adapter->ena_dev->host_attr.debug_area_virt_addr;  	struct ena_admin_host_info *host_info =  		adapter->ena_dev->host_attr.host_info; @@ -3278,8 +3278,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	ena_update_hints(adapter, &get_feat_ctx.hw_hints); -	setup_timer(&adapter->timer_service, ena_timer_service, -		    (unsigned long)adapter); +	timer_setup(&adapter->timer_service, ena_timer_service, 0);  	mod_timer(&adapter->timer_service, round_jiffies(jiffies + HZ));  	dev_info(&pdev->dev, "%s found at mem %lx, mac addr %pM Queues %d\n", diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c index 483e97691eea..78dfb2ab78ce 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c @@ -163,9 +163,9 @@ static int aq_nic_update_link_status(struct aq_nic_s *self)  	return 0;  } -static void aq_nic_service_timer_cb(unsigned long param) +static void aq_nic_service_timer_cb(struct timer_list *t)  { -	struct aq_nic_s *self = (struct aq_nic_s *)param; +	struct aq_nic_s *self = from_timer(self, t, service_timer);  	struct net_device *ndev = aq_nic_get_ndev(self);  	int err = 0;  	unsigned int i = 0U; @@ -201,9 +201,9 @@ err_exit:  		  jiffies + AQ_CFG_SERVICE_TIMER_INTERVAL);  } -static void aq_nic_polling_timer_cb(unsigned long param) +static void aq_nic_polling_timer_cb(struct timer_list *t)  { -	struct aq_nic_s *self = (struct aq_nic_s *)param; +	struct aq_nic_s *self = from_timer(self, t, polling_timer);  	struct aq_vec_s *aq_vec = NULL;  	unsigned int i = 0U; @@ -440,14 +440,12 @@ int aq_nic_start(struct aq_nic_s *self)  	err = aq_nic_update_interrupt_moderation_settings(self);  	if (err)  		goto err_exit; -	setup_timer(&self->service_timer, &aq_nic_service_timer_cb, -		    (unsigned long)self); +	timer_setup(&self->service_timer, aq_nic_service_timer_cb, 0);  	mod_timer(&self->service_timer, jiffies +  			AQ_CFG_SERVICE_TIMER_INTERVAL);  	if (self->aq_nic_cfg.is_polling) { -		setup_timer(&self->polling_timer, &aq_nic_polling_timer_cb, -			    (unsigned long)self); +		timer_setup(&self->polling_timer, aq_nic_polling_timer_cb, 0);  		mod_timer(&self->polling_timer, jiffies +  			  AQ_CFG_POLLING_TIMER_INTERVAL);  	} else { diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 8c9986f3fc01..94270f654b3b 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c @@ -222,9 +222,10 @@ static u32 atl1c_wait_until_idle(struct atl1c_hw *hw, u32 modu_ctrl)   * atl1c_phy_config - Timer Call-back   * @data: pointer to netdev cast into an unsigned long   */ -static void atl1c_phy_config(unsigned long data) +static void atl1c_phy_config(struct timer_list *t)  { -	struct atl1c_adapter *adapter = (struct atl1c_adapter *) data; +	struct atl1c_adapter *adapter = from_timer(adapter, t, +						   phy_config_timer);  	struct atl1c_hw *hw = &adapter->hw;  	unsigned long flags; @@ -2613,8 +2614,7 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	adapter->mii.phy_id_mask = 0x1f;  	adapter->mii.reg_num_mask = MDIO_CTRL_REG_MASK;  	netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64); -	setup_timer(&adapter->phy_config_timer, atl1c_phy_config, -			(unsigned long)adapter); +	timer_setup(&adapter->phy_config_timer, atl1c_phy_config, 0);  	/* setup the private structure */  	err = atl1c_sw_init(adapter);  	if (err) { diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c index 4f7e195af0bc..9dc6da039a6d 100644 --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c @@ -130,9 +130,10 @@ static inline void atl1e_irq_reset(struct atl1e_adapter *adapter)   * atl1e_phy_config - Timer Call-back   * @data: pointer to netdev cast into an unsigned long   */ -static void atl1e_phy_config(unsigned long data) +static void atl1e_phy_config(struct timer_list *t)  { -	struct atl1e_adapter *adapter = (struct atl1e_adapter *) data; +	struct atl1e_adapter *adapter = from_timer(adapter, t, +						   phy_config_timer);  	struct atl1e_hw *hw = &adapter->hw;  	unsigned long flags; @@ -2361,8 +2362,7 @@ static int atl1e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	netif_napi_add(netdev, &adapter->napi, atl1e_clean, 64); -	setup_timer(&adapter->phy_config_timer, atl1e_phy_config, -		    (unsigned long)adapter); +	timer_setup(&adapter->phy_config_timer, atl1e_phy_config, 0);  	/* get user settings */  	atl1e_check_options(adapter); diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c index 83d2db2abb45..b81fbf119bce 100644 --- a/drivers/net/ethernet/atheros/atlx/atl1.c +++ b/drivers/net/ethernet/atheros/atlx/atl1.c @@ -2575,9 +2575,10 @@ static irqreturn_t atl1_intr(int irq, void *data)   * atl1_phy_config - Timer Call-back   * @data: pointer to netdev cast into an unsigned long   */ -static void atl1_phy_config(unsigned long data) +static void atl1_phy_config(struct timer_list *t)  { -	struct atl1_adapter *adapter = (struct atl1_adapter *)data; +	struct atl1_adapter *adapter = from_timer(adapter, t, +						  phy_config_timer);  	struct atl1_hw *hw = &adapter->hw;  	unsigned long flags; @@ -3071,8 +3072,7 @@ static int atl1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	/* assume we have no link for now */  	netif_carrier_off(netdev); -	setup_timer(&adapter->phy_config_timer, atl1_phy_config, -		    (unsigned long)adapter); +	timer_setup(&adapter->phy_config_timer, atl1_phy_config, 0);  	adapter->phy_timer_pending = false;  	INIT_WORK(&adapter->reset_dev_task, atl1_reset_dev_task); diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c index 77a1c03255de..db4bcc51023a 100644 --- a/drivers/net/ethernet/atheros/atlx/atl2.c +++ b/drivers/net/ethernet/atheros/atlx/atl2.c @@ -1028,9 +1028,9 @@ static void atl2_tx_timeout(struct net_device *netdev)   * atl2_watchdog - Timer Call-back   * @data: pointer to netdev cast into an unsigned long   */ -static void atl2_watchdog(unsigned long data) +static void atl2_watchdog(struct timer_list *t)  { -	struct atl2_adapter *adapter = (struct atl2_adapter *) data; +	struct atl2_adapter *adapter = from_timer(adapter, t, watchdog_timer);  	if (!test_bit(__ATL2_DOWN, &adapter->flags)) {  		u32 drop_rxd, drop_rxs; @@ -1053,9 +1053,10 @@ static void atl2_watchdog(unsigned long data)   * atl2_phy_config - Timer Call-back   * @data: pointer to netdev cast into an unsigned long   */ -static void atl2_phy_config(unsigned long data) +static void atl2_phy_config(struct timer_list *t)  { -	struct atl2_adapter *adapter = (struct atl2_adapter *) data; +	struct atl2_adapter *adapter = from_timer(adapter, t, +						  phy_config_timer);  	struct atl2_hw *hw = &adapter->hw;  	unsigned long flags; @@ -1434,11 +1435,9 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	atl2_check_options(adapter); -	setup_timer(&adapter->watchdog_timer, atl2_watchdog, -		    (unsigned long)adapter); +	timer_setup(&adapter->watchdog_timer, atl2_watchdog, 0); -	setup_timer(&adapter->phy_config_timer, atl2_phy_config, -		    (unsigned long)adapter); +	timer_setup(&adapter->phy_config_timer, atl2_phy_config, 0);  	INIT_WORK(&adapter->reset_task, atl2_reset_task);  	INIT_WORK(&adapter->link_chg_task, atl2_link_chg_task); diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index 42e44fc03a18..e445ab724827 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -599,9 +599,9 @@ static void b44_check_phy(struct b44 *bp)  	}  } -static void b44_timer(unsigned long __opaque) +static void b44_timer(struct timer_list *t)  { -	struct b44 *bp = (struct b44 *) __opaque; +	struct b44 *bp = from_timer(bp, t, timer);  	spin_lock_irq(&bp->lock); @@ -1474,7 +1474,7 @@ static int b44_open(struct net_device *dev)  		goto out;  	} -	setup_timer(&bp->timer, b44_timer, (unsigned long)bp); +	timer_setup(&bp->timer, b44_timer, 0);  	bp->timer.expires = jiffies + HZ;  	add_timer(&bp->timer); diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c index b3055a76dfbf..7919f6112ecf 100644 --- a/drivers/net/ethernet/broadcom/bnx2.c +++ b/drivers/net/ethernet/broadcom/bnx2.c @@ -6183,9 +6183,9 @@ bnx2_5708_serdes_timer(struct bnx2 *bp)  }  static void -bnx2_timer(unsigned long data) +bnx2_timer(struct timer_list *t)  { -	struct bnx2 *bp = (struct bnx2 *) data; +	struct bnx2 *bp = from_timer(bp, t, timer);  	if (!netif_running(bp->dev))  		return; @@ -8462,7 +8462,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)  	bnx2_set_default_link(bp);  	bp->req_flow_ctrl = FLOW_CTRL_RX | FLOW_CTRL_TX; -	setup_timer(&bp->timer, bnx2_timer, (unsigned long)bp); +	timer_setup(&bp->timer, bnx2_timer, 0);  	bp->timer.expires = RUN_AT(BNX2_TIMER_INTERVAL);  #ifdef BCM_CNIC diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index be9fd7d184d0..91e2a7560b48 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -5761,9 +5761,9 @@ void bnx2x_drv_pulse(struct bnx2x *bp)  		 bp->fw_drv_pulse_wr_seq);  } -static void bnx2x_timer(unsigned long data) +static void bnx2x_timer(struct timer_list *t)  { -	struct bnx2x *bp = (struct bnx2x *) data; +	struct bnx2x *bp = from_timer(bp, t, timer);  	if (!netif_running(bp->dev))  		return; @@ -12421,7 +12421,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)  	bp->current_interval = CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ; -	setup_timer(&bp->timer, bnx2x_timer, (unsigned long)bp); +	timer_setup(&bp->timer, bnx2x_timer, 0);  	bp->timer.expires = jiffies + bp->current_interval;  	if (SHMEM2_HAS(bp, dcbx_lldp_params_offset) && diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 33c49ad697e4..c5c38d4b7d1c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -6962,9 +6962,9 @@ static void bnxt_poll_controller(struct net_device *dev)  }  #endif -static void bnxt_timer(unsigned long data) +static void bnxt_timer(struct timer_list *t)  { -	struct bnxt *bp = (struct bnxt *)data; +	struct bnxt *bp = from_timer(bp, t, timer);  	struct net_device *dev = bp->dev;  	if (!netif_running(dev)) @@ -7236,7 +7236,7 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)  	bnxt_init_dflt_coal(bp); -	setup_timer(&bp->timer, bnxt_timer, (unsigned long)bp); +	timer_setup(&bp->timer, bnxt_timer, 0);  	bp->current_interval = BNXT_TIMER_INTERVAL;  	clear_bit(BNXT_STATE_OPEN, &bp->state); diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index d8d5f207c759..de51c2177d03 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -10931,9 +10931,9 @@ static void tg3_chk_missed_msi(struct tg3 *tp)  	}  } -static void tg3_timer(unsigned long __opaque) +static void tg3_timer(struct timer_list *t)  { -	struct tg3 *tp = (struct tg3 *) __opaque; +	struct tg3 *tp = from_timer(tp, t, timer);  	spin_lock(&tp->lock); @@ -11087,7 +11087,7 @@ static void tg3_timer_init(struct tg3 *tp)  	tp->asf_multiplier = (HZ / tp->timer_offset) *  			     TG3_FW_UPDATE_FREQ_SEC; -	setup_timer(&tp->timer, tg3_timer, (unsigned long)tp); +	timer_setup(&tp->timer, tg3_timer, 0);  }  static void tg3_timer_start(struct tg3 *tp) diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index 4a11baffe02d..e130fb757e7b 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c @@ -1676,9 +1676,9 @@ static int enic_poll_msix_rq(struct napi_struct *napi, int budget)  	return work_done;  } -static void enic_notify_timer(unsigned long data) +static void enic_notify_timer(struct timer_list *t)  { -	struct enic *enic = (struct enic *)data; +	struct enic *enic = from_timer(enic, t, notify_timer);  	enic_notify_check(enic); @@ -2846,8 +2846,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	/* Setup notification timer, HW reset task, and wq locks  	 */ -	setup_timer(&enic->notify_timer, enic_notify_timer, -		    (unsigned long)enic); +	timer_setup(&enic->notify_timer, enic_notify_timer, 0);  	enic_set_rx_coal_setting(enic);  	INIT_WORK(&enic->reset, enic_reset); diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c index 81c1fac00d33..62f204f32316 100644 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c @@ -1346,9 +1346,9 @@ static void mib_counters_update(struct mv643xx_eth_private *mp)  	spin_unlock_bh(&mp->mib_counters_lock);  } -static void mib_counters_timer_wrapper(unsigned long _mp) +static void mib_counters_timer_wrapper(struct timer_list *t)  { -	struct mv643xx_eth_private *mp = (void *)_mp; +	struct mv643xx_eth_private *mp = from_timer(mp, t, mib_counters_timer);  	mib_counters_update(mp);  	mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);  } @@ -2321,9 +2321,9 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget)  	return work_done;  } -static inline void oom_timer_wrapper(unsigned long data) +static inline void oom_timer_wrapper(struct timer_list *t)  { -	struct mv643xx_eth_private *mp = (void *)data; +	struct mv643xx_eth_private *mp = from_timer(mp, t, rx_oom);  	napi_schedule(&mp->napi);  } @@ -3178,8 +3178,7 @@ static int mv643xx_eth_probe(struct platform_device *pdev)  	mib_counters_clear(mp); -	setup_timer(&mp->mib_counters_timer, mib_counters_timer_wrapper, -		    (unsigned long)mp); +	timer_setup(&mp->mib_counters_timer, mib_counters_timer_wrapper, 0);  	mp->mib_counters_timer.expires = jiffies + 30 * HZ;  	spin_lock_init(&mp->mib_counters_lock); @@ -3188,7 +3187,7 @@ static int mv643xx_eth_probe(struct platform_device *pdev)  	netif_napi_add(dev, &mp->napi, mv643xx_eth_poll, NAPI_POLL_WEIGHT); -	setup_timer(&mp->rx_oom, oom_timer_wrapper, (unsigned long)mp); +	timer_setup(&mp->rx_oom, oom_timer_wrapper, 0);  	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c index 91b1c154fd29..7bbd86f08e5f 100644 --- a/drivers/net/ethernet/marvell/pxa168_eth.c +++ b/drivers/net/ethernet/marvell/pxa168_eth.c @@ -362,9 +362,9 @@ static void rxq_refill(struct net_device *dev)  	}  } -static inline void rxq_refill_timer_wrapper(unsigned long data) +static inline void rxq_refill_timer_wrapper(struct timer_list *t)  { -	struct pxa168_eth_private *pep = (void *)data; +	struct pxa168_eth_private *pep = from_timer(pep, t, timeout);  	napi_schedule(&pep->napi);  } @@ -1496,8 +1496,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)  	netif_napi_add(dev, &pep->napi, pxa168_rx_poll, pep->rx_ring_size);  	memset(&pep->timeout, 0, sizeof(struct timer_list)); -	setup_timer(&pep->timeout, rxq_refill_timer_wrapper, -		    (unsigned long)pep); +	timer_setup(&pep->timeout, rxq_refill_timer_wrapper, 0);  	pep->smi_bus = mdiobus_alloc();  	if (!pep->smi_bus) { diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c index eef35bf3e849..6e423f098a60 100644 --- a/drivers/net/ethernet/marvell/skge.c +++ b/drivers/net/ethernet/marvell/skge.c @@ -1495,9 +1495,9 @@ static int xm_check_link(struct net_device *dev)   * get an interrupt when carrier is detected, need to poll for   * link coming up.   */ -static void xm_link_timer(unsigned long arg) +static void xm_link_timer(struct timer_list *t)  { -	struct skge_port *skge = (struct skge_port *) arg; +	struct skge_port *skge = from_timer(skge, t, link_timer);  	struct net_device *dev = skge->netdev;  	struct skge_hw *hw = skge->hw;  	int port = skge->port; @@ -3897,7 +3897,7 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,  	/* Only used for Genesis XMAC */  	if (is_genesis(hw)) -	    setup_timer(&skge->link_timer, xm_link_timer, (unsigned long) skge); +	    timer_setup(&skge->link_timer, xm_link_timer, 0);  	else {  		dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG |  		                   NETIF_F_RXCSUM; diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c index 1145cde2274a..9efe1771423c 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c @@ -2974,9 +2974,9 @@ static int sky2_rx_hung(struct net_device *dev)  	}  } -static void sky2_watchdog(unsigned long arg) +static void sky2_watchdog(struct timer_list *t)  { -	struct sky2_hw *hw = (struct sky2_hw *) arg; +	struct sky2_hw *hw = from_timer(hw, t, watchdog_timer);  	/* Check for lost IRQ once a second */  	if (sky2_read32(hw, B0_ISRC)) { @@ -5083,7 +5083,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		sky2_show_addr(dev1);  	} -	setup_timer(&hw->watchdog_timer, sky2_watchdog, (unsigned long) hw); +	timer_setup(&hw->watchdog_timer, sky2_watchdog, 0);  	INIT_WORK(&hw->restart_work, sky2_restart);  	pci_set_drvdata(pdev, hw); diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c index b171ed2015fe..2521c8c40015 100644 --- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c +++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c @@ -3501,7 +3501,7 @@ static void myri10ge_watchdog(struct work_struct *work)   * cannot detect a NIC with a parity error in a timely fashion if the   * NIC is lightly loaded.   */ -static void myri10ge_watchdog_timer(unsigned long arg) +static void myri10ge_watchdog_timer(struct timer_list *t)  {  	struct myri10ge_priv *mgp;  	struct myri10ge_slice_state *ss; @@ -3509,7 +3509,7 @@ static void myri10ge_watchdog_timer(unsigned long arg)  	u32 rx_pause_cnt;  	u16 cmd; -	mgp = (struct myri10ge_priv *)arg; +	mgp = from_timer(mgp, t, watchdog_timer);  	rx_pause_cnt = ntohl(mgp->ss[0].fw_stats->dropped_pause);  	busy_slice_cnt = 0; @@ -3930,8 +3930,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	pci_save_state(pdev);  	/* Setup the watchdog timer */ -	setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer, -		    (unsigned long)mgp); +	timer_setup(&mgp->watchdog_timer, myri10ge_watchdog_timer, 0);  	netdev->ethtool_ops = &myri10ge_ethtool_ops;  	INIT_WORK(&mgp->watchdog_work, myri10ge_watchdog); diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c index 457ee80307ea..40e52ffb732f 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c @@ -1089,9 +1089,10 @@ static void pch_gbe_set_mode(struct pch_gbe_adapter *adapter, u16 speed,   * pch_gbe_watchdog - Watchdog process   * @data:  Board private structure   */ -static void pch_gbe_watchdog(unsigned long data) +static void pch_gbe_watchdog(struct timer_list *t)  { -	struct pch_gbe_adapter *adapter = (struct pch_gbe_adapter *)data; +	struct pch_gbe_adapter *adapter = from_timer(adapter, t, +						     watchdog_timer);  	struct net_device *netdev = adapter->netdev;  	struct pch_gbe_hw *hw = &adapter->hw; @@ -2644,8 +2645,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,  		dev_err(&pdev->dev, "Invalid MAC address, "  		                    "interface disabled.\n");  	} -	setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog, -		    (unsigned long)adapter); +	timer_setup(&adapter->watchdog_timer, pch_gbe_watchdog, 0);  	INIT_WORK(&adapter->reset_task, pch_gbe_reset_task); diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c index 49591d9c2e1b..c9a55b774935 100644 --- a/drivers/net/ethernet/pasemi/pasemi_mac.c +++ b/drivers/net/ethernet/pasemi/pasemi_mac.c @@ -943,9 +943,9 @@ static irqreturn_t pasemi_mac_rx_intr(int irq, void *data)  #define TX_CLEAN_INTERVAL HZ -static void pasemi_mac_tx_timer(unsigned long data) +static void pasemi_mac_tx_timer(struct timer_list *t)  { -	struct pasemi_mac_txring *txring = (struct pasemi_mac_txring *)data; +	struct pasemi_mac_txring *txring = from_timer(txring, t, clean_timer);  	struct pasemi_mac *mac = txring->mac;  	pasemi_mac_clean_tx(txring); @@ -1199,8 +1199,7 @@ static int pasemi_mac_open(struct net_device *dev)  	if (dev->phydev)  		phy_start(dev->phydev); -	setup_timer(&mac->tx->clean_timer, pasemi_mac_tx_timer, -		    (unsigned long)mac->tx); +	timer_setup(&mac->tx->clean_timer, pasemi_mac_tx_timer, 0);  	mod_timer(&mac->tx->clean_timer, jiffies + HZ);  	return 0; diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c index 05479d435469..9e5264d8773b 100644 --- a/drivers/net/ethernet/qlogic/qla3xxx.c +++ b/drivers/net/ethernet/qlogic/qla3xxx.c @@ -3749,9 +3749,9 @@ static void ql_get_board_info(struct ql3_adapter *qdev)  	qdev->pci_slot = (u8) PCI_SLOT(qdev->pdev->devfn);  } -static void ql3xxx_timer(unsigned long ptr) +static void ql3xxx_timer(struct timer_list *t)  { -	struct ql3_adapter *qdev = (struct ql3_adapter *)ptr; +	struct ql3_adapter *qdev = from_timer(qdev, t, adapter_timer);  	queue_delayed_work(qdev->workqueue, &qdev->link_state_work, 0);  } @@ -3891,7 +3891,7 @@ static int ql3xxx_probe(struct pci_dev *pdev,  	INIT_DELAYED_WORK(&qdev->tx_timeout_work, ql_tx_timeout_work);  	INIT_DELAYED_WORK(&qdev->link_state_work, ql_link_state_machine_work); -	setup_timer(&qdev->adapter_timer, ql3xxx_timer, (unsigned long)qdev); +	timer_setup(&qdev->adapter_timer, ql3xxx_timer, 0);  	qdev->adapter_timer.expires = jiffies + HZ * 2;	/* two second delay */  	if (!cards_found) { diff --git a/drivers/net/ethernet/rocker/rocker_ofdpa.c b/drivers/net/ethernet/rocker/rocker_ofdpa.c index 0653b70723a3..6d6fb8cf3e7c 100644 --- a/drivers/net/ethernet/rocker/rocker_ofdpa.c +++ b/drivers/net/ethernet/rocker/rocker_ofdpa.c @@ -1983,9 +1983,9 @@ err_out:  	return err;  } -static void ofdpa_fdb_cleanup(unsigned long data) +static void ofdpa_fdb_cleanup(struct timer_list *t)  { -	struct ofdpa *ofdpa = (struct ofdpa *)data; +	struct ofdpa *ofdpa = from_timer(ofdpa, t, fdb_cleanup_timer);  	struct ofdpa_port *ofdpa_port;  	struct ofdpa_fdb_tbl_entry *entry;  	struct hlist_node *tmp; @@ -2368,8 +2368,7 @@ static int ofdpa_init(struct rocker *rocker)  	hash_init(ofdpa->neigh_tbl);  	spin_lock_init(&ofdpa->neigh_tbl_lock); -	setup_timer(&ofdpa->fdb_cleanup_timer, ofdpa_fdb_cleanup, -		    (unsigned long) ofdpa); +	timer_setup(&ofdpa->fdb_cleanup_timer, ofdpa_fdb_cleanup, 0);  	mod_timer(&ofdpa->fdb_cleanup_timer, jiffies);  	ofdpa->ageing_time = BR_DEFAULT_AGEING_TIME; diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index ff4fb5eae1af..f63c2ddced3c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -345,9 +345,9 @@ void stmmac_disable_eee_mode(struct stmmac_priv *priv)   *  if there is no data transfer and if we are not in LPI state,   *  then MAC Transmitter can be moved to LPI state.   */ -static void stmmac_eee_ctrl_timer(unsigned long arg) +static void stmmac_eee_ctrl_timer(struct timer_list *t)  { -	struct stmmac_priv *priv = (struct stmmac_priv *)arg; +	struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);  	stmmac_enable_eee_mode(priv);  	mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer)); @@ -401,9 +401,8 @@ bool stmmac_eee_init(struct stmmac_priv *priv)  		spin_lock_irqsave(&priv->lock, flags);  		if (!priv->eee_active) {  			priv->eee_active = 1; -			setup_timer(&priv->eee_ctrl_timer, -				    stmmac_eee_ctrl_timer, -				    (unsigned long)priv); +			timer_setup(&priv->eee_ctrl_timer, +				    stmmac_eee_ctrl_timer, 0);  			mod_timer(&priv->eee_ctrl_timer,  				  STMMAC_LPI_T(eee_timer)); @@ -2221,9 +2220,9 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv)   * Description:   * This is the timer handler to directly invoke the stmmac_tx_clean.   */ -static void stmmac_tx_timer(unsigned long data) +static void stmmac_tx_timer(struct timer_list *t)  { -	struct stmmac_priv *priv = (struct stmmac_priv *)data; +	struct stmmac_priv *priv = from_timer(priv, t, txtimer);  	u32 tx_queues_count = priv->plat->tx_queues_to_use;  	u32 queue; @@ -2244,7 +2243,7 @@ static void stmmac_init_tx_coalesce(struct stmmac_priv *priv)  {  	priv->tx_coal_frames = STMMAC_TX_FRAMES;  	priv->tx_coal_timer = STMMAC_COAL_TX_TIMER; -	setup_timer(&priv->txtimer, stmmac_tx_timer, (unsigned long)priv); +	timer_setup(&priv->txtimer, stmmac_tx_timer, 0);  	priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer);  	add_timer(&priv->txtimer);  } diff --git a/drivers/net/ethernet/synopsys/dwc-xlgmac-net.c b/drivers/net/ethernet/synopsys/dwc-xlgmac-net.c index e1b55b8fb8e0..1f8e9601592a 100644 --- a/drivers/net/ethernet/synopsys/dwc-xlgmac-net.c +++ b/drivers/net/ethernet/synopsys/dwc-xlgmac-net.c @@ -358,9 +358,9 @@ static irqreturn_t xlgmac_dma_isr(int irq, void *data)  	return IRQ_HANDLED;  } -static void xlgmac_tx_timer(unsigned long data) +static void xlgmac_tx_timer(struct timer_list *t)  { -	struct xlgmac_channel *channel = (struct xlgmac_channel *)data; +	struct xlgmac_channel *channel = from_timer(channel, t, tx_timer);  	struct xlgmac_pdata *pdata = channel->pdata;  	struct napi_struct *napi; @@ -391,8 +391,7 @@ static void xlgmac_init_timers(struct xlgmac_pdata *pdata)  		if (!channel->tx_ring)  			break; -		setup_timer(&channel->tx_timer, xlgmac_tx_timer, -			    (unsigned long)channel); +		timer_setup(&channel->tx_timer, xlgmac_tx_timer, 0);  	}  } diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c index cd1185e66133..b432a75fb874 100644 --- a/drivers/net/ethernet/ti/cpsw_ale.c +++ b/drivers/net/ethernet/ti/cpsw_ale.c @@ -765,9 +765,9 @@ int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)  }  EXPORT_SYMBOL_GPL(cpsw_ale_control_get); -static void cpsw_ale_timer(unsigned long arg) +static void cpsw_ale_timer(struct timer_list *t)  { -	struct cpsw_ale *ale = (struct cpsw_ale *)arg; +	struct cpsw_ale *ale = from_timer(ale, t, timer);  	cpsw_ale_control_set(ale, 0, ALE_AGEOUT, 1); @@ -859,7 +859,7 @@ void cpsw_ale_start(struct cpsw_ale *ale)  	cpsw_ale_control_set(ale, 0, ALE_ENABLE, 1);  	cpsw_ale_control_set(ale, 0, ALE_CLEAR, 1); -	setup_timer(&ale->timer, cpsw_ale_timer, (unsigned long)ale); +	timer_setup(&ale->timer, cpsw_ale_timer, 0);  	if (ale->ageout) {  		ale->timer.expires = jiffies + ale->ageout;  		add_timer(&ale->timer); diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c index 4ad821655e51..e831c49713ee 100644 --- a/drivers/net/ethernet/ti/netcp_ethss.c +++ b/drivers/net/ethernet/ti/netcp_ethss.c @@ -2745,9 +2745,9 @@ static int gbe_ioctl(void *intf_priv, struct ifreq *req, int cmd)  	return -EOPNOTSUPP;  } -static void netcp_ethss_timer(unsigned long arg) +static void netcp_ethss_timer(struct timer_list *t)  { -	struct gbe_priv *gbe_dev = (struct gbe_priv *)arg; +	struct gbe_priv *gbe_dev = from_timer(gbe_dev, t, timer);  	struct gbe_intf *gbe_intf;  	struct gbe_slave *slave; @@ -3616,8 +3616,7 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,  	}  	spin_unlock_bh(&gbe_dev->hw_stats_lock); -	setup_timer(&gbe_dev->timer, netcp_ethss_timer, -		    (unsigned long)gbe_dev); +	timer_setup(&gbe_dev->timer, netcp_ethss_timer, 0);  	gbe_dev->timer.expires	 = jiffies + GBE_TIMER_INTERVAL;  	add_timer(&gbe_dev->timer);  	*inst_priv = gbe_dev; diff --git a/drivers/net/ethernet/toshiba/spider_net.c b/drivers/net/ethernet/toshiba/spider_net.c index a913538d3213..d925b8203996 100644 --- a/drivers/net/ethernet/toshiba/spider_net.c +++ b/drivers/net/ethernet/toshiba/spider_net.c @@ -912,8 +912,9 @@ spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)   * packets, including updating the queue tail pointer.   */  static void -spider_net_cleanup_tx_ring(struct spider_net_card *card) +spider_net_cleanup_tx_ring(struct timer_list *t)  { +	struct spider_net_card *card = from_timer(card, t, tx_timer);  	if ((spider_net_release_tx_chain(card, 0) != 0) &&  	    (card->netdev->flags & IFF_UP)) {  		spider_net_kick_tx_dma(card); @@ -1265,7 +1266,7 @@ static int spider_net_poll(struct napi_struct *napi, int budget)  	spider_net_refill_rx_chain(card);  	spider_net_enable_rxdmac(card); -	spider_net_cleanup_tx_ring(card); +	spider_net_cleanup_tx_ring(&card->tx_timer);  	/* if all packets are in the stack, enable interrupts and return 0 */  	/* if not, return 1 */ @@ -1977,9 +1978,9 @@ init_firmware_failed:   * @data: used for pointer to card structure   *   */ -static void spider_net_link_phy(unsigned long data) +static void spider_net_link_phy(struct timer_list *t)  { -	struct spider_net_card *card = (struct spider_net_card *)data; +	struct spider_net_card *card = from_timer(card, t, aneg_timer);  	struct mii_phy *phy = &card->phy;  	/* if link didn't come up after SPIDER_NET_ANEG_TIMEOUT tries, setup phy again */ @@ -2256,14 +2257,11 @@ spider_net_setup_netdev(struct spider_net_card *card)  	pci_set_drvdata(card->pdev, netdev); -	setup_timer(&card->tx_timer, -		    (void(*)(unsigned long))spider_net_cleanup_tx_ring, -		    (unsigned long)card); +	timer_setup(&card->tx_timer, spider_net_cleanup_tx_ring, 0);  	netdev->irq = card->pdev->irq;  	card->aneg_count = 0; -	setup_timer(&card->aneg_timer, spider_net_link_phy, -		    (unsigned long)card); +	timer_setup(&card->aneg_timer, spider_net_link_phy, 0);  	netif_napi_add(netdev, &card->napi,  		       spider_net_poll, SPIDER_NET_NAPI_WEIGHT); diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c index eb8a18991d8c..cc63102ca96e 100644 --- a/drivers/net/slip/slip.c +++ b/drivers/net/slip/slip.c @@ -106,8 +106,8 @@ static int slip_esc6(unsigned char *p, unsigned char *d, int len);  static void slip_unesc6(struct slip *sl, unsigned char c);  #endif  #ifdef CONFIG_SLIP_SMART -static void sl_keepalive(unsigned long sls); -static void sl_outfill(unsigned long sls); +static void sl_keepalive(struct timer_list *t); +static void sl_outfill(struct timer_list *t);  static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);  #endif @@ -763,8 +763,8 @@ static struct slip *sl_alloc(dev_t line)  	sl->mode        = SL_MODE_DEFAULT;  #ifdef CONFIG_SLIP_SMART  	/* initialize timer_list struct */ -	setup_timer(&sl->keepalive_timer, sl_keepalive, (unsigned long)sl); -	setup_timer(&sl->outfill_timer, sl_outfill, (unsigned long)sl); +	timer_setup(&sl->keepalive_timer, sl_keepalive, 0); +	timer_setup(&sl->outfill_timer, sl_outfill, 0);  #endif  	slip_devs[i] = dev;  	return sl; @@ -1388,9 +1388,9 @@ module_exit(slip_exit);   * added by Stanislav Voronyi. All changes before marked VSV   */ -static void sl_outfill(unsigned long sls) +static void sl_outfill(struct timer_list *t)  { -	struct slip *sl = (struct slip *)sls; +	struct slip *sl = from_timer(sl, t, outfill_timer);  	spin_lock(&sl->lock); @@ -1419,9 +1419,9 @@ out:  	spin_unlock(&sl->lock);  } -static void sl_keepalive(unsigned long sls) +static void sl_keepalive(struct timer_list *t)  { -	struct slip *sl = (struct slip *)sls; +	struct slip *sl = from_timer(sl, t, keepalive_timer);  	spin_lock(&sl->lock); diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 5a2ea78a008f..c3af08f24679 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -444,9 +444,9 @@ static void tun_flow_delete_by_queue(struct tun_struct *tun, u16 queue_index)  	spin_unlock_bh(&tun->lock);  } -static void tun_flow_cleanup(unsigned long data) +static void tun_flow_cleanup(struct timer_list *t)  { -	struct tun_struct *tun = (struct tun_struct *)data; +	struct tun_struct *tun = from_timer(tun, t, flow_gc_timer);  	unsigned long delay = tun->ageing_time;  	unsigned long next_timer = jiffies + delay;  	unsigned long count = 0; @@ -1196,7 +1196,9 @@ static void tun_flow_init(struct tun_struct *tun)  		INIT_HLIST_HEAD(&tun->flows[i]);  	tun->ageing_time = TUN_FLOW_EXPIRE; -	setup_timer(&tun->flow_gc_timer, tun_flow_cleanup, (unsigned long)tun); +	timer_setup(&tun->flow_gc_timer, tun_flow_cleanup, 0); +	mod_timer(&tun->flow_gc_timer, +		  round_jiffies_up(jiffies + tun->ageing_time));  }  static void tun_flow_uninit(struct tun_struct *tun) diff --git a/drivers/net/wan/hdlc_ppp.c b/drivers/net/wan/hdlc_ppp.c index c7721c729541..afeca6bcdade 100644 --- a/drivers/net/wan/hdlc_ppp.c +++ b/drivers/net/wan/hdlc_ppp.c @@ -558,9 +558,9 @@ out:  	return NET_RX_DROP;  } -static void ppp_timer(unsigned long arg) +static void ppp_timer(struct timer_list *t)  { -	struct proto *proto = (struct proto *)arg; +	struct proto *proto = from_timer(proto, t, timer);  	struct ppp *ppp = get_ppp(proto->dev);  	unsigned long flags; @@ -610,7 +610,7 @@ static void ppp_start(struct net_device *dev)  	for (i = 0; i < IDX_COUNT; i++) {  		struct proto *proto = &ppp->protos[i];  		proto->dev = dev; -		setup_timer(&proto->timer, ppp_timer, (unsigned long)proto); +		timer_setup(&proto->timer, ppp_timer, 0);  		proto->state = CLOSED;  	}  	ppp->protos[IDX_LCP].pid = PID_LCP; diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c index 3559fb5b8fb0..03aae6bc1838 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c @@ -280,9 +280,9 @@ static void brcmf_btcoex_restore_part1(struct brcmf_btcoex_info *btci)  /**   * brcmf_btcoex_timerfunc() - BT coex timer callback   */ -static void brcmf_btcoex_timerfunc(ulong data) +static void brcmf_btcoex_timerfunc(struct timer_list *t)  { -	struct brcmf_btcoex_info *bt_local = (struct brcmf_btcoex_info *)data; +	struct brcmf_btcoex_info *bt_local = from_timer(bt_local, t, timer);  	brcmf_dbg(TRACE, "enter\n");  	bt_local->timer_on = false; @@ -380,7 +380,7 @@ int brcmf_btcoex_attach(struct brcmf_cfg80211_info *cfg)  	/* Set up timer for BT  */  	btci->timer_on = false;  	btci->timeout = BRCMF_BTCOEX_OPPR_WIN_TIME; -	setup_timer(&btci->timer, brcmf_btcoex_timerfunc, (ulong)btci); +	timer_setup(&btci->timer, brcmf_btcoex_timerfunc, 0);  	btci->cfg = cfg;  	btci->saved_regs_part1 = false;  	btci->saved_regs_part2 = false; diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c index 6e70df978159..15fa00d79fc6 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c @@ -2983,10 +2983,10 @@ static void brcmf_cfg80211_escan_timeout_worker(struct work_struct *work)  	brcmf_notify_escan_complete(cfg, cfg->escan_info.ifp, true, true);  } -static void brcmf_escan_timeout(unsigned long data) +static void brcmf_escan_timeout(struct timer_list *t)  {  	struct brcmf_cfg80211_info *cfg = -			(struct brcmf_cfg80211_info *)data; +			from_timer(cfg, t, escan_timeout);  	if (cfg->int_escan_map || cfg->scan_request) {  		brcmf_err("timer expired\n"); @@ -3150,8 +3150,7 @@ static void brcmf_init_escan(struct brcmf_cfg80211_info *cfg)  			    brcmf_cfg80211_escan_handler);  	cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE;  	/* Init scan_timeout timer */ -	setup_timer(&cfg->escan_timeout, brcmf_escan_timeout, -		    (unsigned long)cfg); +	timer_setup(&cfg->escan_timeout, brcmf_escan_timeout, 0);  	INIT_WORK(&cfg->escan_timeout_work,  		  brcmf_cfg80211_escan_timeout_worker);  } diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index e3495ea95553..310c4e2746aa 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -3972,9 +3972,9 @@ brcmf_sdio_watchdog_thread(void *data)  }  static void -brcmf_sdio_watchdog(unsigned long data) +brcmf_sdio_watchdog(struct timer_list *t)  { -	struct brcmf_sdio *bus = (struct brcmf_sdio *)data; +	struct brcmf_sdio *bus = from_timer(bus, t, timer);  	if (bus->watchdog_tsk) {  		complete(&bus->watchdog_wait); @@ -4169,8 +4169,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)  	init_waitqueue_head(&bus->dcmd_resp_wait);  	/* Set up the watchdog timer */ -	setup_timer(&bus->timer, brcmf_sdio_watchdog, -		    (unsigned long)bus); +	timer_setup(&bus->timer, brcmf_sdio_watchdog, 0);  	/* Initialize watchdog thread */  	init_completion(&bus->watchdog_wait);  	bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread, diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/main.c b/drivers/net/wireless/intel/iwlwifi/dvm/main.c index 2acd94da9efe..d11d72615de2 100644 --- a/drivers/net/wireless/intel/iwlwifi/dvm/main.c +++ b/drivers/net/wireless/intel/iwlwifi/dvm/main.c @@ -399,9 +399,9 @@ int iwl_send_statistics_request(struct iwl_priv *priv, u8 flags, bool clear)   * was received.  We need to ensure we receive the statistics in order   * to update the temperature used for calibrating the TXPOWER.   */ -static void iwl_bg_statistics_periodic(unsigned long data) +static void iwl_bg_statistics_periodic(struct timer_list *t)  { -	struct iwl_priv *priv = (struct iwl_priv *)data; +	struct iwl_priv *priv = from_timer(priv, t, statistics_periodic);  	if (test_bit(STATUS_EXIT_PENDING, &priv->status))  		return; @@ -556,9 +556,9 @@ static void iwl_continuous_event_trace(struct iwl_priv *priv)   * this function is to perform continuous uCode event logging operation   * if enabled   */ -static void iwl_bg_ucode_trace(unsigned long data) +static void iwl_bg_ucode_trace(struct timer_list *t)  { -	struct iwl_priv *priv = (struct iwl_priv *)data; +	struct iwl_priv *priv = from_timer(priv, t, ucode_trace);  	if (test_bit(STATUS_EXIT_PENDING, &priv->status))  		return; @@ -1085,11 +1085,9 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)  	if (priv->lib->bt_params)  		iwlagn_bt_setup_deferred_work(priv); -	setup_timer(&priv->statistics_periodic, iwl_bg_statistics_periodic, -		    (unsigned long)priv); +	timer_setup(&priv->statistics_periodic, iwl_bg_statistics_periodic, 0); -	setup_timer(&priv->ucode_trace, iwl_bg_ucode_trace, -		    (unsigned long)priv); +	timer_setup(&priv->ucode_trace, iwl_bg_ucode_trace, 0);  }  void iwl_cancel_deferred_work(struct iwl_priv *priv) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c index b5c459cd70ce..fed6d842a5e1 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/tx.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/tx.c @@ -147,9 +147,9 @@ void iwl_pcie_free_dma_ptr(struct iwl_trans *trans, struct iwl_dma_ptr *ptr)  	memset(ptr, 0, sizeof(*ptr));  } -static void iwl_pcie_txq_stuck_timer(unsigned long data) +static void iwl_pcie_txq_stuck_timer(struct timer_list *t)  { -	struct iwl_txq *txq = (void *)data; +	struct iwl_txq *txq = from_timer(txq, t, stuck_timer);  	struct iwl_trans_pcie *trans_pcie = txq->trans_pcie;  	struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie); @@ -495,8 +495,7 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,  	if (WARN_ON(txq->entries || txq->tfds))  		return -EINVAL; -	setup_timer(&txq->stuck_timer, iwl_pcie_txq_stuck_timer, -		    (unsigned long)txq); +	timer_setup(&txq->stuck_timer, iwl_pcie_txq_stuck_timer, 0);  	txq->trans_pcie = trans_pcie;  	txq->n_window = slots_num; diff --git a/drivers/net/wireless/intersil/hostap/hostap_ap.c b/drivers/net/wireless/intersil/hostap/hostap_ap.c index f9d047314692..b4dfe1893d18 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_ap.c +++ b/drivers/net/wireless/intersil/hostap/hostap_ap.c @@ -185,9 +185,9 @@ static void hostap_event_expired_sta(struct net_device *dev,  #ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT -static void ap_handle_timer(unsigned long data) +static void ap_handle_timer(struct timer_list *t)  { -	struct sta_info *sta = (struct sta_info *) data; +	struct sta_info *sta = from_timer(sta, t, timer);  	local_info_t *local;  	struct ap_data *ap;  	unsigned long next_time = 0; @@ -1189,7 +1189,7 @@ static struct sta_info * ap_add_sta(struct ap_data *ap, u8 *addr)  	}  #ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT -	setup_timer(&sta->timer, ap_handle_timer, (unsigned long)sta); +	timer_setup(&sta->timer, ap_handle_timer, 0);  	sta->timer.expires = jiffies + ap->max_inactivity;  	if (!ap->local->hostapd)  		add_timer(&sta->timer); diff --git a/drivers/net/wireless/intersil/hostap/hostap_hw.c b/drivers/net/wireless/intersil/hostap/hostap_hw.c index 8177fd6f65c1..5c4a17a18968 100644 --- a/drivers/net/wireless/intersil/hostap/hostap_hw.c +++ b/drivers/net/wireless/intersil/hostap/hostap_hw.c @@ -2794,9 +2794,9 @@ static void prism2_check_sta_fw_version(local_info_t *local)  } -static void hostap_passive_scan(unsigned long data) +static void hostap_passive_scan(struct timer_list *t)  { -	local_info_t *local = (local_info_t *) data; +	local_info_t *local = from_timer(local, t, passive_scan_timer);  	struct net_device *dev = local->dev;  	u16 chan; @@ -2869,10 +2869,10 @@ static void handle_comms_qual_update(struct work_struct *work)   * used to monitor that local->last_tick_timer is being updated. If not,   * interrupt busy-loop is assumed and driver tries to recover by masking out   * some events. */ -static void hostap_tick_timer(unsigned long data) +static void hostap_tick_timer(struct timer_list *t)  {  	static unsigned long last_inquire = 0; -	local_info_t *local = (local_info_t *) data; +	local_info_t *local = from_timer(local, t, tick_timer);  	local->last_tick_timer = jiffies;  	/* Inquire CommTallies every 10 seconds to keep the statistics updated @@ -3225,10 +3225,8 @@ while (0)  	lib80211_crypt_info_init(&local->crypt_info, dev->name, &local->lock); -	setup_timer(&local->passive_scan_timer, hostap_passive_scan, -		    (unsigned long)local); -	setup_timer(&local->tick_timer, hostap_tick_timer, -		    (unsigned long)local); +	timer_setup(&local->passive_scan_timer, hostap_passive_scan, 0); +	timer_setup(&local->tick_timer, hostap_tick_timer, 0);  	local->tick_timer.expires = jiffies + 2 * HZ;  	add_timer(&local->tick_timer); diff --git a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c index 501180584b4b..94ad6fe29e69 100644 --- a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c +++ b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c @@ -319,9 +319,9 @@ static inline void ezusb_mod_timer(struct ezusb_priv *upriv,  	mod_timer(timer, expire);  } -static void ezusb_request_timerfn(u_long _ctx) +static void ezusb_request_timerfn(struct timer_list *t)  { -	struct request_context *ctx = (void *) _ctx; +	struct request_context *ctx = from_timer(ctx, t, timer);  	ctx->outurb->transfer_flags |= URB_ASYNC_UNLINK;  	if (usb_unlink_urb(ctx->outurb) == -EINPROGRESS) { @@ -365,7 +365,7 @@ static struct request_context *ezusb_alloc_ctx(struct ezusb_priv *upriv,  	refcount_set(&ctx->refcount, 1);  	init_completion(&ctx->done); -	setup_timer(&ctx->timer, ezusb_request_timerfn, (u_long)ctx); +	timer_setup(&ctx->timer, ezusb_request_timerfn, 0);  	return ctx;  } diff --git a/drivers/net/wireless/quantenna/qtnfmac/core.c b/drivers/net/wireless/quantenna/qtnfmac/core.c index 2d2c1ea65cb2..3423dc51198b 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/core.c +++ b/drivers/net/wireless/quantenna/qtnfmac/core.c @@ -288,7 +288,7 @@ static struct qtnf_wmac *qtnf_core_mac_alloc(struct qtnf_bus *bus,  		mac->iflist[i].vifid = i;  		qtnf_sta_list_init(&mac->iflist[i].sta_list);  		mutex_init(&mac->mac_lock); -		setup_timer(&mac->scan_timeout, NULL, 0); +		timer_setup(&mac->scan_timeout, NULL, 0);  	}  	qtnf_mac_init_primary_intf(mac); diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index c346c021b999..d47921a84509 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -196,9 +196,9 @@ out:  	mutex_unlock(&wl->mutex);  } -static void wl1271_rx_streaming_timer(unsigned long data) +static void wl1271_rx_streaming_timer(struct timer_list *t)  { -	struct wl12xx_vif *wlvif = (struct wl12xx_vif *)data; +	struct wl12xx_vif *wlvif = from_timer(wlvif, t, rx_streaming_timer);  	struct wl1271 *wl = wlvif->wl;  	ieee80211_queue_work(wl->hw, &wlvif->rx_streaming_disable_work);  } @@ -2279,8 +2279,7 @@ static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)  			  wlcore_pending_auth_complete_work);  	INIT_LIST_HEAD(&wlvif->list); -	setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer, -		    (unsigned long) wlvif); +	timer_setup(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer, 0);  	return 0;  } diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 8b8689c6d887..18c85e55e76a 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -228,9 +228,9 @@ static bool xennet_can_sg(struct net_device *dev)  } -static void rx_refill_timeout(unsigned long data) +static void rx_refill_timeout(struct timer_list *t)  { -	struct netfront_queue *queue = (struct netfront_queue *)data; +	struct netfront_queue *queue = from_timer(queue, t, rx_refill_timer);  	napi_schedule(&queue->napi);  } @@ -1605,8 +1605,7 @@ static int xennet_init_queue(struct netfront_queue *queue)  	spin_lock_init(&queue->tx_lock);  	spin_lock_init(&queue->rx_lock); -	setup_timer(&queue->rx_refill_timer, rx_refill_timeout, -		    (unsigned long)queue); +	timer_setup(&queue->rx_refill_timer, rx_refill_timeout, 0);  	snprintf(queue->name, sizeof(queue->name), "%s-q%u",  		 queue->info->netdev->name, queue->id); diff --git a/drivers/nfc/pn533/pn533.c b/drivers/nfc/pn533/pn533.c index 2effa5ff7082..a0cc1cc45292 100644 --- a/drivers/nfc/pn533/pn533.c +++ b/drivers/nfc/pn533/pn533.c @@ -1232,9 +1232,9 @@ static int pn533_init_target_complete(struct pn533 *dev, struct sk_buff *resp)  	return 0;  } -static void pn533_listen_mode_timer(unsigned long data) +static void pn533_listen_mode_timer(struct timer_list *t)  { -	struct pn533 *dev = (struct pn533 *)data; +	struct pn533 *dev = from_timer(dev, t, listen_timer);  	dev_dbg(dev->dev, "Listen mode timeout\n"); @@ -2632,8 +2632,7 @@ struct pn533 *pn533_register_device(u32 device_type,  	if (priv->wq == NULL)  		goto error; -	setup_timer(&priv->listen_timer, pn533_listen_mode_timer, -		    (unsigned long)priv); +	timer_setup(&priv->listen_timer, pn533_listen_mode_timer, 0);  	skb_queue_head_init(&priv->resp_q);  	skb_queue_head_init(&priv->fragment_skb); diff --git a/drivers/nfc/st-nci/ndlc.c b/drivers/nfc/st-nci/ndlc.c index 93a7536a9af9..f26d938d240f 100644 --- a/drivers/nfc/st-nci/ndlc.c +++ b/drivers/nfc/st-nci/ndlc.c @@ -246,18 +246,18 @@ void ndlc_recv(struct llt_ndlc *ndlc, struct sk_buff *skb)  }  EXPORT_SYMBOL(ndlc_recv); -static void ndlc_t1_timeout(unsigned long data) +static void ndlc_t1_timeout(struct timer_list *t)  { -	struct llt_ndlc *ndlc = (struct llt_ndlc *)data; +	struct llt_ndlc *ndlc = from_timer(ndlc, t, t1_timer);  	pr_debug("\n");  	schedule_work(&ndlc->sm_work);  } -static void ndlc_t2_timeout(unsigned long data) +static void ndlc_t2_timeout(struct timer_list *t)  { -	struct llt_ndlc *ndlc = (struct llt_ndlc *)data; +	struct llt_ndlc *ndlc = from_timer(ndlc, t, t2_timer);  	pr_debug("\n"); @@ -282,8 +282,8 @@ int ndlc_probe(void *phy_id, struct nfc_phy_ops *phy_ops, struct device *dev,  	*ndlc_id = ndlc;  	/* initialize timers */ -	setup_timer(&ndlc->t1_timer, ndlc_t1_timeout, (unsigned long)ndlc); -	setup_timer(&ndlc->t2_timer, ndlc_t2_timeout, (unsigned long)ndlc); +	timer_setup(&ndlc->t1_timer, ndlc_t1_timeout, 0); +	timer_setup(&ndlc->t2_timer, ndlc_t2_timeout, 0);  	skb_queue_head_init(&ndlc->rcv_q);  	skb_queue_head_init(&ndlc->send_q); diff --git a/drivers/ntb/test/ntb_pingpong.c b/drivers/ntb/test/ntb_pingpong.c index 938a18bcfc3f..3f5a92bae6f8 100644 --- a/drivers/ntb/test/ntb_pingpong.c +++ b/drivers/ntb/test/ntb_pingpong.c @@ -107,9 +107,9 @@ struct pp_ctx {  static struct dentry *pp_debugfs_dir; -static void pp_ping(unsigned long ctx) +static void pp_ping(struct timer_list *t)  { -	struct pp_ctx *pp = (void *)ctx; +	struct pp_ctx *pp = from_timer(pp, t, db_timer);  	unsigned long irqflags;  	u64 db_bits, db_mask;  	u32 spad_rd, spad_wr; @@ -153,7 +153,7 @@ static void pp_link_event(void *ctx)  	if (ntb_link_is_up(pp->ntb, NULL, NULL) == 1) {  		dev_dbg(&pp->ntb->dev, "link is up\n"); -		pp_ping((unsigned long)pp); +		pp_ping(&pp->db_timer);  	} else {  		dev_dbg(&pp->ntb->dev, "link is down\n");  		del_timer(&pp->db_timer); @@ -252,7 +252,7 @@ static int pp_probe(struct ntb_client *client,  	pp->db_bits = 0;  	atomic_set(&pp->count, 0);  	spin_lock_init(&pp->db_lock); -	setup_timer(&pp->db_timer, pp_ping, (unsigned long)pp); +	timer_setup(&pp->db_timer, pp_ping, 0);  	pp->db_delay = msecs_to_jiffies(delay_ms);  	rc = ntb_set_ctx(ntb, pp, &pp_ops); diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c index 62aa2c37b8d2..935121814c97 100644 --- a/drivers/platform/x86/sony-laptop.c +++ b/drivers/platform/x86/sony-laptop.c @@ -363,7 +363,7 @@ static int sony_laptop_input_keycode_map[] = {  };  /* release buttons after a short delay if pressed */ -static void do_sony_laptop_release_key(unsigned long unused) +static void do_sony_laptop_release_key(struct timer_list *unused)  {  	struct sony_laptop_keypress kp;  	unsigned long flags; @@ -470,7 +470,7 @@ static int sony_laptop_setup_input(struct acpi_device *acpi_device)  		goto err_dec_users;  	} -	setup_timer(&sony_laptop_input.release_key_timer, +	timer_setup(&sony_laptop_input.release_key_timer,  		    do_sony_laptop_release_key, 0);  	/* input keys */ diff --git a/drivers/pps/clients/pps-ktimer.c b/drivers/pps/clients/pps-ktimer.c index 436b4e4e71a1..04735649052a 100644 --- a/drivers/pps/clients/pps-ktimer.c +++ b/drivers/pps/clients/pps-ktimer.c @@ -39,7 +39,7 @@ static struct timer_list ktimer;   * The kernel timer   */ -static void pps_ktimer_event(unsigned long ptr) +static void pps_ktimer_event(struct timer_list *unused)  {  	struct pps_event_time ts; @@ -85,7 +85,7 @@ static int __init pps_ktimer_init(void)  		return -ENOMEM;  	} -	setup_timer(&ktimer, pps_ktimer_event, 0); +	timer_setup(&ktimer, pps_ktimer_event, 0);  	mod_timer(&ktimer, jiffies + HZ);  	dev_info(pps->dev, "ktimer PPS source registered\n"); diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index 00efe24a6063..215eac68ae2d 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c @@ -71,9 +71,9 @@ static void rtc_uie_task(struct work_struct *work)  	if (num)  		rtc_handle_legacy_irq(rtc, num, RTC_UF);  } -static void rtc_uie_timer(unsigned long data) +static void rtc_uie_timer(struct timer_list *t)  { -	struct rtc_device *rtc = (struct rtc_device *)data; +	struct rtc_device *rtc = from_timer(rtc, t, uie_timer);  	unsigned long flags;  	spin_lock_irqsave(&rtc->irq_lock, flags); @@ -460,7 +460,7 @@ void rtc_dev_prepare(struct rtc_device *rtc)  #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL  	INIT_WORK(&rtc->uie_task, rtc_uie_task); -	setup_timer(&rtc->uie_timer, rtc_uie_timer, (unsigned long)rtc); +	timer_setup(&rtc->uie_timer, rtc_uie_timer, 0);  #endif  	cdev_init(&rtc->char_dev, &rtc_dev_fops); diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index adba91318768..0f1ff0813493 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -70,8 +70,8 @@ static void do_restore_device(struct work_struct *);  static void do_reload_device(struct work_struct *);  static void do_requeue_requests(struct work_struct *);  static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); -static void dasd_device_timeout(unsigned long); -static void dasd_block_timeout(unsigned long); +static void dasd_device_timeout(struct timer_list *); +static void dasd_block_timeout(struct timer_list *);  static void __dasd_process_erp(struct dasd_device *, struct dasd_ccw_req *);  static void dasd_profile_init(struct dasd_profile *, struct dentry *);  static void dasd_profile_exit(struct dasd_profile *); @@ -119,8 +119,7 @@ struct dasd_device *dasd_alloc_device(void)  		     (void (*)(unsigned long)) dasd_device_tasklet,  		     (unsigned long) device);  	INIT_LIST_HEAD(&device->ccw_queue); -	setup_timer(&device->timer, dasd_device_timeout, -		    (unsigned long)device); +	timer_setup(&device->timer, dasd_device_timeout, 0);  	INIT_WORK(&device->kick_work, do_kick_device);  	INIT_WORK(&device->restore_device, do_restore_device);  	INIT_WORK(&device->reload_device, do_reload_device); @@ -162,7 +161,7 @@ struct dasd_block *dasd_alloc_block(void)  		     (unsigned long) block);  	INIT_LIST_HEAD(&block->ccw_queue);  	spin_lock_init(&block->queue_lock); -	setup_timer(&block->timer, dasd_block_timeout, (unsigned long)block); +	timer_setup(&block->timer, dasd_block_timeout, 0);  	spin_lock_init(&block->profile.lock);  	return block; @@ -1557,12 +1556,12 @@ EXPORT_SYMBOL(dasd_start_IO);   * The head of the ccw queue will have status DASD_CQR_IN_IO for 1),   * DASD_CQR_QUEUED for 2) and 3).   */ -static void dasd_device_timeout(unsigned long ptr) +static void dasd_device_timeout(struct timer_list *t)  {  	unsigned long flags;  	struct dasd_device *device; -	device = (struct dasd_device *) ptr; +	device = from_timer(device, t, timer);  	spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);  	/* re-activate request queue */  	dasd_device_remove_stop_bits(device, DASD_STOPPED_PENDING); @@ -2625,12 +2624,12 @@ EXPORT_SYMBOL(dasd_cancel_req);   * is waiting for something that may not come reliably, (e.g. a state   * change interrupt)   */ -static void dasd_block_timeout(unsigned long ptr) +static void dasd_block_timeout(struct timer_list *t)  {  	unsigned long flags;  	struct dasd_block *block; -	block = (struct dasd_block *) ptr; +	block = from_timer(block, t, timer);  	spin_lock_irqsave(get_ccwdev_lock(block->base->cdev), flags);  	/* re-activate request queue */  	dasd_device_remove_stop_bits(block->base, DASD_STOPPED_PENDING); diff --git a/drivers/s390/net/fsm.c b/drivers/s390/net/fsm.c index 16b81be1f07a..c81adf8042d7 100644 --- a/drivers/s390/net/fsm.c +++ b/drivers/s390/net/fsm.c @@ -129,8 +129,9 @@ fsm_getstate_str(fsm_instance *fi)  }  static void -fsm_expire_timer(fsm_timer *this) +fsm_expire_timer(struct timer_list *t)  { +	fsm_timer *this = from_timer(this, t, tl);  #if FSM_TIMER_DEBUG  	printk(KERN_DEBUG "fsm(%s): Timer %p expired\n",  	       this->fi->name, this); @@ -146,7 +147,7 @@ fsm_settimer(fsm_instance *fi, fsm_timer *this)  	printk(KERN_DEBUG "fsm(%s): Create timer %p\n", fi->name,  	       this);  #endif -	setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this); +	timer_setup(&this->tl, fsm_expire_timer, 0);  }  void @@ -168,7 +169,7 @@ fsm_addtimer(fsm_timer *this, int millisec, int event, void *arg)  	       this->fi->name, this, millisec);  #endif -	setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this); +	timer_setup(&this->tl, fsm_expire_timer, 0);  	this->expire_event = event;  	this->event_arg = arg;  	this->tl.expires = jiffies + (millisec * HZ) / 1000; @@ -187,7 +188,7 @@ fsm_modtimer(fsm_timer *this, int millisec, int event, void *arg)  #endif  	del_timer(&this->tl); -	setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this); +	timer_setup(&this->tl, fsm_expire_timer, 0);  	this->expire_event = event;  	this->event_arg = arg;  	this->tl.expires = jiffies + (millisec * HZ) / 1000; diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c index a54b6c11b505..21f6421536a0 100644 --- a/drivers/scsi/arcmsr/arcmsr_hba.c +++ b/drivers/scsi/arcmsr/arcmsr_hba.c @@ -101,7 +101,7 @@ static void arcmsr_enable_outbound_ints(struct AdapterControlBlock *acb,  static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb);  static void arcmsr_hbaA_flush_cache(struct AdapterControlBlock *acb);  static void arcmsr_hbaB_flush_cache(struct AdapterControlBlock *acb); -static void arcmsr_request_device_map(unsigned long pacb); +static void arcmsr_request_device_map(struct timer_list *t);  static void arcmsr_hbaA_request_device_map(struct AdapterControlBlock *acb);  static void arcmsr_hbaB_request_device_map(struct AdapterControlBlock *acb);  static void arcmsr_hbaC_request_device_map(struct AdapterControlBlock *acb); @@ -837,8 +837,7 @@ static int arcmsr_probe(struct pci_dev *pdev, const struct pci_device_id *id)  	atomic_set(&acb->rq_map_token, 16);  	atomic_set(&acb->ante_token_value, 16);  	acb->fw_flag = FW_NORMAL; -	setup_timer(&acb->eternal_timer, &arcmsr_request_device_map, -		    (unsigned long)acb); +	timer_setup(&acb->eternal_timer, arcmsr_request_device_map, 0);  	acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);  	add_timer(&acb->eternal_timer);  	if(arcmsr_alloc_sysfs_attr(acb)) @@ -929,8 +928,7 @@ static int arcmsr_resume(struct pci_dev *pdev)  	atomic_set(&acb->rq_map_token, 16);  	atomic_set(&acb->ante_token_value, 16);  	acb->fw_flag = FW_NORMAL; -	setup_timer(&acb->eternal_timer, &arcmsr_request_device_map, -		    (unsigned long)acb); +	timer_setup(&acb->eternal_timer, arcmsr_request_device_map, 0);  	acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);  	add_timer(&acb->eternal_timer);  	return 0; @@ -3457,9 +3455,9 @@ static void arcmsr_hbaD_request_device_map(struct AdapterControlBlock *acb)  	}  } -static void arcmsr_request_device_map(unsigned long pacb) +static void arcmsr_request_device_map(struct timer_list *t)  { -	struct AdapterControlBlock *acb = (struct AdapterControlBlock *)pacb; +	struct AdapterControlBlock *acb = from_timer(acb, t, eternal_timer);  	switch (acb->adapter_type) {  		case ACB_ADAPTER_TYPE_A: {  			arcmsr_hbaA_request_device_map(acb); diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c index 7304d5a4fc4f..f4775ca70bab 100644 --- a/drivers/scsi/arm/fas216.c +++ b/drivers/scsi/arm/fas216.c @@ -2318,9 +2318,9 @@ DEF_SCSI_QCMD(fas216_noqueue_command)   * Error handler timeout function.  Indicate that we timed out,   * and wake up any error handler process so it can continue.   */ -static void fas216_eh_timer(unsigned long data) +static void fas216_eh_timer(struct timer_list *t)  { -	FAS216_Info *info = (FAS216_Info *)data; +	FAS216_Info *info = from_timer(info, t, eh_timer);  	fas216_log(info, LOG_ERROR, "error handling timed out\n"); @@ -2849,7 +2849,7 @@ int fas216_init(struct Scsi_Host *host)  	info->rst_dev_status = -1;  	info->rst_bus_status = -1;  	init_waitqueue_head(&info->eh_wait); -	setup_timer(&info->eh_timer, fas216_eh_timer, (unsigned long)info); +	timer_setup(&info->eh_timer, fas216_eh_timer, 0);  	spin_lock_init(&info->host_lock); diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c index d10826a69725..cf0466686804 100644 --- a/drivers/scsi/bfa/bfad.c +++ b/drivers/scsi/bfa/bfad.c @@ -692,9 +692,9 @@ ext:  }  void -bfad_bfa_tmo(unsigned long data) +bfad_bfa_tmo(struct timer_list *t)  { -	struct bfad_s	      *bfad = (struct bfad_s *) data; +	struct bfad_s	      *bfad = from_timer(bfad, t, hal_tmo);  	unsigned long	flags;  	struct list_head	       doneq; @@ -719,7 +719,7 @@ bfad_bfa_tmo(unsigned long data)  void  bfad_init_timer(struct bfad_s *bfad)  { -	setup_timer(&bfad->hal_tmo, bfad_bfa_tmo, (unsigned long)bfad); +	timer_setup(&bfad->hal_tmo, bfad_bfa_tmo, 0);  	mod_timer(&bfad->hal_tmo,  		  jiffies + msecs_to_jiffies(BFA_TIMER_FREQ)); diff --git a/drivers/scsi/bfa/bfad_drv.h b/drivers/scsi/bfa/bfad_drv.h index cfcfff48e8e1..4fe980a6441f 100644 --- a/drivers/scsi/bfa/bfad_drv.h +++ b/drivers/scsi/bfa/bfad_drv.h @@ -314,7 +314,7 @@ int		bfad_setup_intr(struct bfad_s *bfad);  void		bfad_remove_intr(struct bfad_s *bfad);  void		bfad_update_hal_cfg(struct bfa_iocfc_cfg_s *bfa_cfg);  bfa_status_t	bfad_hal_mem_alloc(struct bfad_s *bfad); -void		bfad_bfa_tmo(unsigned long data); +void		bfad_bfa_tmo(struct timer_list *t);  void		bfad_init_timer(struct bfad_s *bfad);  int		bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad);  void		bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad); diff --git a/drivers/scsi/bnx2fc/bnx2fc_tgt.c b/drivers/scsi/bnx2fc/bnx2fc_tgt.c index 59a2dfbcbc69..a8ae1a019eea 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_tgt.c +++ b/drivers/scsi/bnx2fc/bnx2fc_tgt.c @@ -14,8 +14,8 @@   */  #include "bnx2fc.h" -static void bnx2fc_upld_timer(unsigned long data); -static void bnx2fc_ofld_timer(unsigned long data); +static void bnx2fc_upld_timer(struct timer_list *t); +static void bnx2fc_ofld_timer(struct timer_list *t);  static int bnx2fc_init_tgt(struct bnx2fc_rport *tgt,  			   struct fcoe_port *port,  			   struct fc_rport_priv *rdata); @@ -27,10 +27,10 @@ static void bnx2fc_free_session_resc(struct bnx2fc_hba *hba,  			      struct bnx2fc_rport *tgt);  static void bnx2fc_free_conn_id(struct bnx2fc_hba *hba, u32 conn_id); -static void bnx2fc_upld_timer(unsigned long data) +static void bnx2fc_upld_timer(struct timer_list *t)  { -	struct bnx2fc_rport *tgt = (struct bnx2fc_rport *)data; +	struct bnx2fc_rport *tgt = from_timer(tgt, t, upld_timer);  	BNX2FC_TGT_DBG(tgt, "upld_timer - Upload compl not received!!\n");  	/* fake upload completion */ @@ -40,10 +40,10 @@ static void bnx2fc_upld_timer(unsigned long data)  	wake_up_interruptible(&tgt->upld_wait);  } -static void bnx2fc_ofld_timer(unsigned long data) +static void bnx2fc_ofld_timer(struct timer_list *t)  { -	struct bnx2fc_rport *tgt = (struct bnx2fc_rport *)data; +	struct bnx2fc_rport *tgt = from_timer(tgt, t, ofld_timer);  	BNX2FC_TGT_DBG(tgt, "entered bnx2fc_ofld_timer\n");  	/* NOTE: This function should never be called, as @@ -65,7 +65,7 @@ static void bnx2fc_ofld_timer(unsigned long data)  static void bnx2fc_ofld_wait(struct bnx2fc_rport *tgt)  { -	setup_timer(&tgt->ofld_timer, bnx2fc_ofld_timer, (unsigned long)tgt); +	timer_setup(&tgt->ofld_timer, bnx2fc_ofld_timer, 0);  	mod_timer(&tgt->ofld_timer, jiffies + BNX2FC_FW_TIMEOUT);  	wait_event_interruptible(tgt->ofld_wait, @@ -277,7 +277,7 @@ void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt)  static void bnx2fc_upld_wait(struct bnx2fc_rport *tgt)  { -	setup_timer(&tgt->upld_timer, bnx2fc_upld_timer, (unsigned long)tgt); +	timer_setup(&tgt->upld_timer, bnx2fc_upld_timer, 0);  	mod_timer(&tgt->upld_timer, jiffies + BNX2FC_FW_TIMEOUT);  	wait_event_interruptible(tgt->upld_wait,  				 (test_bit( diff --git a/drivers/scsi/esas2r/esas2r_main.c b/drivers/scsi/esas2r/esas2r_main.c index af4af504a97f..4eb14301a497 100644 --- a/drivers/scsi/esas2r/esas2r_main.c +++ b/drivers/scsi/esas2r/esas2r_main.c @@ -1631,11 +1631,11 @@ void esas2r_adapter_tasklet(unsigned long context)  	}  } -static void esas2r_timer_callback(unsigned long context); +static void esas2r_timer_callback(struct timer_list *t);  void esas2r_kickoff_timer(struct esas2r_adapter *a)  { -	setup_timer(&a->timer, esas2r_timer_callback, (unsigned long)a); +	timer_setup(&a->timer, esas2r_timer_callback, 0);  	a->timer.expires = jiffies +  			   msecs_to_jiffies(100); @@ -1643,9 +1643,9 @@ void esas2r_kickoff_timer(struct esas2r_adapter *a)  	add_timer(&a->timer);  } -static void esas2r_timer_callback(unsigned long context) +static void esas2r_timer_callback(struct timer_list *t)  { -	struct esas2r_adapter *a = (struct esas2r_adapter *)context; +	struct esas2r_adapter *a = from_timer(a, t, timer);  	set_bit(AF2_TIMER_TICK, &a->flags2); diff --git a/drivers/scsi/fcoe/fcoe_ctlr.c b/drivers/scsi/fcoe/fcoe_ctlr.c index fff6f1851dc1..097f37de6ce9 100644 --- a/drivers/scsi/fcoe/fcoe_ctlr.c +++ b/drivers/scsi/fcoe/fcoe_ctlr.c @@ -49,7 +49,7 @@  #define	FCOE_CTLR_MIN_FKA	500		/* min keep alive (mS) */  #define	FCOE_CTLR_DEF_FKA	FIP_DEF_FKA	/* default keep alive (mS) */ -static void fcoe_ctlr_timeout(unsigned long); +static void fcoe_ctlr_timeout(struct timer_list *);  static void fcoe_ctlr_timer_work(struct work_struct *);  static void fcoe_ctlr_recv_work(struct work_struct *);  static int fcoe_ctlr_flogi_retry(struct fcoe_ctlr *); @@ -156,7 +156,7 @@ void fcoe_ctlr_init(struct fcoe_ctlr *fip, enum fip_state mode)  	mutex_init(&fip->ctlr_mutex);  	spin_lock_init(&fip->ctlr_lock);  	fip->flogi_oxid = FC_XID_UNKNOWN; -	setup_timer(&fip->timer, fcoe_ctlr_timeout, (unsigned long)fip); +	timer_setup(&fip->timer, fcoe_ctlr_timeout, 0);  	INIT_WORK(&fip->timer_work, fcoe_ctlr_timer_work);  	INIT_WORK(&fip->recv_work, fcoe_ctlr_recv_work);  	skb_queue_head_init(&fip->fip_recv_list); @@ -1786,9 +1786,9 @@ unlock:   * fcoe_ctlr_timeout() - FIP timeout handler   * @arg: The FCoE controller that timed out   */ -static void fcoe_ctlr_timeout(unsigned long arg) +static void fcoe_ctlr_timeout(struct timer_list *t)  { -	struct fcoe_ctlr *fip = (struct fcoe_ctlr *)arg; +	struct fcoe_ctlr *fip = from_timer(fip, t, timer);  	schedule_work(&fip->timer_work);  } diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c index aacadbf20b69..e52599f44170 100644 --- a/drivers/scsi/fnic/fnic_main.c +++ b/drivers/scsi/fnic/fnic_main.c @@ -407,18 +407,18 @@ static int fnic_notify_set(struct fnic *fnic)  	return err;  } -static void fnic_notify_timer(unsigned long data) +static void fnic_notify_timer(struct timer_list *t)  { -	struct fnic *fnic = (struct fnic *)data; +	struct fnic *fnic = from_timer(fnic, t, notify_timer);  	fnic_handle_link_event(fnic);  	mod_timer(&fnic->notify_timer,  		  round_jiffies(jiffies + FNIC_NOTIFY_TIMER_PERIOD));  } -static void fnic_fip_notify_timer(unsigned long data) +static void fnic_fip_notify_timer(struct timer_list *t)  { -	struct fnic *fnic = (struct fnic *)data; +	struct fnic *fnic = from_timer(fnic, t, fip_timer);  	fnic_handle_fip_timer(fnic);  } @@ -777,8 +777,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		vnic_dev_add_addr(fnic->vdev, fnic->ctlr.ctl_src_addr);  		fnic->set_vlan = fnic_set_vlan;  		fcoe_ctlr_init(&fnic->ctlr, FIP_MODE_AUTO); -		setup_timer(&fnic->fip_timer, fnic_fip_notify_timer, -							(unsigned long)fnic); +		timer_setup(&fnic->fip_timer, fnic_fip_notify_timer, 0);  		spin_lock_init(&fnic->vlans_lock);  		INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame);  		INIT_WORK(&fnic->event_work, fnic_handle_event); @@ -809,8 +808,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	/* Setup notify timer when using MSI interrupts */  	if (vnic_dev_get_intr_mode(fnic->vdev) == VNIC_DEV_INTR_MODE_MSI) -		setup_timer(&fnic->notify_timer, -			    fnic_notify_timer, (unsigned long)fnic); +		timer_setup(&fnic->notify_timer, fnic_notify_timer, 0);  	/* allocate RQ buffers and post them to RQ*/  	for (i = 0; i < fnic->rq_count; i++) { diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c index 017216f5e919..dc4e801b2cef 100644 --- a/drivers/scsi/ncr53c8xx.c +++ b/drivers/scsi/ncr53c8xx.c @@ -8093,9 +8093,9 @@ irqreturn_t ncr53c8xx_intr(int irq, void *dev_id)       return IRQ_HANDLED;  } -static void ncr53c8xx_timeout(unsigned long npref) +static void ncr53c8xx_timeout(struct timer_list *t)  { -	struct ncb *np = (struct ncb *) npref; +	struct ncb *np = from_timer(np, t, timer);  	unsigned long flags;  	struct scsi_cmnd *done_list; @@ -8357,7 +8357,7 @@ struct Scsi_Host * __init ncr_attach(struct scsi_host_template *tpnt,  	if (!np->scripth0)  		goto attach_error; -	setup_timer(&np->timer, ncr53c8xx_timeout, (unsigned long)np); +	timer_setup(&np->timer, ncr53c8xx_timeout, 0);  	/* Try to map the controller chip to virtual and physical memory. */ diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index 609332b3e15b..c462b1c046cd 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -293,9 +293,9 @@ static void gb_operation_work(struct work_struct *work)  	gb_operation_put(operation);  } -static void gb_operation_timeout(unsigned long arg) +static void gb_operation_timeout(struct timer_list *t)  { -	struct gb_operation *operation = (void *)arg; +	struct gb_operation *operation = from_timer(operation, t, timer);  	if (gb_operation_result_set(operation, -ETIMEDOUT)) {  		/* @@ -540,8 +540,7 @@ gb_operation_create_common(struct gb_connection *connection, u8 type,  			goto err_request;  		} -		setup_timer(&operation->timer, gb_operation_timeout, -			    (unsigned long)operation); +		timer_setup(&operation->timer, gb_operation_timeout, 0);  	}  	operation->flags = op_flags; diff --git a/drivers/staging/lustre/lnet/lnet/net_fault.c b/drivers/staging/lustre/lnet/lnet/net_fault.c index 3c83aa31e2c2..5a5d1811ffbe 100644 --- a/drivers/staging/lustre/lnet/lnet/net_fault.c +++ b/drivers/staging/lustre/lnet/lnet/net_fault.c @@ -700,9 +700,9 @@ lnet_delay_rule_daemon(void *arg)  }  static void -delay_timer_cb(unsigned long arg) +delay_timer_cb(struct timer_list *t)  { -	struct lnet_delay_rule *rule = (struct lnet_delay_rule *)arg; +	struct lnet_delay_rule *rule = from_timer(rule, t, dl_timer);  	spin_lock_bh(&delay_dd.dd_lock);  	if (list_empty(&rule->dl_sched_link) && delay_dd.dd_running) { @@ -762,7 +762,7 @@ lnet_delay_rule_add(struct lnet_fault_attr *attr)  		wait_event(delay_dd.dd_ctl_waitq, delay_dd.dd_running);  	} -	setup_timer(&rule->dl_timer, delay_timer_cb, (unsigned long)rule); +	timer_setup(&rule->dl_timer, delay_timer_cb, 0);  	spin_lock_init(&rule->dl_lock);  	INIT_LIST_HEAD(&rule->dl_msg_list); diff --git a/drivers/staging/lustre/lustre/ptlrpc/service.c b/drivers/staging/lustre/lustre/ptlrpc/service.c index 23cdb7c4476c..63be6e7273f3 100644 --- a/drivers/staging/lustre/lustre/ptlrpc/service.c +++ b/drivers/staging/lustre/lustre/ptlrpc/service.c @@ -329,11 +329,11 @@ ptlrpc_server_post_idle_rqbds(struct ptlrpc_service_part *svcpt)  	return -1;  } -static void ptlrpc_at_timer(unsigned long castmeharder) +static void ptlrpc_at_timer(struct timer_list *t)  {  	struct ptlrpc_service_part *svcpt; -	svcpt = (struct ptlrpc_service_part *)castmeharder; +	svcpt = from_timer(svcpt, t, scp_at_timer);  	svcpt->scp_at_check = 1;  	svcpt->scp_at_checktime = cfs_time_current(); @@ -506,8 +506,7 @@ ptlrpc_service_part_init(struct ptlrpc_service *svc,  	if (!array->paa_reqs_count)  		goto free_reqs_array; -	setup_timer(&svcpt->scp_at_timer, ptlrpc_at_timer, -		    (unsigned long)svcpt); +	timer_setup(&svcpt->scp_at_timer, ptlrpc_at_timer, 0);  	/* At SOW, service time should be quick; 10s seems generous. If client  	 * timeout is less than this, we'll be sending an early reply. @@ -926,7 +925,7 @@ static void ptlrpc_at_set_timer(struct ptlrpc_service_part *svcpt)  	next = (__s32)(array->paa_deadline - ktime_get_real_seconds() -  		       at_early_margin);  	if (next <= 0) { -		ptlrpc_at_timer((unsigned long)svcpt); +		ptlrpc_at_timer(&svcpt->scp_at_timer);  	} else {  		mod_timer(&svcpt->scp_at_timer, cfs_time_shift(next));  		CDEBUG(D_INFO, "armed %s at %+ds\n", diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c index 0790b3d9e255..143038c6c403 100644 --- a/drivers/staging/media/imx/imx-ic-prpencvf.c +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c @@ -293,9 +293,9 @@ static irqreturn_t prp_nfb4eof_interrupt(int irq, void *dev_id)   * EOF timeout timer function. This is an unrecoverable condition   * without a stream restart.   */ -static void prp_eof_timeout(unsigned long data) +static void prp_eof_timeout(struct timer_list *t)  { -	struct prp_priv *priv = (struct prp_priv *)data; +	struct prp_priv *priv = from_timer(priv, t, eof_timeout_timer);  	struct imx_media_video_dev *vdev = priv->vdev;  	struct imx_ic_priv *ic_priv = priv->ic_priv; @@ -1292,8 +1292,7 @@ static int prp_init(struct imx_ic_priv *ic_priv)  	priv->ic_priv = ic_priv;  	spin_lock_init(&priv->irqlock); -	setup_timer(&priv->eof_timeout_timer, prp_eof_timeout, -		    (unsigned long)priv); +	timer_setup(&priv->eof_timeout_timer, prp_eof_timeout, 0);  	priv->vdev = imx_media_capture_device_init(&ic_priv->sd,  						   PRPENCVF_SRC_PAD); diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c index 6d856118c223..bb1d6dafca83 100644 --- a/drivers/staging/media/imx/imx-media-csi.c +++ b/drivers/staging/media/imx/imx-media-csi.c @@ -254,9 +254,9 @@ static irqreturn_t csi_idmac_nfb4eof_interrupt(int irq, void *dev_id)   * EOF timeout timer function. This is an unrecoverable condition   * without a stream restart.   */ -static void csi_idmac_eof_timeout(unsigned long data) +static void csi_idmac_eof_timeout(struct timer_list *t)  { -	struct csi_priv *priv = (struct csi_priv *)data; +	struct csi_priv *priv = from_timer(priv, t, eof_timeout_timer);  	struct imx_media_video_dev *vdev = priv->vdev;  	v4l2_err(&priv->sd, "EOF timeout\n"); @@ -1739,8 +1739,7 @@ static int imx_csi_probe(struct platform_device *pdev)  	priv->csi_id = pdata->csi;  	priv->smfc_id = (priv->csi_id == 0) ? 0 : 2; -	setup_timer(&priv->eof_timeout_timer, csi_idmac_eof_timeout, -		    (unsigned long)priv); +	timer_setup(&priv->eof_timeout_timer, csi_idmac_eof_timeout, 0);  	spin_lock_init(&priv->irqlock);  	v4l2_subdev_init(&priv->sd, &csi_subdev_ops); diff --git a/drivers/staging/most/hdm-usb/hdm_usb.c b/drivers/staging/most/hdm-usb/hdm_usb.c index 85775da293fb..667dacac81f0 100644 --- a/drivers/staging/most/hdm-usb/hdm_usb.c +++ b/drivers/staging/most/hdm-usb/hdm_usb.c @@ -744,9 +744,9 @@ static void hdm_request_netinfo(struct most_interface *iface, int channel,   * The handler runs in interrupt context. That's why we need to defer the   * tasks to a work queue.   */ -static void link_stat_timer_handler(unsigned long data) +static void link_stat_timer_handler(struct timer_list *t)  { -	struct most_dev *mdev = (struct most_dev *)data; +	struct most_dev *mdev = from_timer(mdev, t, link_stat_timer);  	schedule_work(&mdev->poll_work_obj);  	mdev->link_stat_timer.expires = jiffies + (2 * HZ); @@ -1138,8 +1138,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)  	num_endpoints = usb_iface_desc->desc.bNumEndpoints;  	mutex_init(&mdev->io_mutex);  	INIT_WORK(&mdev->poll_work_obj, wq_netinfo); -	setup_timer(&mdev->link_stat_timer, link_stat_timer_handler, -		    (unsigned long)mdev); +	timer_setup(&mdev->link_stat_timer, link_stat_timer_handler, 0);  	mdev->usb_device = usb_dev;  	mdev->link_stat_timer.expires = jiffies + (2 * HZ); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index 4e7908322d77..f56fdc7a4b61 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -391,10 +391,10 @@ static void ieee80211_send_beacon(struct ieee80211_device *ieee)  } -static void ieee80211_send_beacon_cb(unsigned long _ieee) +static void ieee80211_send_beacon_cb(struct timer_list *t)  {  	struct ieee80211_device *ieee = -		(struct ieee80211_device *) _ieee; +		from_timer(ieee, t, beacon_timer);  	unsigned long flags;  	spin_lock_irqsave(&ieee->beacon_lock, flags); @@ -1251,9 +1251,11 @@ void ieee80211_associate_abort(struct ieee80211_device *ieee)  	spin_unlock_irqrestore(&ieee->lock, flags);  } -static void ieee80211_associate_abort_cb(unsigned long dev) +static void ieee80211_associate_abort_cb(struct timer_list *t)  { -	ieee80211_associate_abort((struct ieee80211_device *) dev); +	struct ieee80211_device *dev = from_timer(dev, t, associate_timer); + +	ieee80211_associate_abort(dev);  } @@ -2718,11 +2720,9 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee)  	ieee->enable_rx_imm_BA = true;  	ieee->tx_pending.txb = NULL; -	setup_timer(&ieee->associate_timer, ieee80211_associate_abort_cb, -		    (unsigned long)ieee); +	timer_setup(&ieee->associate_timer, ieee80211_associate_abort_cb, 0); -	setup_timer(&ieee->beacon_timer, ieee80211_send_beacon_cb, -		    (unsigned long)ieee); +	timer_setup(&ieee->beacon_timer, ieee80211_send_beacon_cb, 0);  	INIT_DELAYED_WORK(&ieee->start_ibss_wq, ieee80211_start_ibss_wq); diff --git a/drivers/staging/rtl8712/recv_linux.c b/drivers/staging/rtl8712/recv_linux.c index 576c15d25a0f..986a55bb9877 100644 --- a/drivers/staging/rtl8712/recv_linux.c +++ b/drivers/staging/rtl8712/recv_linux.c @@ -138,17 +138,16 @@ _recv_indicatepkt_drop:  	precvpriv->rx_drop++;  } -static void _r8712_reordering_ctrl_timeout_handler (unsigned long data) +static void _r8712_reordering_ctrl_timeout_handler (struct timer_list *t)  {  	struct recv_reorder_ctrl *preorder_ctrl = -			 (struct recv_reorder_ctrl *)data; +			 from_timer(preorder_ctrl, t, reordering_ctrl_timer);  	r8712_reordering_ctrl_timeout_handler(preorder_ctrl);  }  void r8712_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl)  { -	setup_timer(&preorder_ctrl->reordering_ctrl_timer, -		     _r8712_reordering_ctrl_timeout_handler, -		     (unsigned long)preorder_ctrl); +	timer_setup(&preorder_ctrl->reordering_ctrl_timer, +		    _r8712_reordering_ctrl_timeout_handler, 0);  } diff --git a/drivers/staging/rtl8712/rtl8712_led.c b/drivers/staging/rtl8712/rtl8712_led.c index da1d4a641dcd..455fba721135 100644 --- a/drivers/staging/rtl8712/rtl8712_led.c +++ b/drivers/staging/rtl8712/rtl8712_led.c @@ -74,7 +74,7 @@ enum _LED_STATE_871x {   *	Prototype of protected function.   *===========================================================================   */ -static void BlinkTimerCallback(unsigned long data); +static void BlinkTimerCallback(struct timer_list *t);  static void BlinkWorkItemCallback(struct work_struct *work);  /*=========================================================================== @@ -99,8 +99,7 @@ static void InitLed871x(struct _adapter *padapter, struct LED_871x *pLed,  	pLed->bLedBlinkInProgress = false;  	pLed->BlinkTimes = 0;  	pLed->BlinkingLedState = LED_UNKNOWN; -	setup_timer(&pLed->BlinkTimer, BlinkTimerCallback, -		    (unsigned long)pLed); +	timer_setup(&pLed->BlinkTimer, BlinkTimerCallback, 0);  	INIT_WORK(&pLed->BlinkWorkItem, BlinkWorkItemCallback);  } @@ -825,9 +824,9 @@ static void SwLedBlink6(struct LED_871x *pLed)   *		Callback function of LED BlinkTimer,   *		it just schedules to corresponding BlinkWorkItem.   */ -static void BlinkTimerCallback(unsigned long data) +static void BlinkTimerCallback(struct timer_list *t)  { -	struct LED_871x  *pLed = (struct LED_871x *)data; +	struct LED_871x  *pLed = from_timer(pLed, t, BlinkTimer);  	/* This fixed the crash problem on Fedora 12 when trying to do the  	 * insmod;ifconfig up;rmmod commands. diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c b/drivers/staging/unisys/visorbus/visorbus_main.c index b604d0cccef1..6cb6eb0673c6 100644 --- a/drivers/staging/unisys/visorbus/visorbus_main.c +++ b/drivers/staging/unisys/visorbus/visorbus_main.c @@ -493,9 +493,9 @@ static const struct file_operations bus_info_debugfs_fops = {  	.release = single_release,  }; -static void dev_periodic_work(unsigned long __opaque) +static void dev_periodic_work(struct timer_list *t)  { -	struct visor_device *dev = (struct visor_device *)__opaque; +	struct visor_device *dev = from_timer(dev, t, timer);  	struct visor_driver *drv = to_visor_driver(dev->device.driver);  	drv->channel_interrupt(dev); @@ -667,7 +667,7 @@ int create_visor_device(struct visor_device *dev)  	dev->device.release = visorbus_release_device;  	/* keep a reference just for us (now 2) */  	get_device(&dev->device); -	setup_timer(&dev->timer, dev_periodic_work, (unsigned long)dev); +	timer_setup(&dev->timer, dev_periodic_work, 0);  	/*  	 * bus_id must be a unique name with respect to this bus TYPE (NOT bus  	 * instance).  That's why we need to include the bus number within the diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c index 735d7e5fa86b..6d8239163ba5 100644 --- a/drivers/staging/unisys/visornic/visornic_main.c +++ b/drivers/staging/unisys/visornic/visornic_main.c @@ -1766,9 +1766,10 @@ static int visornic_poll(struct napi_struct *napi, int budget)   * Main function of the vnic_incoming thread. Periodically check the response   * queue and drain it if needed.   */ -static void poll_for_irq(unsigned long v) +static void poll_for_irq(struct timer_list *t)  { -	struct visornic_devdata *devdata = (struct visornic_devdata *)v; +	struct visornic_devdata *devdata = from_timer(devdata, t, +						      irq_poll_timer);  	if (!visorchannel_signalempty(  				   devdata->dev->visorchannel, @@ -1899,8 +1900,7 @@ static int visornic_probe(struct visor_device *dev)  	/* Let's start our threads to get responses */  	netif_napi_add(netdev, &devdata->napi, visornic_poll, NAPI_WEIGHT); -	setup_timer(&devdata->irq_poll_timer, poll_for_irq, -		    (unsigned long)devdata); +	timer_setup(&devdata->irq_poll_timer, poll_for_irq, 0);  	/* Note: This time has to start running before the while  	 * loop below because the napi routine is responsible for  	 * setting enab_dis_acked diff --git a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c index 8a275996d4e6..028da1dc1b81 100644 --- a/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c +++ b/drivers/staging/wilc1000/wilc_wfi_cfgoperations.c @@ -267,7 +267,7 @@ static void update_scan_time(void)  		last_scanned_shadow[i].time_scan = jiffies;  } -static void remove_network_from_shadow(unsigned long unused) +static void remove_network_from_shadow(struct timer_list *unused)  {  	unsigned long now = jiffies;  	int i, j; @@ -292,7 +292,7 @@ static void remove_network_from_shadow(unsigned long unused)  	}  } -static void clear_duringIP(unsigned long arg) +static void clear_duringIP(struct timer_list *unused)  {  	wilc_optaining_ip = false;  } @@ -2278,8 +2278,8 @@ int wilc_init_host_int(struct net_device *net)  	priv = wdev_priv(net->ieee80211_ptr);  	if (op_ifcs == 0) { -		setup_timer(&hAgingTimer, remove_network_from_shadow, 0); -		setup_timer(&wilc_during_ip_timer, clear_duringIP, 0); +		timer_setup(&hAgingTimer, remove_network_from_shadow, 0); +		timer_setup(&wilc_during_ip_timer, clear_duringIP, 0);  	}  	op_ifcs++; diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c index 9469695f5871..a8eaed2c211a 100644 --- a/drivers/target/target_core_user.c +++ b/drivers/target/target_core_user.c @@ -1044,9 +1044,9 @@ static int tcmu_check_expired_cmd(int id, void *p, void *data)  	return 0;  } -static void tcmu_device_timedout(unsigned long data) +static void tcmu_device_timedout(struct timer_list *t)  { -	struct tcmu_dev *udev = (struct tcmu_dev *)data; +	struct tcmu_dev *udev = from_timer(udev, t, timeout);  	unsigned long flags;  	spin_lock_irqsave(&udev->commands_lock, flags); @@ -1106,8 +1106,7 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)  	idr_init(&udev->commands);  	spin_lock_init(&udev->commands_lock); -	setup_timer(&udev->timeout, tcmu_device_timedout, -		(unsigned long)udev); +	timer_setup(&udev->timeout, tcmu_device_timedout, 0);  	init_waitqueue_head(&udev->nl_cmd_wq);  	spin_lock_init(&udev->nl_cmd_lock); diff --git a/drivers/tty/ipwireless/hardware.c b/drivers/tty/ipwireless/hardware.c index a6b8240af6cd..b0baa4ce10f9 100644 --- a/drivers/tty/ipwireless/hardware.c +++ b/drivers/tty/ipwireless/hardware.c @@ -33,7 +33,7 @@ static void handle_received_SETUP_packet(struct ipw_hardware *ipw,  					 unsigned int address,  					 const unsigned char *data, int len,  					 int is_last); -static void ipwireless_setup_timer(unsigned long data); +static void ipwireless_setup_timer(struct timer_list *t);  static void handle_received_CTRL_packet(struct ipw_hardware *hw,  		unsigned int channel_idx, const unsigned char *data, int len); @@ -1635,8 +1635,7 @@ struct ipw_hardware *ipwireless_hardware_create(void)  	spin_lock_init(&hw->lock);  	tasklet_init(&hw->tasklet, ipwireless_do_tasklet, (unsigned long) hw);  	INIT_WORK(&hw->work_rx, ipw_receive_data_work); -	setup_timer(&hw->setup_timer, ipwireless_setup_timer, -			(unsigned long) hw); +	timer_setup(&hw->setup_timer, ipwireless_setup_timer, 0);  	return hw;  } @@ -1670,12 +1669,12 @@ void ipwireless_init_hardware_v2_v3(struct ipw_hardware *hw)  	hw->init_loops = 0;  	printk(KERN_INFO IPWIRELESS_PCCARD_NAME  	       ": waiting for card to start up...\n"); -	ipwireless_setup_timer((unsigned long) hw); +	ipwireless_setup_timer(&hw->setup_timer);  } -static void ipwireless_setup_timer(unsigned long data) +static void ipwireless_setup_timer(struct timer_list *t)  { -	struct ipw_hardware *hw = (struct ipw_hardware *) data; +	struct ipw_hardware *hw = from_timer(hw, t, setup_timer);  	hw->init_loops++; diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 3a39eb685c69..5131bdc9e765 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -1310,9 +1310,9 @@ static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl)   *	gsm->pending_cmd will be NULL and we just let the timer expire.   */ -static void gsm_control_retransmit(unsigned long data) +static void gsm_control_retransmit(struct timer_list *t)  { -	struct gsm_mux *gsm = (struct gsm_mux *)data; +	struct gsm_mux *gsm = from_timer(gsm, t, t2_timer);  	struct gsm_control *ctrl;  	unsigned long flags;  	spin_lock_irqsave(&gsm->control_lock, flags); @@ -1453,9 +1453,9 @@ static void gsm_dlci_open(struct gsm_dlci *dlci)   *	end will get a DM response)   */ -static void gsm_dlci_t1(unsigned long data) +static void gsm_dlci_t1(struct timer_list *t)  { -	struct gsm_dlci *dlci = (struct gsm_dlci *)data; +	struct gsm_dlci *dlci = from_timer(dlci, t, t1);  	struct gsm_mux *gsm = dlci->gsm;  	switch (dlci->state) { @@ -1634,7 +1634,7 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)  	}  	skb_queue_head_init(&dlci->skb_list); -	setup_timer(&dlci->t1, gsm_dlci_t1, (unsigned long)dlci); +	timer_setup(&dlci->t1, gsm_dlci_t1, 0);  	tty_port_init(&dlci->port);  	dlci->port.ops = &gsm_port_ops;  	dlci->gsm = gsm; @@ -2088,7 +2088,7 @@ static int gsm_activate_mux(struct gsm_mux *gsm)  	struct gsm_dlci *dlci;  	int i = 0; -	setup_timer(&gsm->t2_timer, gsm_control_retransmit, (unsigned long)gsm); +	timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);  	init_waitqueue_head(&gsm->event);  	spin_lock_init(&gsm->control_lock);  	spin_lock_init(&gsm->tx_lock); diff --git a/drivers/tty/n_r3964.c b/drivers/tty/n_r3964.c index 9f246d4db3ca..30bb0900cd2f 100644 --- a/drivers/tty/n_r3964.c +++ b/drivers/tty/n_r3964.c @@ -115,7 +115,7 @@ static void retry_transmit(struct r3964_info *pInfo);  static void transmit_block(struct r3964_info *pInfo);  static void receive_char(struct r3964_info *pInfo, const unsigned char c);  static void receive_error(struct r3964_info *pInfo, const char flag); -static void on_timeout(unsigned long priv); +static void on_timeout(struct timer_list *t);  static int enable_signals(struct r3964_info *pInfo, struct pid *pid, int arg);  static int read_telegram(struct r3964_info *pInfo, struct pid *pid,  		unsigned char __user * buf); @@ -688,9 +688,9 @@ static void receive_error(struct r3964_info *pInfo, const char flag)  	}  } -static void on_timeout(unsigned long priv) +static void on_timeout(struct timer_list *t)  { -	struct r3964_info *pInfo = (void *)priv; +	struct r3964_info *pInfo = from_timer(pInfo, t, tmr);  	switch (pInfo->state) {  	case R3964_TX_REQUEST: @@ -993,7 +993,7 @@ static int r3964_open(struct tty_struct *tty)  	tty->disc_data = pInfo;  	tty->receive_room = 65536; -	setup_timer(&pInfo->tmr, on_timeout, (unsigned long)pInfo); +	timer_setup(&pInfo->tmr, on_timeout, 0);  	return 0;  } diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c index 1421804975e0..c9458a033e3c 100644 --- a/drivers/tty/serial/crisv10.c +++ b/drivers/tty/serial/crisv10.c @@ -2059,7 +2059,7 @@ static void flush_timeout_function(unsigned long data)  static struct timer_list flush_timer;  static void -timed_flush_handler(unsigned long ptr) +timed_flush_handler(struct timer_list *unused)  {  	struct e100_serial *info;  	int i; @@ -4137,7 +4137,7 @@ static int __init rs_init(void)  	/* Setup the timed flush handler system */  #if !defined(CONFIG_ETRAX_SERIAL_FAST_TIMER) -	setup_timer(&flush_timer, timed_flush_handler, 0); +	timer_setup(&flush_timer, timed_flush_handler, 0);  	mod_timer(&flush_timer, jiffies + 5);  #endif diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index c84e6f0db54e..1c4d3f387138 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -966,9 +966,9 @@ static void lpuart_dma_rx_complete(void *arg)  	lpuart_copy_rx_to_tty(sport);  } -static void lpuart_timer_func(unsigned long data) +static void lpuart_timer_func(struct timer_list *t)  { -	struct lpuart_port *sport = (struct lpuart_port *)data; +	struct lpuart_port *sport = from_timer(sport, t, lpuart_timer);  	lpuart_copy_rx_to_tty(sport);  } @@ -1263,8 +1263,7 @@ static void lpuart32_setup_watermark(struct lpuart_port *sport)  static void rx_dma_timer_init(struct lpuart_port *sport)  { -		setup_timer(&sport->lpuart_timer, lpuart_timer_func, -				(unsigned long)sport); +		timer_setup(&sport->lpuart_timer, lpuart_timer_func, 0);  		sport->lpuart_timer.expires = jiffies + sport->dma_rx_timeout;  		add_timer(&sport->lpuart_timer);  } diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c index 473f4f81d690..ffefd218761e 100644 --- a/drivers/tty/serial/ifx6x60.c +++ b/drivers/tty/serial/ifx6x60.c @@ -263,9 +263,9 @@ static void mrdy_assert(struct ifx_spi_device *ifx_dev)   *	The SPI has timed out: hang up the tty. Users will then see a hangup   *	and error events.   */ -static void ifx_spi_timeout(unsigned long arg) +static void ifx_spi_timeout(struct timer_list *t)  { -	struct ifx_spi_device *ifx_dev = (struct ifx_spi_device *)arg; +	struct ifx_spi_device *ifx_dev = from_timer(ifx_dev, t, spi_timer);  	dev_warn(&ifx_dev->spi_dev->dev, "*** SPI Timeout ***");  	tty_port_tty_hangup(&ifx_dev->tty_port, false); @@ -1016,8 +1016,7 @@ static int ifx_spi_spi_probe(struct spi_device *spi)  	spin_lock_init(&ifx_dev->write_lock);  	spin_lock_init(&ifx_dev->power_lock);  	ifx_dev->power_status = 0; -	setup_timer(&ifx_dev->spi_timer, ifx_spi_timeout, -		    (unsigned long)ifx_dev); +	timer_setup(&ifx_dev->spi_timer, ifx_spi_timeout, 0);  	ifx_dev->modem = pl_data->modem_type;  	ifx_dev->use_dma = pl_data->use_dma;  	ifx_dev->max_hz = pl_data->max_hz; diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index a67a606c38eb..e4b3d9123a03 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -906,9 +906,9 @@ static void imx_break_ctl(struct uart_port *port, int break_state)   * This is our per-port timeout handler, for checking the   * modem status signals.   */ -static void imx_timeout(unsigned long data) +static void imx_timeout(struct timer_list *t)  { -	struct imx_port *sport = (struct imx_port *)data; +	struct imx_port *sport = from_timer(sport, t, timer);  	unsigned long flags;  	if (sport->port.state) { @@ -2082,7 +2082,7 @@ static int serial_imx_probe(struct platform_device *pdev)  	sport->port.rs485_config = imx_rs485_config;  	sport->port.rs485.flags |= SER_RS485_RTS_ON_SEND;  	sport->port.flags = UPF_BOOT_AUTOCONF; -	setup_timer(&sport->timer, imx_timeout, (unsigned long)sport); +	timer_setup(&sport->timer, imx_timeout, 0);  	sport->gpios = mctrl_gpio_init(&sport->port, 0);  	if (IS_ERR(sport->gpios)) diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c index ed2b03058627..4029272891f9 100644 --- a/drivers/tty/serial/kgdb_nmi.c +++ b/drivers/tty/serial/kgdb_nmi.c @@ -188,9 +188,9 @@ bool kgdb_nmi_poll_knock(void)   * The tasklet is cheap, it does not cause wakeups when reschedules itself,   * instead it waits for the next tick.   */ -static void kgdb_nmi_tty_receiver(unsigned long data) +static void kgdb_nmi_tty_receiver(struct timer_list *t)  { -	struct kgdb_nmi_tty_priv *priv = (void *)data; +	struct kgdb_nmi_tty_priv *priv = from_timer(priv, t, timer);  	char ch;  	priv->timer.expires = jiffies + (HZ/100); @@ -241,7 +241,7 @@ static int kgdb_nmi_tty_install(struct tty_driver *drv, struct tty_struct *tty)  		return -ENOMEM;  	INIT_KFIFO(priv->fifo); -	setup_timer(&priv->timer, kgdb_nmi_tty_receiver, (unsigned long)priv); +	timer_setup(&priv->timer, kgdb_nmi_tty_receiver, 0);  	tty_port_init(&priv->port);  	priv->port.ops = &kgdb_nmi_tty_port_ops;  	tty->driver_data = priv; diff --git a/drivers/tty/serial/max3100.c b/drivers/tty/serial/max3100.c index 27d6049eb6a9..371569a0fd00 100644 --- a/drivers/tty/serial/max3100.c +++ b/drivers/tty/serial/max3100.c @@ -178,9 +178,9 @@ static void max3100_dowork(struct max3100_port *s)  		queue_work(s->workqueue, &s->work);  } -static void max3100_timeout(unsigned long data) +static void max3100_timeout(struct timer_list *t)  { -	struct max3100_port *s = (struct max3100_port *)data; +	struct max3100_port *s = from_timer(s, t, timer);  	if (s->port.state) {  		max3100_dowork(s); @@ -780,8 +780,7 @@ static int max3100_probe(struct spi_device *spi)  		max3100s[i]->poll_time = 1;  	max3100s[i]->max3100_hw_suspend = pdata->max3100_hw_suspend;  	max3100s[i]->minor = i; -	setup_timer(&max3100s[i]->timer, max3100_timeout, -		    (unsigned long)max3100s[i]); +	timer_setup(&max3100s[i]->timer, max3100_timeout, 0);  	dev_dbg(&spi->dev, "%s: adding port %d\n", __func__, i);  	max3100s[i]->port.irq = max3100s[i]->irq; diff --git a/drivers/tty/serial/mux.c b/drivers/tty/serial/mux.c index 3b74369c262f..00ce31e8d19a 100644 --- a/drivers/tty/serial/mux.c +++ b/drivers/tty/serial/mux.c @@ -371,7 +371,7 @@ static int mux_verify_port(struct uart_port *port, struct serial_struct *ser)   *   * This function periodically polls the Serial MUX to check for new data.   */ -static void mux_poll(unsigned long unused) +static void mux_poll(struct timer_list *unused)  {    	int i; @@ -572,7 +572,7 @@ static int __init mux_init(void)  	if(port_cnt > 0) {  		/* Start the Mux timer */ -		setup_timer(&mux_timer, mux_poll, 0UL); +		timer_setup(&mux_timer, mux_poll, 0);  		mod_timer(&mux_timer, jiffies + MUX_POLL_DELAY);  #ifdef CONFIG_SERIAL_MUX_CONSOLE diff --git a/drivers/tty/serial/pnx8xxx_uart.c b/drivers/tty/serial/pnx8xxx_uart.c index f8812389b8a8..223a9499104e 100644 --- a/drivers/tty/serial/pnx8xxx_uart.c +++ b/drivers/tty/serial/pnx8xxx_uart.c @@ -103,9 +103,9 @@ static void pnx8xxx_mctrl_check(struct pnx8xxx_port *sport)   * This is our per-port timeout handler, for checking the   * modem status signals.   */ -static void pnx8xxx_timeout(unsigned long data) +static void pnx8xxx_timeout(struct timer_list *t)  { -	struct pnx8xxx_port *sport = (struct pnx8xxx_port *)data; +	struct pnx8xxx_port *sport = from_timer(sport, t, timer);  	unsigned long flags;  	if (sport->port.state) { @@ -662,8 +662,7 @@ static void __init pnx8xxx_init_ports(void)  	first = 0;  	for (i = 0; i < NR_PORTS; i++) { -		setup_timer(&pnx8xxx_ports[i].timer, pnx8xxx_timeout, -			    (unsigned long)&pnx8xxx_ports[i]); +		timer_setup(&pnx8xxx_ports[i].timer, pnx8xxx_timeout, 0);  		pnx8xxx_ports[i].port.ops = &pnx8xxx_pops;  	}  } diff --git a/drivers/tty/serial/sa1100.c b/drivers/tty/serial/sa1100.c index 4e3f169b30cf..a399772be3fc 100644 --- a/drivers/tty/serial/sa1100.c +++ b/drivers/tty/serial/sa1100.c @@ -110,9 +110,9 @@ static void sa1100_mctrl_check(struct sa1100_port *sport)   * This is our per-port timeout handler, for checking the   * modem status signals.   */ -static void sa1100_timeout(unsigned long data) +static void sa1100_timeout(struct timer_list *t)  { -	struct sa1100_port *sport = (struct sa1100_port *)data; +	struct sa1100_port *sport = from_timer(sport, t, timer);  	unsigned long flags;  	if (sport->port.state) { @@ -627,8 +627,7 @@ static void __init sa1100_init_ports(void)  		sa1100_ports[i].port.fifosize  = 8;  		sa1100_ports[i].port.line      = i;  		sa1100_ports[i].port.iotype    = UPIO_MEM; -		setup_timer(&sa1100_ports[i].timer, sa1100_timeout, -			    (unsigned long)&sa1100_ports[i]); +		timer_setup(&sa1100_ports[i].timer, sa1100_timeout, 0);  	}  	/* diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index 31fcc7072a90..d9f399c4e90c 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1058,9 +1058,9 @@ static int scif_rtrg_enabled(struct uart_port *port)  			(SCFCR_RTRG0 | SCFCR_RTRG1)) != 0;  } -static void rx_fifo_timer_fn(unsigned long arg) +static void rx_fifo_timer_fn(struct timer_list *t)  { -	struct sci_port *s = (struct sci_port *)arg; +	struct sci_port *s = from_timer(s, t, rx_fifo_timer);  	struct uart_port *port = &s->port;  	dev_dbg(port->dev, "Rx timed out\n"); @@ -1138,8 +1138,7 @@ static ssize_t rx_fifo_timeout_store(struct device *dev,  		sci->rx_fifo_timeout = r;  		scif_set_rtrg(port, 1);  		if (r > 0) -			setup_timer(&sci->rx_fifo_timer, rx_fifo_timer_fn, -				    (unsigned long)sci); +			timer_setup(&sci->rx_fifo_timer, rx_fifo_timer_fn, 0);  	}  	return count; @@ -1392,9 +1391,9 @@ static void work_fn_tx(struct work_struct *work)  	dma_async_issue_pending(chan);  } -static void rx_timer_fn(unsigned long arg) +static void rx_timer_fn(struct timer_list *t)  { -	struct sci_port *s = (struct sci_port *)arg; +	struct sci_port *s = from_timer(s, t, rx_timer);  	struct dma_chan *chan = s->chan_rx;  	struct uart_port *port = &s->port;  	struct dma_tx_state state; @@ -1572,7 +1571,7 @@ static void sci_request_dma(struct uart_port *port)  			dma += s->buf_len_rx;  		} -		setup_timer(&s->rx_timer, rx_timer_fn, (unsigned long)s); +		timer_setup(&s->rx_timer, rx_timer_fn, 0);  		if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)  			sci_submit_rx(s); @@ -2238,8 +2237,7 @@ static void sci_reset(struct uart_port *port)  	if (s->rx_trigger > 1) {  		if (s->rx_fifo_timeout) {  			scif_set_rtrg(port, 1); -			setup_timer(&s->rx_fifo_timer, rx_fifo_timer_fn, -				    (unsigned long)s); +			timer_setup(&s->rx_fifo_timer, rx_fifo_timer_fn, 0);  		} else {  			if (port->type == PORT_SCIFA ||  			    port->type == PORT_SCIFB) diff --git a/drivers/tty/serial/sn_console.c b/drivers/tty/serial/sn_console.c index ed78542c4c37..42b9aded4eb1 100644 --- a/drivers/tty/serial/sn_console.c +++ b/drivers/tty/serial/sn_console.c @@ -612,9 +612,9 @@ static irqreturn_t sn_sal_interrupt(int irq, void *dev_id)   * Obviously not used in interrupt mode   *   */ -static void sn_sal_timer_poll(unsigned long data) +static void sn_sal_timer_poll(struct timer_list *t)  { -	struct sn_cons_port *port = (struct sn_cons_port *)data; +	struct sn_cons_port *port = from_timer(port, t, sc_timer);  	unsigned long flags;  	if (!port) @@ -668,7 +668,7 @@ static void __init sn_sal_switch_to_asynch(struct sn_cons_port *port)  	 * timer to poll for input and push data from the console  	 * buffer.  	 */ -	setup_timer(&port->sc_timer, sn_sal_timer_poll, (unsigned long)port); +	timer_setup(&port->sc_timer, sn_sal_timer_poll, 0);  	if (IS_RUNNING_ON_SIMULATOR())  		port->sc_interrupt_timeout = 6; diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c index f2c34d656144..3c4ad71f261d 100644 --- a/drivers/tty/synclink.c +++ b/drivers/tty/synclink.c @@ -700,7 +700,7 @@ static void usc_enable_async_clock( struct mgsl_struct *info, u32 DataRate );  static void usc_loopback_frame( struct mgsl_struct *info ); -static void mgsl_tx_timeout(unsigned long context); +static void mgsl_tx_timeout(struct timer_list *t);  static void usc_loopmode_cancel_transmit( struct mgsl_struct * info ); @@ -1768,7 +1768,7 @@ static int startup(struct mgsl_struct * info)  	memset(&info->icount, 0, sizeof(info->icount)); -	setup_timer(&info->tx_timer, mgsl_tx_timeout, (unsigned long)info); +	timer_setup(&info->tx_timer, mgsl_tx_timeout, 0);  	/* Allocate and claim adapter resources */  	retval = mgsl_claim_resources(info); @@ -7517,9 +7517,9 @@ static void mgsl_trace_block(struct mgsl_struct *info,const char* data, int coun   * Arguments:	context		pointer to device instance data   * Return Value:	None   */ -static void mgsl_tx_timeout(unsigned long context) +static void mgsl_tx_timeout(struct timer_list *t)  { -	struct mgsl_struct *info = (struct mgsl_struct*)context; +	struct mgsl_struct *info = from_timer(info, t, tx_timer);  	unsigned long flags;  	if ( debug_level >= DEBUG_LEVEL_INFO ) diff --git a/drivers/tty/synclink_gt.c b/drivers/tty/synclink_gt.c index 06a03731bba7..255c49687877 100644 --- a/drivers/tty/synclink_gt.c +++ b/drivers/tty/synclink_gt.c @@ -493,8 +493,8 @@ static void free_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count)  static int  alloc_tmp_rbuf(struct slgt_info *info);  static void free_tmp_rbuf(struct slgt_info *info); -static void tx_timeout(unsigned long context); -static void rx_timeout(unsigned long context); +static void tx_timeout(struct timer_list *t); +static void rx_timeout(struct timer_list *t);  /*   * ioctl handlers @@ -3597,8 +3597,8 @@ static struct slgt_info *alloc_dev(int adapter_num, int port_num, struct pci_dev  		info->adapter_num = adapter_num;  		info->port_num = port_num; -		setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info); -		setup_timer(&info->rx_timer, rx_timeout, (unsigned long)info); +		timer_setup(&info->tx_timer, tx_timeout, 0); +		timer_setup(&info->rx_timer, rx_timeout, 0);  		/* Copy configuration info to device instance data */  		info->pdev = pdev; @@ -5112,9 +5112,9 @@ static int adapter_test(struct slgt_info *info)  /*   * transmit timeout handler   */ -static void tx_timeout(unsigned long context) +static void tx_timeout(struct timer_list *t)  { -	struct slgt_info *info = (struct slgt_info*)context; +	struct slgt_info *info = from_timer(info, t, tx_timer);  	unsigned long flags;  	DBGINFO(("%s tx_timeout\n", info->device_name)); @@ -5136,9 +5136,9 @@ static void tx_timeout(unsigned long context)  /*   * receive buffer polling timer   */ -static void rx_timeout(unsigned long context) +static void rx_timeout(struct timer_list *t)  { -	struct slgt_info *info = (struct slgt_info*)context; +	struct slgt_info *info = from_timer(info, t, rx_timer);  	unsigned long flags;  	DBGINFO(("%s rx_timeout\n", info->device_name)); diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c index d45f234e1914..75f11ce1f0a1 100644 --- a/drivers/tty/synclinkmp.c +++ b/drivers/tty/synclinkmp.c @@ -615,8 +615,8 @@ static void free_tmp_rx_buf(SLMP_INFO *info);  static void load_pci_memory(SLMP_INFO *info, char* dest, const char* src, unsigned short count);  static void trace_block(SLMP_INFO *info, const char* data, int count, int xmit); -static void tx_timeout(unsigned long context); -static void status_timeout(unsigned long context); +static void tx_timeout(struct timer_list *t); +static void status_timeout(struct timer_list *t);  static unsigned char read_reg(SLMP_INFO *info, unsigned char addr);  static void write_reg(SLMP_INFO *info, unsigned char addr, unsigned char val); @@ -3782,9 +3782,8 @@ static SLMP_INFO *alloc_dev(int adapter_num, int port_num, struct pci_dev *pdev)  		info->bus_type = MGSL_BUS_TYPE_PCI;  		info->irq_flags = IRQF_SHARED; -		setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info); -		setup_timer(&info->status_timer, status_timeout, -				(unsigned long)info); +		timer_setup(&info->tx_timer, tx_timeout, 0); +		timer_setup(&info->status_timer, status_timeout, 0);  		/* Store the PCI9050 misc control register value because a flaw  		 * in the PCI9050 prevents LCR registers from being read if @@ -5468,9 +5467,9 @@ static void trace_block(SLMP_INFO *info,const char* data, int count, int xmit)  /* called when HDLC frame times out   * update stats and do tx completion processing   */ -static void tx_timeout(unsigned long context) +static void tx_timeout(struct timer_list *t)  { -	SLMP_INFO *info = (SLMP_INFO*)context; +	SLMP_INFO *info = from_timer(info, t, tx_timer);  	unsigned long flags;  	if ( debug_level >= DEBUG_LEVEL_INFO ) @@ -5495,10 +5494,10 @@ static void tx_timeout(unsigned long context)  /* called to periodically check the DSR/RI modem signal input status   */ -static void status_timeout(unsigned long context) +static void status_timeout(struct timer_list *t)  {  	u16 status = 0; -	SLMP_INFO *info = (SLMP_INFO*)context; +	SLMP_INFO *info = from_timer(info, t, status_timer);  	unsigned long flags;  	unsigned char delta; diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 19b5c4afeef2..fc32391a34d5 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -788,9 +788,11 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)  EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);  /* timer callback */ -static void rh_timer_func (unsigned long _hcd) +static void rh_timer_func (struct timer_list *t)  { -	usb_hcd_poll_rh_status((struct usb_hcd *) _hcd); +	struct usb_hcd *_hcd = from_timer(_hcd, t, rh_timer); + +	usb_hcd_poll_rh_status(_hcd);  }  /*-------------------------------------------------------------------------*/ @@ -2545,7 +2547,7 @@ struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,  	hcd->self.bus_name = bus_name;  	hcd->self.uses_dma = (sysdev->dma_mask != NULL); -	setup_timer(&hcd->rh_timer, rh_timer_func, (unsigned long)hcd); +	timer_setup(&hcd->rh_timer, rh_timer_func, 0);  #ifdef CONFIG_PM  	INIT_WORK(&hcd->wakeup_work, hcd_resume_work);  #endif diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index 69eb40cd1b47..7b6eb0ad513b 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -3314,9 +3314,9 @@ host:  	}  } -static void dwc2_wakeup_detected(unsigned long data) +static void dwc2_wakeup_detected(struct timer_list *t)  { -	struct dwc2_hsotg *hsotg = (struct dwc2_hsotg *)data; +	struct dwc2_hsotg *hsotg = from_timer(hsotg, t, wkp_timer);  	u32 hprt0;  	dev_dbg(hsotg->dev, "%s()\n", __func__); @@ -5155,8 +5155,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)  	}  	INIT_WORK(&hsotg->wf_otg, dwc2_conn_id_status_change); -	setup_timer(&hsotg->wkp_timer, dwc2_wakeup_detected, -		    (unsigned long)hsotg); +	timer_setup(&hsotg->wkp_timer, dwc2_wakeup_detected, 0);  	/* Initialize the non-periodic schedule */  	INIT_LIST_HEAD(&hsotg->non_periodic_sched_inactive); diff --git a/drivers/usb/dwc2/hcd_queue.c b/drivers/usb/dwc2/hcd_queue.c index f472de238ac2..fcd1676c7f0b 100644 --- a/drivers/usb/dwc2/hcd_queue.c +++ b/drivers/usb/dwc2/hcd_queue.c @@ -1275,9 +1275,9 @@ static void dwc2_do_unreserve(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)   *   * @work: Pointer to a qh unreserve_work.   */ -static void dwc2_unreserve_timer_fn(unsigned long data) +static void dwc2_unreserve_timer_fn(struct timer_list *t)  { -	struct dwc2_qh *qh = (struct dwc2_qh *)data; +	struct dwc2_qh *qh = from_timer(qh, t, unreserve_timer);  	struct dwc2_hsotg *hsotg = qh->hsotg;  	unsigned long flags; @@ -1467,8 +1467,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,  	/* Initialize QH */  	qh->hsotg = hsotg; -	setup_timer(&qh->unreserve_timer, dwc2_unreserve_timer_fn, -		    (unsigned long)qh); +	timer_setup(&qh->unreserve_timer, dwc2_unreserve_timer_fn, 0);  	qh->ep_type = ep_type;  	qh->ep_is_in = ep_is_in; diff --git a/drivers/usb/gadget/udc/at91_udc.c b/drivers/usb/gadget/udc/at91_udc.c index bfe278294e88..ad743a8493be 100644 --- a/drivers/usb/gadget/udc/at91_udc.c +++ b/drivers/usb/gadget/udc/at91_udc.c @@ -1550,9 +1550,9 @@ static void at91_vbus_timer_work(struct work_struct *work)  		mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT);  } -static void at91_vbus_timer(unsigned long data) +static void at91_vbus_timer(struct timer_list *t)  { -	struct at91_udc *udc = (struct at91_udc *)data; +	struct at91_udc *udc = from_timer(udc, t, vbus_timer);  	/*  	 * If we are polling vbus it is likely that the gpio is on an @@ -1918,8 +1918,7 @@ static int at91udc_probe(struct platform_device *pdev)  		if (udc->board.vbus_polled) {  			INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work); -			setup_timer(&udc->vbus_timer, at91_vbus_timer, -				    (unsigned long)udc); +			timer_setup(&udc->vbus_timer, at91_vbus_timer, 0);  			mod_timer(&udc->vbus_timer,  				  jiffies + VBUS_POLL_TIMEOUT);  		} else { diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c index 4f1b1809472c..d0128f92ec5a 100644 --- a/drivers/usb/gadget/udc/dummy_hcd.c +++ b/drivers/usb/gadget/udc/dummy_hcd.c @@ -1771,9 +1771,9 @@ static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,  /* drive both sides of the transfers; looks like irq handlers to   * both drivers except the callbacks aren't in_irq().   */ -static void dummy_timer(unsigned long _dum_hcd) +static void dummy_timer(struct timer_list *t)  { -	struct dummy_hcd	*dum_hcd = (struct dummy_hcd *) _dum_hcd; +	struct dummy_hcd	*dum_hcd = from_timer(dum_hcd, t, timer);  	struct dummy		*dum = dum_hcd->dum;  	struct urbp		*urbp, *tmp;  	unsigned long		flags; @@ -2445,7 +2445,7 @@ static DEVICE_ATTR_RO(urbs);  static int dummy_start_ss(struct dummy_hcd *dum_hcd)  { -	setup_timer(&dum_hcd->timer, dummy_timer, (unsigned long)dum_hcd); +	timer_setup(&dum_hcd->timer, dummy_timer, 0);  	dum_hcd->rh_state = DUMMY_RH_RUNNING;  	dum_hcd->stream_en_ep = 0;  	INIT_LIST_HEAD(&dum_hcd->urbp_list); @@ -2474,7 +2474,7 @@ static int dummy_start(struct usb_hcd *hcd)  		return dummy_start_ss(dum_hcd);  	spin_lock_init(&dum_hcd->dum->lock); -	setup_timer(&dum_hcd->timer, dummy_timer, (unsigned long)dum_hcd); +	timer_setup(&dum_hcd->timer, dummy_timer, 0);  	dum_hcd->rh_state = DUMMY_RH_RUNNING;  	INIT_LIST_HEAD(&dum_hcd->urbp_list); diff --git a/drivers/usb/gadget/udc/m66592-udc.c b/drivers/usb/gadget/udc/m66592-udc.c index f19e6282a688..a8288df6aadf 100644 --- a/drivers/usb/gadget/udc/m66592-udc.c +++ b/drivers/usb/gadget/udc/m66592-udc.c @@ -1259,9 +1259,9 @@ static irqreturn_t m66592_irq(int irq, void *_m66592)  	return IRQ_HANDLED;  } -static void m66592_timer(unsigned long _m66592) +static void m66592_timer(struct timer_list *t)  { -	struct m66592 *m66592 = (struct m66592 *)_m66592; +	struct m66592 *m66592 = from_timer(m66592, t, timer);  	unsigned long flags;  	u16 tmp; @@ -1589,7 +1589,7 @@ static int m66592_probe(struct platform_device *pdev)  	m66592->gadget.max_speed = USB_SPEED_HIGH;  	m66592->gadget.name = udc_name; -	setup_timer(&m66592->timer, m66592_timer, (unsigned long)m66592); +	timer_setup(&m66592->timer, m66592_timer, 0);  	m66592->reg = reg;  	ret = request_irq(ires->start, m66592_irq, IRQF_SHARED, diff --git a/drivers/usb/gadget/udc/omap_udc.c b/drivers/usb/gadget/udc/omap_udc.c index fb8c4bff584c..dc35a54bad90 100644 --- a/drivers/usb/gadget/udc/omap_udc.c +++ b/drivers/usb/gadget/udc/omap_udc.c @@ -1854,9 +1854,9 @@ static irqreturn_t omap_udc_irq(int irq, void *_udc)  #define PIO_OUT_TIMEOUT	(jiffies + HZ/3)  #define HALF_FULL(f)	(!((f)&(UDC_NON_ISO_FIFO_FULL|UDC_NON_ISO_FIFO_EMPTY))) -static void pio_out_timer(unsigned long _ep) +static void pio_out_timer(struct timer_list *t)  { -	struct omap_ep	*ep = (void *) _ep; +	struct omap_ep	*ep = from_timer(ep, t, timer);  	unsigned long	flags;  	u16		stat_flg; @@ -2542,7 +2542,7 @@ omap_ep_setup(char *name, u8 addr, u8 type,  		}  		if (dbuf && addr)  			epn_rxtx |= UDC_EPN_RX_DB; -		setup_timer(&ep->timer, pio_out_timer, (unsigned long)ep); +		timer_setup(&ep->timer, pio_out_timer, 0);  	}  	if (addr)  		epn_rxtx |= UDC_EPN_RX_VALID; diff --git a/drivers/usb/gadget/udc/pxa25x_udc.c b/drivers/usb/gadget/udc/pxa25x_udc.c index 8f135d9fa245..0e3f5faa000e 100644 --- a/drivers/usb/gadget/udc/pxa25x_udc.c +++ b/drivers/usb/gadget/udc/pxa25x_udc.c @@ -1624,9 +1624,9 @@ static inline void clear_ep_state (struct pxa25x_udc *dev)  		nuke(&dev->ep[i], -ECONNABORTED);  } -static void udc_watchdog(unsigned long _dev) +static void udc_watchdog(struct timer_list *t)  { -	struct pxa25x_udc	*dev = (void *)_dev; +	struct pxa25x_udc	*dev = from_timer(dev, t, timer);  	local_irq_disable();  	if (dev->ep0state == EP0_STALL @@ -2413,7 +2413,7 @@ static int pxa25x_udc_probe(struct platform_device *pdev)  		gpio_direction_output(dev->mach->gpio_pullup, 0);  	} -	setup_timer(&dev->timer, udc_watchdog, (unsigned long)dev); +	timer_setup(&dev->timer, udc_watchdog, 0);  	the_controller = dev;  	platform_set_drvdata(pdev, dev); diff --git a/drivers/usb/gadget/udc/r8a66597-udc.c b/drivers/usb/gadget/udc/r8a66597-udc.c index 143122ed3c66..a3ecce62662b 100644 --- a/drivers/usb/gadget/udc/r8a66597-udc.c +++ b/drivers/usb/gadget/udc/r8a66597-udc.c @@ -1514,9 +1514,9 @@ static irqreturn_t r8a66597_irq(int irq, void *_r8a66597)  	return IRQ_HANDLED;  } -static void r8a66597_timer(unsigned long _r8a66597) +static void r8a66597_timer(struct timer_list *t)  { -	struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597; +	struct r8a66597 *r8a66597 = from_timer(r8a66597, t, timer);  	unsigned long flags;  	u16 tmp; @@ -1874,7 +1874,7 @@ static int r8a66597_probe(struct platform_device *pdev)  	r8a66597->gadget.max_speed = USB_SPEED_HIGH;  	r8a66597->gadget.name = udc_name; -	setup_timer(&r8a66597->timer, r8a66597_timer, (unsigned long)r8a66597); +	timer_setup(&r8a66597->timer, r8a66597_timer, 0);  	r8a66597->reg = reg;  	if (r8a66597->pdata->on_chip) { diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 10887e09e9bc..ee9676349333 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -80,7 +80,7 @@ static const char	hcd_name [] = "ohci_hcd";  static void ohci_dump(struct ohci_hcd *ohci);  static void ohci_stop(struct usb_hcd *hcd); -static void io_watchdog_func(unsigned long _ohci); +static void io_watchdog_func(struct timer_list *t);  #include "ohci-hub.c"  #include "ohci-dbg.c" @@ -500,8 +500,7 @@ static int ohci_init (struct ohci_hcd *ohci)  	if (ohci->hcca)  		return 0; -	setup_timer(&ohci->io_watchdog, io_watchdog_func, -			(unsigned long) ohci); +	timer_setup(&ohci->io_watchdog, io_watchdog_func, 0);  	ohci->hcca = dma_alloc_coherent (hcd->self.controller,  			sizeof(*ohci->hcca), &ohci->hcca_dma, GFP_KERNEL); @@ -723,9 +722,9 @@ static int ohci_start(struct usb_hcd *hcd)   * the unlink list.  As a result, URBs could never be dequeued and   * endpoints could never be released.   */ -static void io_watchdog_func(unsigned long _ohci) +static void io_watchdog_func(struct timer_list *t)  { -	struct ohci_hcd	*ohci = (struct ohci_hcd *) _ohci; +	struct ohci_hcd	*ohci = from_timer(ohci, t, io_watchdog);  	bool		takeback_all_pending = false;  	u32		status;  	u32		head; diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c index 0bf7759aae78..c5e6e8d0b5ef 100644 --- a/drivers/usb/host/oxu210hp-hcd.c +++ b/drivers/usb/host/oxu210hp-hcd.c @@ -2539,9 +2539,9 @@ static irqreturn_t oxu_irq(struct usb_hcd *hcd)  	return ret;  } -static void oxu_watchdog(unsigned long param) +static void oxu_watchdog(struct timer_list *t)  { -	struct oxu_hcd	*oxu = (struct oxu_hcd *) param; +	struct oxu_hcd	*oxu = from_timer(oxu, t, watchdog);  	unsigned long flags;  	spin_lock_irqsave(&oxu->lock, flags); @@ -2577,7 +2577,7 @@ static int oxu_hcd_init(struct usb_hcd *hcd)  	spin_lock_init(&oxu->lock); -	setup_timer(&oxu->watchdog, oxu_watchdog, (unsigned long)oxu); +	timer_setup(&oxu->watchdog, oxu_watchdog, 0);  	/*  	 * hw default: 1K periodic list heads, one per frame. diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c index f3d9ba420a97..984892dd72f5 100644 --- a/drivers/usb/host/r8a66597-hcd.c +++ b/drivers/usb/host/r8a66597-hcd.c @@ -1798,9 +1798,9 @@ static void r8a66597_td_timer(struct timer_list *t)  	spin_unlock_irqrestore(&r8a66597->lock, flags);  } -static void r8a66597_timer(unsigned long _r8a66597) +static void r8a66597_timer(struct timer_list *t)  { -	struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597; +	struct r8a66597 *r8a66597 = from_timer(r8a66597, t, rh_timer);  	unsigned long flags;  	int port; @@ -2472,8 +2472,7 @@ static int r8a66597_probe(struct platform_device *pdev)  		r8a66597->max_root_hub = 2;  	spin_lock_init(&r8a66597->lock); -	setup_timer(&r8a66597->rh_timer, r8a66597_timer, -		    (unsigned long)r8a66597); +	timer_setup(&r8a66597->rh_timer, r8a66597_timer, 0);  	r8a66597->reg = reg;  	/* make sure no interrupts are pending */ diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c index 601fb00603cc..fa88a903fa2e 100644 --- a/drivers/usb/host/sl811-hcd.c +++ b/drivers/usb/host/sl811-hcd.c @@ -1119,9 +1119,9 @@ sl811h_hub_descriptor (  }  static void -sl811h_timer(unsigned long _sl811) +sl811h_timer(struct timer_list *t)  { -	struct sl811 	*sl811 = (void *) _sl811; +	struct sl811 	*sl811 = from_timer(sl811, t, timer);  	unsigned long	flags;  	u8		irqstat;  	u8		signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE; @@ -1692,7 +1692,7 @@ sl811h_probe(struct platform_device *dev)  	spin_lock_init(&sl811->lock);  	INIT_LIST_HEAD(&sl811->async);  	sl811->board = dev_get_platdata(&dev->dev); -	setup_timer(&sl811->timer, sl811h_timer, (unsigned long)sl811); +	timer_setup(&sl811->timer, sl811h_timer, 0);  	sl811->addr_reg = addr_reg;  	sl811->data_reg = data_reg; diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c index babeefd84ffd..f5c90217777a 100644 --- a/drivers/usb/host/uhci-hcd.c +++ b/drivers/usb/host/uhci-hcd.c @@ -585,8 +585,7 @@ static int uhci_start(struct usb_hcd *hcd)  		hcd->self.sg_tablesize = ~0;  	spin_lock_init(&uhci->lock); -	setup_timer(&uhci->fsbr_timer, uhci_fsbr_timeout, -			(unsigned long) uhci); +	timer_setup(&uhci->fsbr_timer, uhci_fsbr_timeout, 0);  	INIT_LIST_HEAD(&uhci->idle_qh_list);  	init_waitqueue_head(&uhci->waitqh); diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c index 49d4edc03cc2..d40438238938 100644 --- a/drivers/usb/host/uhci-q.c +++ b/drivers/usb/host/uhci-q.c @@ -90,9 +90,9 @@ static void uhci_urbp_wants_fsbr(struct uhci_hcd *uhci, struct urb_priv *urbp)  	}  } -static void uhci_fsbr_timeout(unsigned long _uhci) +static void uhci_fsbr_timeout(struct timer_list *t)  { -	struct uhci_hcd *uhci = (struct uhci_hcd *) _uhci; +	struct uhci_hcd *uhci = from_timer(uhci, t, fsbr_timer);  	unsigned long flags;  	spin_lock_irqsave(&uhci->lock, flags); diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 327ba8b8a98b..2424d3020ca3 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -395,14 +395,14 @@ static inline void xhci_msix_sync_irqs(struct xhci_hcd *xhci)  #endif -static void compliance_mode_recovery(unsigned long arg) +static void compliance_mode_recovery(struct timer_list *t)  {  	struct xhci_hcd *xhci;  	struct usb_hcd *hcd;  	u32 temp;  	int i; -	xhci = (struct xhci_hcd *)arg; +	xhci = from_timer(xhci, t, comp_mode_recovery_timer);  	for (i = 0; i < xhci->num_usb3_ports; i++) {  		temp = readl(xhci->usb3_ports[i]); @@ -443,8 +443,8 @@ static void compliance_mode_recovery(unsigned long arg)  static void compliance_mode_recovery_timer_init(struct xhci_hcd *xhci)  {  	xhci->port_status_u0 = 0; -	setup_timer(&xhci->comp_mode_recovery_timer, -		    compliance_mode_recovery, (unsigned long)xhci); +	timer_setup(&xhci->comp_mode_recovery_timer, compliance_mode_recovery, +		    0);  	xhci->comp_mode_recovery_timer.expires = jiffies +  			msecs_to_jiffies(COMP_MODE_RCVRY_MSECS); diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index a859c2d33c29..fdceb46d9fc6 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c @@ -555,9 +555,9 @@ static void mos7840_set_led_sync(struct usb_serial_port *port, __u16 reg,  			val, reg, NULL, 0, MOS_WDR_TIMEOUT);  } -static void mos7840_led_off(unsigned long arg) +static void mos7840_led_off(struct timer_list *t)  { -	struct moschip_port *mcs = (struct moschip_port *) arg; +	struct moschip_port *mcs = from_timer(mcs, t, led_timer1);  	/* Turn off LED */  	mos7840_set_led_async(mcs, 0x0300, MODEM_CONTROL_REGISTER); @@ -565,9 +565,9 @@ static void mos7840_led_off(unsigned long arg)  				jiffies + msecs_to_jiffies(LED_OFF_MS));  } -static void mos7840_led_flag_off(unsigned long arg) +static void mos7840_led_flag_off(struct timer_list *t)  { -	struct moschip_port *mcs = (struct moschip_port *) arg; +	struct moschip_port *mcs = from_timer(mcs, t, led_timer2);  	clear_bit_unlock(MOS7840_FLAG_LED_BUSY, &mcs->flags);  } @@ -2289,12 +2289,11 @@ static int mos7840_port_probe(struct usb_serial_port *port)  			goto error;  		} -		setup_timer(&mos7840_port->led_timer1, mos7840_led_off, -			    (unsigned long)mos7840_port); +		timer_setup(&mos7840_port->led_timer1, mos7840_led_off, 0);  		mos7840_port->led_timer1.expires =  			jiffies + msecs_to_jiffies(LED_ON_MS); -		setup_timer(&mos7840_port->led_timer2, mos7840_led_flag_off, -			    (unsigned long)mos7840_port); +		timer_setup(&mos7840_port->led_timer2, mos7840_led_flag_off, +			    0);  		mos7840_port->led_timer2.expires =  			jiffies + msecs_to_jiffies(LED_OFF_MS); diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c index 48e2e32c97e8..31b024441938 100644 --- a/drivers/usb/storage/realtek_cr.c +++ b/drivers/usb/storage/realtek_cr.c @@ -751,9 +751,9 @@ static void rts51x_modi_suspend_timer(struct rts51x_chip *chip)  	mod_timer(&chip->rts51x_suspend_timer, chip->timer_expires);  } -static void rts51x_suspend_timer_fn(unsigned long data) +static void rts51x_suspend_timer_fn(struct timer_list *t)  { -	struct rts51x_chip *chip = (struct rts51x_chip *)data; +	struct rts51x_chip *chip = from_timer(chip, t, rts51x_suspend_timer);  	struct us_data *us = chip->us;  	switch (rts51x_get_stat(chip)) { @@ -917,8 +917,7 @@ static int realtek_cr_autosuspend_setup(struct us_data *us)  	us->proto_handler = rts51x_invoke_transport;  	chip->timer_expires = 0; -	setup_timer(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn, -			(unsigned long)chip); +	timer_setup(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn, 0);  	fw5895_init(us);  	/* enable autosuspend function of the usb device */ diff --git a/drivers/uwb/drp.c b/drivers/uwb/drp.c index 38d0504a1bbc..625f706b8160 100644 --- a/drivers/uwb/drp.c +++ b/drivers/uwb/drp.c @@ -603,9 +603,9 @@ static void uwb_cnflt_update_work(struct work_struct *work)  	mutex_unlock(&rc->rsvs_mutex);  } -static void uwb_cnflt_timer(unsigned long arg) +static void uwb_cnflt_timer(struct timer_list *t)  { -	struct uwb_cnflt_alien *cnflt = (struct uwb_cnflt_alien *)arg; +	struct uwb_cnflt_alien *cnflt = from_timer(cnflt, t, timer);  	queue_work(cnflt->rc->rsv_workq, &cnflt->cnflt_update_work);  } @@ -642,7 +642,7 @@ static void uwb_drp_handle_alien_drp(struct uwb_rc *rc, struct uwb_ie_drp *drp_i  	}  	INIT_LIST_HEAD(&cnflt->rc_node); -	setup_timer(&cnflt->timer, uwb_cnflt_timer, (unsigned long)cnflt); +	timer_setup(&cnflt->timer, uwb_cnflt_timer, 0);  	cnflt->rc = rc;  	INIT_WORK(&cnflt->cnflt_update_work, uwb_cnflt_update_work); diff --git a/drivers/uwb/neh.c b/drivers/uwb/neh.c index 36b5cb62c15d..fbdca728bd9f 100644 --- a/drivers/uwb/neh.c +++ b/drivers/uwb/neh.c @@ -115,7 +115,7 @@ struct uwb_rc_neh {  	struct list_head list_node;  }; -static void uwb_rc_neh_timer(unsigned long arg); +static void uwb_rc_neh_timer(struct timer_list *t);  static void uwb_rc_neh_release(struct kref *kref)  { @@ -223,7 +223,7 @@ struct uwb_rc_neh *uwb_rc_neh_add(struct uwb_rc *rc, struct uwb_rccb *cmd,  	kref_init(&neh->kref);  	INIT_LIST_HEAD(&neh->list_node); -	setup_timer(&neh->timer, uwb_rc_neh_timer, (unsigned long)neh); +	timer_setup(&neh->timer, uwb_rc_neh_timer, 0);  	neh->rc = rc;  	neh->evt_type = expected_type; @@ -565,9 +565,9 @@ void uwb_rc_neh_error(struct uwb_rc *rc, int error)  EXPORT_SYMBOL_GPL(uwb_rc_neh_error); -static void uwb_rc_neh_timer(unsigned long arg) +static void uwb_rc_neh_timer(struct timer_list *t)  { -	struct uwb_rc_neh *neh = (struct uwb_rc_neh *)arg; +	struct uwb_rc_neh *neh = from_timer(neh, t, timer);  	struct uwb_rc *rc = neh->rc;  	unsigned long flags; diff --git a/drivers/uwb/rsv.c b/drivers/uwb/rsv.c index f5e27247a38f..fe25a8cc6fa1 100644 --- a/drivers/uwb/rsv.c +++ b/drivers/uwb/rsv.c @@ -23,7 +23,7 @@  #include "uwb-internal.h" -static void uwb_rsv_timer(unsigned long arg); +static void uwb_rsv_timer(struct timer_list *t);  static const char *rsv_states[] = {  	[UWB_RSV_STATE_NONE]                 = "none            ", @@ -198,9 +198,9 @@ static void uwb_rsv_put_stream(struct uwb_rsv *rsv)  	dev_dbg(dev, "put stream %d\n", rsv->stream);  } -void uwb_rsv_backoff_win_timer(unsigned long arg) +void uwb_rsv_backoff_win_timer(struct timer_list *t)  { -	struct uwb_drp_backoff_win *bow = (struct uwb_drp_backoff_win *)arg; +	struct uwb_drp_backoff_win *bow = from_timer(bow, t, timer);  	struct uwb_rc *rc = container_of(bow, struct uwb_rc, bow);  	struct device *dev = &rc->uwb_dev.dev; @@ -470,7 +470,7 @@ static struct uwb_rsv *uwb_rsv_alloc(struct uwb_rc *rc)  	INIT_LIST_HEAD(&rsv->rc_node);  	INIT_LIST_HEAD(&rsv->pal_node);  	kref_init(&rsv->kref); -	setup_timer(&rsv->timer, uwb_rsv_timer, (unsigned long)rsv); +	timer_setup(&rsv->timer, uwb_rsv_timer, 0);  	rsv->rc = rc;  	INIT_WORK(&rsv->handle_timeout_work, uwb_rsv_handle_timeout_work); @@ -939,9 +939,9 @@ static void uwb_rsv_alien_bp_work(struct work_struct *work)  	mutex_unlock(&rc->rsvs_mutex);  } -static void uwb_rsv_timer(unsigned long arg) +static void uwb_rsv_timer(struct timer_list *t)  { -	struct uwb_rsv *rsv = (struct uwb_rsv *)arg; +	struct uwb_rsv *rsv = from_timer(rsv, t, timer);  	queue_work(rsv->rc->rsv_workq, &rsv->handle_timeout_work);  } @@ -987,8 +987,7 @@ void uwb_rsv_init(struct uwb_rc *rc)  	rc->bow.can_reserve_extra_mases = true;  	rc->bow.total_expired = 0;  	rc->bow.window = UWB_DRP_BACKOFF_WIN_MIN >> 1; -	setup_timer(&rc->bow.timer, uwb_rsv_backoff_win_timer, -			(unsigned long)&rc->bow); +	timer_setup(&rc->bow.timer, uwb_rsv_backoff_win_timer, 0);  	bitmap_complement(rc->uwb_dev.streams, rc->uwb_dev.streams, UWB_NUM_STREAMS);  } diff --git a/drivers/uwb/uwb-internal.h b/drivers/uwb/uwb-internal.h index 353c0555a1f5..91326ce093a7 100644 --- a/drivers/uwb/uwb-internal.h +++ b/drivers/uwb/uwb-internal.h @@ -329,7 +329,7 @@ void uwb_rsv_put(struct uwb_rsv *rsv);  bool uwb_rsv_has_two_drp_ies(struct uwb_rsv *rsv);  void uwb_rsv_dump(char *text, struct uwb_rsv *rsv);  int uwb_rsv_try_move(struct uwb_rsv *rsv, struct uwb_mas_bm *available); -void uwb_rsv_backoff_win_timer(unsigned long arg); +void uwb_rsv_backoff_win_timer(struct timer_list *t);  void uwb_rsv_backoff_win_increment(struct uwb_rc *rc);  int uwb_rsv_status(struct uwb_rsv *rsv);  int uwb_rsv_companion_status(struct uwb_rsv *rsv); diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c index 7e6acaf3ece4..88c05d0448b2 100644 --- a/drivers/watchdog/at91sam9_wdt.c +++ b/drivers/watchdog/at91sam9_wdt.c @@ -120,9 +120,9 @@ static inline void at91_wdt_reset(struct at91wdt *wdt)  /*   * Timer tick   */ -static void at91_ping(unsigned long data) +static void at91_ping(struct timer_list *t)  { -	struct at91wdt *wdt = (struct at91wdt *)data; +	struct at91wdt *wdt = from_timer(wdt, t, timer);  	if (time_before(jiffies, wdt->next_heartbeat) ||  	    !watchdog_active(&wdt->wdd)) {  		at91_wdt_reset(wdt); @@ -222,7 +222,7 @@ static int at91_wdt_init(struct platform_device *pdev, struct at91wdt *wdt)  			 "watchdog already configured differently (mr = %x expecting %x)\n",  			 tmp & wdt->mr_mask, wdt->mr & wdt->mr_mask); -	setup_timer(&wdt->timer, at91_ping, (unsigned long)wdt); +	timer_setup(&wdt->timer, at91_ping, 0);  	/*  	 * Use min_heartbeat the first time to avoid spurious watchdog reset: diff --git a/drivers/watchdog/bcm47xx_wdt.c b/drivers/watchdog/bcm47xx_wdt.c index 236582809336..f41b756d6dd5 100644 --- a/drivers/watchdog/bcm47xx_wdt.c +++ b/drivers/watchdog/bcm47xx_wdt.c @@ -106,9 +106,9 @@ static const struct watchdog_ops bcm47xx_wdt_hard_ops = {  	.restart        = bcm47xx_wdt_restart,  }; -static void bcm47xx_wdt_soft_timer_tick(unsigned long data) +static void bcm47xx_wdt_soft_timer_tick(struct timer_list *t)  { -	struct bcm47xx_wdt *wdt = (struct bcm47xx_wdt *)data; +	struct bcm47xx_wdt *wdt = from_timer(wdt, t, soft_timer);  	u32 next_tick = min(wdt->wdd.timeout * 1000, wdt->max_timer_ms);  	if (!atomic_dec_and_test(&wdt->soft_ticks)) { @@ -133,7 +133,7 @@ static int bcm47xx_wdt_soft_start(struct watchdog_device *wdd)  	struct bcm47xx_wdt *wdt = bcm47xx_wdt_get(wdd);  	bcm47xx_wdt_soft_keepalive(wdd); -	bcm47xx_wdt_soft_timer_tick((unsigned long)wdt); +	bcm47xx_wdt_soft_timer_tick(&wdt->soft_timer);  	return 0;  } @@ -190,8 +190,7 @@ static int bcm47xx_wdt_probe(struct platform_device *pdev)  	if (soft) {  		wdt->wdd.ops = &bcm47xx_wdt_soft_ops; -		setup_timer(&wdt->soft_timer, bcm47xx_wdt_soft_timer_tick, -			    (long unsigned int)wdt); +		timer_setup(&wdt->soft_timer, bcm47xx_wdt_soft_timer_tick, 0);  	} else {  		wdt->wdd.ops = &bcm47xx_wdt_hard_ops;  	} diff --git a/drivers/watchdog/bcm63xx_wdt.c b/drivers/watchdog/bcm63xx_wdt.c index ab26fd90729e..8555afc70f9b 100644 --- a/drivers/watchdog/bcm63xx_wdt.c +++ b/drivers/watchdog/bcm63xx_wdt.c @@ -77,7 +77,7 @@ static void bcm63xx_wdt_isr(void *data)  	die(PFX " fire", regs);  } -static void bcm63xx_timer_tick(unsigned long unused) +static void bcm63xx_timer_tick(struct timer_list *unused)  {  	if (!atomic_dec_and_test(&bcm63xx_wdt_device.ticks)) {  		bcm63xx_wdt_hw_start(); @@ -240,7 +240,7 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)  	int ret;  	struct resource *r; -	setup_timer(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0L); +	timer_setup(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0);  	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!r) { diff --git a/drivers/watchdog/cpu5wdt.c b/drivers/watchdog/cpu5wdt.c index 6c3f78e45c26..6cfb102c397c 100644 --- a/drivers/watchdog/cpu5wdt.c +++ b/drivers/watchdog/cpu5wdt.c @@ -69,7 +69,7 @@ static struct {  /* generic helper functions */ -static void cpu5wdt_trigger(unsigned long unused) +static void cpu5wdt_trigger(struct timer_list *unused)  {  	if (verbose > 2)  		pr_debug("trigger at %i ticks\n", ticks); @@ -224,7 +224,7 @@ static int cpu5wdt_init(void)  	init_completion(&cpu5wdt_device.stop);  	cpu5wdt_device.queue = 0; -	setup_timer(&cpu5wdt_device.timer, cpu5wdt_trigger, 0); +	timer_setup(&cpu5wdt_device.timer, cpu5wdt_trigger, 0);  	cpu5wdt_device.default_ticks = ticks;  	if (!request_region(port, CPU5WDT_EXTENT, PFX)) { diff --git a/drivers/watchdog/mpc8xxx_wdt.c b/drivers/watchdog/mpc8xxx_wdt.c index 366e5c7e650b..6610e9217dbc 100644 --- a/drivers/watchdog/mpc8xxx_wdt.c +++ b/drivers/watchdog/mpc8xxx_wdt.c @@ -80,9 +80,9 @@ static void mpc8xxx_wdt_keepalive(struct mpc8xxx_wdt_ddata *ddata)  	spin_unlock(&ddata->lock);  } -static void mpc8xxx_wdt_timer_ping(unsigned long arg) +static void mpc8xxx_wdt_timer_ping(struct timer_list *t)  { -	struct mpc8xxx_wdt_ddata *ddata = (void *)arg; +	struct mpc8xxx_wdt_ddata *ddata = from_timer(ddata, t, timer);  	mpc8xxx_wdt_keepalive(ddata);  	/* We're pinging it twice faster than needed, just to be sure. */ @@ -173,8 +173,7 @@ static int mpc8xxx_wdt_probe(struct platform_device *ofdev)  	}  	spin_lock_init(&ddata->lock); -	setup_timer(&ddata->timer, mpc8xxx_wdt_timer_ping, -		    (unsigned long)ddata); +	timer_setup(&ddata->timer, mpc8xxx_wdt_timer_ping, 0);  	ddata->wdd.info = &mpc8xxx_wdt_info,  	ddata->wdd.ops = &mpc8xxx_wdt_ops, diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c index ff27c4ac96e4..ca360d204548 100644 --- a/drivers/watchdog/mtx-1_wdt.c +++ b/drivers/watchdog/mtx-1_wdt.c @@ -68,7 +68,7 @@ static struct {  	unsigned int gstate;  } mtx1_wdt_device; -static void mtx1_wdt_trigger(unsigned long unused) +static void mtx1_wdt_trigger(struct timer_list *unused)  {  	spin_lock(&mtx1_wdt_device.lock);  	if (mtx1_wdt_device.running) @@ -219,7 +219,7 @@ static int mtx1_wdt_probe(struct platform_device *pdev)  	init_completion(&mtx1_wdt_device.stop);  	mtx1_wdt_device.queue = 0;  	clear_bit(0, &mtx1_wdt_device.inuse); -	setup_timer(&mtx1_wdt_device.timer, mtx1_wdt_trigger, 0L); +	timer_setup(&mtx1_wdt_device.timer, mtx1_wdt_trigger, 0);  	mtx1_wdt_device.default_ticks = ticks;  	ret = misc_register(&mtx1_wdt_misc); diff --git a/drivers/watchdog/nuc900_wdt.c b/drivers/watchdog/nuc900_wdt.c index d5bed78c4d9f..830bd04ff911 100644 --- a/drivers/watchdog/nuc900_wdt.c +++ b/drivers/watchdog/nuc900_wdt.c @@ -216,7 +216,7 @@ static ssize_t nuc900_wdt_write(struct file *file, const char __user *data,  	return len;  } -static void nuc900_wdt_timer_ping(unsigned long data) +static void nuc900_wdt_timer_ping(struct timer_list *unused)  {  	if (time_before(jiffies, nuc900_wdt->next_heartbeat)) {  		nuc900_wdt_keepalive(); @@ -267,7 +267,7 @@ static int nuc900wdt_probe(struct platform_device *pdev)  	clk_enable(nuc900_wdt->wdt_clock); -	setup_timer(&nuc900_wdt->timer, nuc900_wdt_timer_ping, 0); +	timer_setup(&nuc900_wdt->timer, nuc900_wdt_timer_ping, 0);  	ret = misc_register(&nuc900wdt_miscdev);  	if (ret) { diff --git a/drivers/watchdog/pcwd.c b/drivers/watchdog/pcwd.c index 3ad5206d7935..b72ce68eacd3 100644 --- a/drivers/watchdog/pcwd.c +++ b/drivers/watchdog/pcwd.c @@ -367,7 +367,7 @@ static void pcwd_show_card_info(void)  		pr_info("No previous trip detected - Cold boot or reset\n");  } -static void pcwd_timer_ping(unsigned long data) +static void pcwd_timer_ping(struct timer_list *unused)  {  	int wdrst_stat; @@ -893,7 +893,7 @@ static int pcwd_isa_probe(struct device *dev, unsigned int id)  	/* clear the "card caused reboot" flag */  	pcwd_clear_status(); -	setup_timer(&pcwd_private.timer, pcwd_timer_ping, 0); +	timer_setup(&pcwd_private.timer, pcwd_timer_ping, 0);  	/*  Disable the board  */  	pcwd_stop(); diff --git a/drivers/watchdog/pika_wdt.c b/drivers/watchdog/pika_wdt.c index e35cf5e87907..e0a6f8c0f03c 100644 --- a/drivers/watchdog/pika_wdt.c +++ b/drivers/watchdog/pika_wdt.c @@ -85,7 +85,7 @@ static inline void pikawdt_reset(void)  /*   * Timer tick   */ -static void pikawdt_ping(unsigned long data) +static void pikawdt_ping(struct timer_list *unused)  {  	if (time_before(jiffies, pikawdt_private.next_heartbeat) ||  			(!nowayout && !pikawdt_private.open)) { @@ -269,7 +269,7 @@ static int __init pikawdt_init(void)  	iounmap(fpga); -	setup_timer(&pikawdt_private.timer, pikawdt_ping, 0); +	timer_setup(&pikawdt_private.timer, pikawdt_ping, 0);  	ret = misc_register(&pikawdt_miscdev);  	if (ret) { diff --git a/drivers/watchdog/rdc321x_wdt.c b/drivers/watchdog/rdc321x_wdt.c index 47a8f1b1087d..a281aa84bfb1 100644 --- a/drivers/watchdog/rdc321x_wdt.c +++ b/drivers/watchdog/rdc321x_wdt.c @@ -67,7 +67,7 @@ static struct {  /* generic helper functions */ -static void rdc321x_wdt_trigger(unsigned long unused) +static void rdc321x_wdt_trigger(struct timer_list *unused)  {  	unsigned long flags;  	u32 val; @@ -262,7 +262,7 @@ static int rdc321x_wdt_probe(struct platform_device *pdev)  	clear_bit(0, &rdc321x_wdt_device.inuse); -	setup_timer(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0); +	timer_setup(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0);  	rdc321x_wdt_device.default_ticks = ticks; diff --git a/drivers/watchdog/shwdt.c b/drivers/watchdog/shwdt.c index 517a733175ef..a7d6425db807 100644 --- a/drivers/watchdog/shwdt.c +++ b/drivers/watchdog/shwdt.c @@ -175,9 +175,9 @@ static int sh_wdt_set_heartbeat(struct watchdog_device *wdt_dev, unsigned t)  	return 0;  } -static void sh_wdt_ping(unsigned long data) +static void sh_wdt_ping(struct timer_list *t)  { -	struct sh_wdt *wdt = (struct sh_wdt *)data; +	struct sh_wdt *wdt = from_timer(wdt, t, timer);  	unsigned long flags;  	spin_lock_irqsave(&wdt->lock, flags); @@ -275,7 +275,7 @@ static int sh_wdt_probe(struct platform_device *pdev)  		return rc;  	} -	setup_timer(&wdt->timer, sh_wdt_ping, (unsigned long)wdt); +	timer_setup(&wdt->timer, sh_wdt_ping, 0);  	wdt->timer.expires	= next_ping_period(clock_division_ratio);  	dev_info(&pdev->dev, "initialized.\n"); diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index 8d779227370a..bebe59feca58 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c @@ -140,7 +140,7 @@ static void o2net_rx_until_empty(struct work_struct *work);  static void o2net_shutdown_sc(struct work_struct *work);  static void o2net_listen_data_ready(struct sock *sk);  static void o2net_sc_send_keep_req(struct work_struct *work); -static void o2net_idle_timer(unsigned long data); +static void o2net_idle_timer(struct timer_list *t);  static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);  static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc); @@ -450,8 +450,7 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)  	INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc);  	INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req); -	setup_timer(&sc->sc_idle_timeout, o2net_idle_timer, -		    (unsigned long)sc); +	timer_setup(&sc->sc_idle_timeout, o2net_idle_timer, 0);  	sclog(sc, "alloced\n"); @@ -1517,9 +1516,9 @@ static void o2net_sc_send_keep_req(struct work_struct *work)  /* socket shutdown does a del_timer_sync against this as it tears down.   * we can't start this timer until we've got to the point in sc buildup   * where shutdown is going to be involved */ -static void o2net_idle_timer(unsigned long data) +static void o2net_idle_timer(struct timer_list *t)  { -	struct o2net_sock_container *sc = (struct o2net_sock_container *)data; +	struct o2net_sock_container *sc = from_timer(sc, t, sc_idle_timeout);  	struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);  #ifdef CONFIG_DEBUG_FS  	unsigned long msecs = ktime_to_ms(ktime_get()) - diff --git a/kernel/padata.c b/kernel/padata.c index f262c9a4e70a..57c0074d50cc 100644 --- a/kernel/padata.c +++ b/kernel/padata.c @@ -288,9 +288,9 @@ static void invoke_padata_reorder(struct work_struct *work)  	local_bh_enable();  } -static void padata_reorder_timer(unsigned long arg) +static void padata_reorder_timer(struct timer_list *t)  { -	struct parallel_data *pd = (struct parallel_data *)arg; +	struct parallel_data *pd = from_timer(pd, t, timer);  	unsigned int weight;  	int target_cpu, cpu; @@ -485,7 +485,7 @@ static struct parallel_data *padata_alloc_pd(struct padata_instance *pinst,  	padata_init_pqueues(pd);  	padata_init_squeues(pd); -	setup_timer(&pd->timer, padata_reorder_timer, (unsigned long)pd); +	timer_setup(&pd->timer, padata_reorder_timer, 0);  	atomic_set(&pd->seq_nr, -1);  	atomic_set(&pd->reorder_objects, 0);  	atomic_set(&pd->refcnt, 0); diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c index 5b51d5ba2a85..65f9e3f24dde 100644 --- a/kernel/time/clocksource.c +++ b/kernel/time/clocksource.c @@ -171,7 +171,7 @@ void clocksource_mark_unstable(struct clocksource *cs)  	spin_unlock_irqrestore(&watchdog_lock, flags);  } -static void clocksource_watchdog(unsigned long data) +static void clocksource_watchdog(struct timer_list *unused)  {  	struct clocksource *cs;  	u64 csnow, wdnow, cslast, wdlast, delta; @@ -290,7 +290,7 @@ static inline void clocksource_start_watchdog(void)  {  	if (watchdog_running || !watchdog || list_empty(&watchdog_list))  		return; -	setup_timer(&watchdog_timer, clocksource_watchdog, 0UL); +	timer_setup(&watchdog_timer, clocksource_watchdog, 0);  	watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;  	add_timer_on(&watchdog_timer, cpumask_first(cpu_online_mask));  	watchdog_running = 1; diff --git a/net/802/garp.c b/net/802/garp.c index 2dac647ff420..7f50d47470bd 100644 --- a/net/802/garp.c +++ b/net/802/garp.c @@ -401,9 +401,9 @@ static void garp_join_timer_arm(struct garp_applicant *app)  	mod_timer(&app->join_timer, jiffies + delay);  } -static void garp_join_timer(unsigned long data) +static void garp_join_timer(struct timer_list *t)  { -	struct garp_applicant *app = (struct garp_applicant *)data; +	struct garp_applicant *app = from_timer(app, t, join_timer);  	spin_lock(&app->lock);  	garp_gid_event(app, GARP_EVENT_TRANSMIT_PDU); @@ -584,7 +584,7 @@ int garp_init_applicant(struct net_device *dev, struct garp_application *appl)  	spin_lock_init(&app->lock);  	skb_queue_head_init(&app->queue);  	rcu_assign_pointer(dev->garp_port->applicants[appl->type], app); -	setup_timer(&app->join_timer, garp_join_timer, (unsigned long)app); +	timer_setup(&app->join_timer, garp_join_timer, 0);  	garp_join_timer_arm(app);  	return 0; diff --git a/net/802/mrp.c b/net/802/mrp.c index be4dd3165347..a808dd5bbb27 100644 --- a/net/802/mrp.c +++ b/net/802/mrp.c @@ -586,9 +586,9 @@ static void mrp_join_timer_arm(struct mrp_applicant *app)  	mod_timer(&app->join_timer, jiffies + delay);  } -static void mrp_join_timer(unsigned long data) +static void mrp_join_timer(struct timer_list *t)  { -	struct mrp_applicant *app = (struct mrp_applicant *)data; +	struct mrp_applicant *app = from_timer(app, t, join_timer);  	spin_lock(&app->lock);  	mrp_mad_event(app, MRP_EVENT_TX); @@ -605,9 +605,9 @@ static void mrp_periodic_timer_arm(struct mrp_applicant *app)  		  jiffies + msecs_to_jiffies(mrp_periodic_time));  } -static void mrp_periodic_timer(unsigned long data) +static void mrp_periodic_timer(struct timer_list *t)  { -	struct mrp_applicant *app = (struct mrp_applicant *)data; +	struct mrp_applicant *app = from_timer(app, t, periodic_timer);  	spin_lock(&app->lock);  	mrp_mad_event(app, MRP_EVENT_PERIODIC); @@ -865,10 +865,9 @@ int mrp_init_applicant(struct net_device *dev, struct mrp_application *appl)  	spin_lock_init(&app->lock);  	skb_queue_head_init(&app->queue);  	rcu_assign_pointer(dev->mrp_port->applicants[appl->type], app); -	setup_timer(&app->join_timer, mrp_join_timer, (unsigned long)app); +	timer_setup(&app->join_timer, mrp_join_timer, 0);  	mrp_join_timer_arm(app); -	setup_timer(&app->periodic_timer, mrp_periodic_timer, -		    (unsigned long)app); +	timer_setup(&app->periodic_timer, mrp_periodic_timer, 0);  	mrp_periodic_timer_arm(app);  	return 0; diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c index 8ad3ec2610b6..309d7dbb36e8 100644 --- a/net/appletalk/aarp.c +++ b/net/appletalk/aarp.c @@ -310,7 +310,7 @@ static void __aarp_expire_device(struct aarp_entry **n, struct net_device *dev)  }  /* Handle the timer event */ -static void aarp_expire_timeout(unsigned long unused) +static void aarp_expire_timeout(struct timer_list *unused)  {  	int ct; @@ -884,7 +884,7 @@ void __init aarp_proto_init(void)  	aarp_dl = register_snap_client(aarp_snap_id, aarp_rcv);  	if (!aarp_dl)  		printk(KERN_CRIT "Unable to register AARP with SNAP.\n"); -	setup_timer(&aarp_timer, aarp_expire_timeout, 0); +	timer_setup(&aarp_timer, aarp_expire_timeout, 0);  	aarp_timer.expires  = jiffies + sysctl_aarp_expiry_time;  	add_timer(&aarp_timer);  	register_netdevice_notifier(&aarp_notifier); diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 5d035c1f1156..03a9fc0771c0 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -158,9 +158,9 @@ found:  	return s;  } -static void atalk_destroy_timer(unsigned long data) +static void atalk_destroy_timer(struct timer_list *t)  { -	struct sock *sk = (struct sock *)data; +	struct sock *sk = from_timer(sk, t, sk_timer);  	if (sk_has_allocations(sk)) {  		sk->sk_timer.expires = jiffies + SOCK_DESTROY_TIME; @@ -175,8 +175,7 @@ static inline void atalk_destroy_socket(struct sock *sk)  	skb_queue_purge(&sk->sk_receive_queue);  	if (sk_has_allocations(sk)) { -		setup_timer(&sk->sk_timer, atalk_destroy_timer, -				(unsigned long)sk); +		timer_setup(&sk->sk_timer, atalk_destroy_timer, 0);  		sk->sk_timer.expires	= jiffies + SOCK_DESTROY_TIME;  		add_timer(&sk->sk_timer);  	} else diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c index 4b90033f35a8..15cd2139381e 100644 --- a/net/batman-adv/tp_meter.c +++ b/net/batman-adv/tp_meter.c @@ -488,9 +488,9 @@ static void batadv_tp_reset_sender_timer(struct batadv_tp_vars *tp_vars)   * Switch to Slow Start, set the ss_threshold to half of the current cwnd and   * reset the cwnd to 3*MSS   */ -static void batadv_tp_sender_timeout(unsigned long arg) +static void batadv_tp_sender_timeout(struct timer_list *t)  { -	struct batadv_tp_vars *tp_vars = (struct batadv_tp_vars *)arg; +	struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer);  	struct batadv_priv *bat_priv = tp_vars->bat_priv;  	if (atomic_read(&tp_vars->sending) == 0) @@ -1020,8 +1020,7 @@ void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst,  	atomic64_set(&tp_vars->tot_sent, 0);  	kref_get(&tp_vars->refcount); -	setup_timer(&tp_vars->timer, batadv_tp_sender_timeout, -		    (unsigned long)tp_vars); +	timer_setup(&tp_vars->timer, batadv_tp_sender_timeout, 0);  	tp_vars->bat_priv = bat_priv;  	tp_vars->start_time = jiffies; @@ -1109,9 +1108,9 @@ static void batadv_tp_reset_receiver_timer(struct batadv_tp_vars *tp_vars)   *  reached without received ack   * @arg: address of the related tp_vars   */ -static void batadv_tp_receiver_shutdown(unsigned long arg) +static void batadv_tp_receiver_shutdown(struct timer_list *t)  { -	struct batadv_tp_vars *tp_vars = (struct batadv_tp_vars *)arg; +	struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer);  	struct batadv_tp_unacked *un, *safe;  	struct batadv_priv *bat_priv; @@ -1373,8 +1372,7 @@ batadv_tp_init_recv(struct batadv_priv *bat_priv,  	hlist_add_head_rcu(&tp_vars->list, &bat_priv->tp_list);  	kref_get(&tp_vars->refcount); -	setup_timer(&tp_vars->timer, batadv_tp_receiver_shutdown, -		    (unsigned long)tp_vars); +	timer_setup(&tp_vars->timer, batadv_tp_receiver_shutdown, 0);  	batadv_tp_reset_receiver_timer(tp_vars); diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c index 8112893037bd..f2cec70d520c 100644 --- a/net/bluetooth/hidp/core.c +++ b/net/bluetooth/hidp/core.c @@ -398,9 +398,9 @@ static int hidp_raw_request(struct hid_device *hid, unsigned char reportnum,  	}  } -static void hidp_idle_timeout(unsigned long arg) +static void hidp_idle_timeout(struct timer_list *t)  { -	struct hidp_session *session = (struct hidp_session *) arg; +	struct hidp_session *session = from_timer(session, t, timer);  	/* The HIDP user-space API only contains calls to add and remove  	 * devices. There is no way to forward events of any kind. Therefore, @@ -944,8 +944,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,  	/* device management */  	INIT_WORK(&session->dev_init, hidp_session_dev_work); -	setup_timer(&session->timer, hidp_idle_timeout, -		    (unsigned long)session); +	timer_setup(&session->timer, hidp_idle_timeout, 0);  	/* session data */  	mutex_init(&session->report_mutex); diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index 4a0b41d75c84..b98225d65e87 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c @@ -233,9 +233,9 @@ static int rfcomm_check_security(struct rfcomm_dlc *d)  				 d->out);  } -static void rfcomm_session_timeout(unsigned long arg) +static void rfcomm_session_timeout(struct timer_list *t)  { -	struct rfcomm_session *s = (void *) arg; +	struct rfcomm_session *s = from_timer(s, t, timer);  	BT_DBG("session %p state %ld", s, s->state); @@ -258,9 +258,9 @@ static void rfcomm_session_clear_timer(struct rfcomm_session *s)  }  /* ---- RFCOMM DLCs ---- */ -static void rfcomm_dlc_timeout(unsigned long arg) +static void rfcomm_dlc_timeout(struct timer_list *t)  { -	struct rfcomm_dlc *d = (void *) arg; +	struct rfcomm_dlc *d = from_timer(d, t, timer);  	BT_DBG("dlc %p state %ld", d, d->state); @@ -307,7 +307,7 @@ struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)  	if (!d)  		return NULL; -	setup_timer(&d->timer, rfcomm_dlc_timeout, (unsigned long)d); +	timer_setup(&d->timer, rfcomm_dlc_timeout, 0);  	skb_queue_head_init(&d->tx_queue);  	mutex_init(&d->lock); @@ -650,7 +650,7 @@ static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)  	BT_DBG("session %p sock %p", s, sock); -	setup_timer(&s->timer, rfcomm_session_timeout, (unsigned long) s); +	timer_setup(&s->timer, rfcomm_session_timeout, 0);  	INIT_LIST_HEAD(&s->dlcs);  	s->state = state; diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index 795e920a3281..08df57665e1f 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c @@ -73,9 +73,9 @@ struct sco_pinfo {  #define SCO_CONN_TIMEOUT	(HZ * 40)  #define SCO_DISCONN_TIMEOUT	(HZ * 2) -static void sco_sock_timeout(unsigned long arg) +static void sco_sock_timeout(struct timer_list *t)  { -	struct sock *sk = (struct sock *)arg; +	struct sock *sk = from_timer(sk, t, sk_timer);  	BT_DBG("sock %p state %d", sk, sk->sk_state); @@ -487,7 +487,7 @@ static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,  	sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT; -	setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk); +	timer_setup(&sk->sk_timer, sco_sock_timeout, 0);  	bt_sock_link(&sco_sk_list, sk);  	return sk; diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c index 70ccda233bd1..c7785efeea57 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c @@ -144,9 +144,9 @@ static void send_dm_alert(struct work_struct *work)   * in the event that more drops will arrive during the   * hysteresis period.   */ -static void sched_send_work(unsigned long _data) +static void sched_send_work(struct timer_list *t)  { -	struct per_cpu_dm_data *data = (struct per_cpu_dm_data *)_data; +	struct per_cpu_dm_data *data = from_timer(data, t, send_timer);  	schedule_work(&data->dm_alert_work);  } @@ -412,8 +412,7 @@ static int __init init_net_drop_monitor(void)  	for_each_possible_cpu(cpu) {  		data = &per_cpu(dm_cpu_data, cpu);  		INIT_WORK(&data->dm_alert_work, send_dm_alert); -		setup_timer(&data->send_timer, sched_send_work, -			    (unsigned long)data); +		timer_setup(&data->send_timer, sched_send_work, 0);  		spin_lock_init(&data->lock);  		reset_per_cpu_data(data);  	} diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c index 7c1ffd6f9501..9834cfa21b21 100644 --- a/net/core/gen_estimator.c +++ b/net/core/gen_estimator.c @@ -76,9 +76,9 @@ static void est_fetch_counters(struct net_rate_estimator *e,  } -static void est_timer(unsigned long arg) +static void est_timer(struct timer_list *t)  { -	struct net_rate_estimator *est = (struct net_rate_estimator *)arg; +	struct net_rate_estimator *est = from_timer(est, t, timer);  	struct gnet_stats_basic_packed b;  	u64 rate, brate; @@ -170,7 +170,7 @@ int gen_new_estimator(struct gnet_stats_basic_packed *bstats,  	}  	est->next_jiffies = jiffies + ((HZ/4) << intvl_log); -	setup_timer(&est->timer, est_timer, (unsigned long)est); +	timer_setup(&est->timer, est_timer, 0);  	mod_timer(&est->timer, est->next_jiffies);  	rcu_assign_pointer(*rate_est, est); diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 6ea3a1a7f36a..d1f5fe986edd 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -51,7 +51,7 @@ do {						\  #define PNEIGH_HASHMASK		0xF -static void neigh_timer_handler(unsigned long arg); +static void neigh_timer_handler(struct timer_list *t);  static void __neigh_notify(struct neighbour *n, int type, int flags,  			   u32 pid);  static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid); @@ -331,7 +331,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device  	n->output	  = neigh_blackhole;  	seqlock_init(&n->hh.hh_lock);  	n->parms	  = neigh_parms_clone(&tbl->parms); -	setup_timer(&n->timer, neigh_timer_handler, (unsigned long)n); +	timer_setup(&n->timer, neigh_timer_handler, 0);  	NEIGH_CACHE_STAT_INC(tbl, allocs);  	n->tbl		  = tbl; @@ -903,10 +903,10 @@ static void neigh_probe(struct neighbour *neigh)  /* Called when a timer expires for a neighbour entry. */ -static void neigh_timer_handler(unsigned long arg) +static void neigh_timer_handler(struct timer_list *t)  {  	unsigned long now, next; -	struct neighbour *neigh = (struct neighbour *)arg; +	struct neighbour *neigh = from_timer(neigh, t, timer);  	unsigned int state;  	int notify = 0; @@ -1391,9 +1391,9 @@ int neigh_direct_output(struct neighbour *neigh, struct sk_buff *skb)  }  EXPORT_SYMBOL(neigh_direct_output); -static void neigh_proxy_process(unsigned long arg) +static void neigh_proxy_process(struct timer_list *t)  { -	struct neigh_table *tbl = (struct neigh_table *)arg; +	struct neigh_table *tbl = from_timer(tbl, t, proxy_timer);  	long sched_next = 0;  	unsigned long now = jiffies;  	struct sk_buff *skb, *n; @@ -1573,7 +1573,7 @@ void neigh_table_init(int index, struct neigh_table *tbl)  	INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work);  	queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,  			tbl->parms.reachable_time); -	setup_timer(&tbl->proxy_timer, neigh_proxy_process, (unsigned long)tbl); +	timer_setup(&tbl->proxy_timer, neigh_proxy_process, 0);  	skb_queue_head_init_class(&tbl->proxy_queue,  			&neigh_table_proxy_queue_class); diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index de4a0cafb19f..324cb9f2f551 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c @@ -183,7 +183,7 @@ static __inline__ unsigned int dn_hash(__le16 src, __le16 dst)  	return dn_rt_hash_mask & (unsigned int)tmp;  } -static void dn_dst_check_expire(unsigned long dummy) +static void dn_dst_check_expire(struct timer_list *unused)  {  	int i;  	struct dn_route *rt; @@ -1875,7 +1875,7 @@ void __init dn_route_init(void)  		kmem_cache_create("dn_dst_cache", sizeof(struct dn_route), 0,  				  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);  	dst_entries_init(&dn_dst_ops); -	setup_timer(&dn_route_timer, dn_dst_check_expire, 0); +	timer_setup(&dn_route_timer, dn_dst_check_expire, 0);  	dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;  	add_timer(&dn_route_timer); diff --git a/net/decnet/dn_timer.c b/net/decnet/dn_timer.c index f430daed24a0..aa4155875ca8 100644 --- a/net/decnet/dn_timer.c +++ b/net/decnet/dn_timer.c @@ -34,11 +34,11 @@  #define SLOW_INTERVAL (HZ/2) -static void dn_slow_timer(unsigned long arg); +static void dn_slow_timer(struct timer_list *t);  void dn_start_slow_timer(struct sock *sk)  { -	setup_timer(&sk->sk_timer, dn_slow_timer, (unsigned long)sk); +	timer_setup(&sk->sk_timer, dn_slow_timer, 0);  	sk_reset_timer(sk, &sk->sk_timer, jiffies + SLOW_INTERVAL);  } @@ -47,9 +47,9 @@ void dn_stop_slow_timer(struct sock *sk)  	sk_stop_timer(sk, &sk->sk_timer);  } -static void dn_slow_timer(unsigned long arg) +static void dn_slow_timer(struct timer_list *t)  { -	struct sock *sk = (struct sock *)arg; +	struct sock *sk = from_timer(sk, t, sk_timer);  	struct dn_scp *scp = DN_SK(sk);  	bh_lock_sock(sk); diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index ab183af0b5b6..d1f8f302dbf3 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -752,18 +752,18 @@ static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc,  	return ip_local_out(net, skb->sk, skb);  } -static void igmp_gq_timer_expire(unsigned long data) +static void igmp_gq_timer_expire(struct timer_list *t)  { -	struct in_device *in_dev = (struct in_device *)data; +	struct in_device *in_dev = from_timer(in_dev, t, mr_gq_timer);  	in_dev->mr_gq_running = 0;  	igmpv3_send_report(in_dev, NULL);  	in_dev_put(in_dev);  } -static void igmp_ifc_timer_expire(unsigned long data) +static void igmp_ifc_timer_expire(struct timer_list *t)  { -	struct in_device *in_dev = (struct in_device *)data; +	struct in_device *in_dev = from_timer(in_dev, t, mr_ifc_timer);  	igmpv3_send_cr(in_dev);  	if (in_dev->mr_ifc_count) { @@ -784,9 +784,9 @@ static void igmp_ifc_event(struct in_device *in_dev)  } -static void igmp_timer_expire(unsigned long data) +static void igmp_timer_expire(struct timer_list *t)  { -	struct ip_mc_list *im = (struct ip_mc_list *)data; +	struct ip_mc_list *im = from_timer(im, t, timer);  	struct in_device *in_dev = im->interface;  	spin_lock(&im->lock); @@ -1385,7 +1385,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)  	refcount_set(&im->refcnt, 1);  	spin_lock_init(&im->lock);  #ifdef CONFIG_IP_MULTICAST -	setup_timer(&im->timer, igmp_timer_expire, (unsigned long)im); +	timer_setup(&im->timer, igmp_timer_expire, 0);  	im->unsolicit_count = net->ipv4.sysctl_igmp_qrv;  #endif @@ -1695,10 +1695,8 @@ void ip_mc_init_dev(struct in_device *in_dev)  	ASSERT_RTNL();  #ifdef CONFIG_IP_MULTICAST -	setup_timer(&in_dev->mr_gq_timer, igmp_gq_timer_expire, -			(unsigned long)in_dev); -	setup_timer(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire, -			(unsigned long)in_dev); +	timer_setup(&in_dev->mr_gq_timer, igmp_gq_timer_expire, 0); +	timer_setup(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire, 0);  	in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;  #endif diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 40a43ad294cb..fd5f19c988e4 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -112,7 +112,7 @@ static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,  				 int cmd);  static void igmpmsg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);  static void mroute_clean_tables(struct mr_table *mrt, bool all); -static void ipmr_expire_process(unsigned long arg); +static void ipmr_expire_process(struct timer_list *t);  #ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES  #define ipmr_for_each_table(mrt, net) \ @@ -375,8 +375,7 @@ static struct mr_table *ipmr_new_table(struct net *net, u32 id)  	INIT_LIST_HEAD(&mrt->mfc_cache_list);  	INIT_LIST_HEAD(&mrt->mfc_unres_queue); -	setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process, -		    (unsigned long)mrt); +	timer_setup(&mrt->ipmr_expire_timer, ipmr_expire_process, 0);  	mrt->mroute_reg_vif_num = -1;  #ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES @@ -804,9 +803,9 @@ static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c)  }  /* Timer process for the unresolved queue. */ -static void ipmr_expire_process(unsigned long arg) +static void ipmr_expire_process(struct timer_list *t)  { -	struct mr_table *mrt = (struct mr_table *)arg; +	struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer);  	unsigned long now;  	unsigned long expires;  	struct mfc_cache *c, *next; diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index a0ae1c9d37df..f49bd7897e95 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -188,7 +188,7 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp);  static void addrconf_dad_work(struct work_struct *w);  static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id);  static void addrconf_dad_run(struct inet6_dev *idev); -static void addrconf_rs_timer(unsigned long data); +static void addrconf_rs_timer(struct timer_list *t);  static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);  static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa); @@ -388,8 +388,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)  	rwlock_init(&ndev->lock);  	ndev->dev = dev;  	INIT_LIST_HEAD(&ndev->addr_list); -	setup_timer(&ndev->rs_timer, addrconf_rs_timer, -		    (unsigned long)ndev); +	timer_setup(&ndev->rs_timer, addrconf_rs_timer, 0);  	memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));  	if (ndev->cnf.stable_secret.initialized) @@ -3741,9 +3740,9 @@ restart:  	return 0;  } -static void addrconf_rs_timer(unsigned long data) +static void addrconf_rs_timer(struct timer_list *t)  { -	struct inet6_dev *idev = (struct inet6_dev *)data; +	struct inet6_dev *idev = from_timer(idev, t, rs_timer);  	struct net_device *dev = idev->dev;  	struct in6_addr lladdr; diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 9c24b85949c1..a2e1a864eb46 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -120,7 +120,7 @@ static void mrt6msg_netlink_event(struct mr6_table *mrt, struct sk_buff *pkt);  static int ip6mr_rtm_dumproute(struct sk_buff *skb,  			       struct netlink_callback *cb);  static void mroute_clean_tables(struct mr6_table *mrt, bool all); -static void ipmr_expire_process(unsigned long arg); +static void ipmr_expire_process(struct timer_list *t);  #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES  #define ip6mr_for_each_table(mrt, net) \ @@ -320,8 +320,7 @@ static struct mr6_table *ip6mr_new_table(struct net *net, u32 id)  	INIT_LIST_HEAD(&mrt->mfc6_unres_queue); -	setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process, -		    (unsigned long)mrt); +	timer_setup(&mrt->ipmr_expire_timer, ipmr_expire_process, 0);  #ifdef CONFIG_IPV6_PIMSM_V2  	mrt->mroute_reg_vif_num = -1; @@ -888,9 +887,9 @@ static void ipmr_do_expire_process(struct mr6_table *mrt)  		mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);  } -static void ipmr_expire_process(unsigned long arg) +static void ipmr_expire_process(struct timer_list *t)  { -	struct mr6_table *mrt = (struct mr6_table *)arg; +	struct mr6_table *mrt = from_timer(mrt, t, ipmr_expire_timer);  	if (!spin_trylock(&mfc_unres_lock)) {  		mod_timer(&mrt->ipmr_expire_timer, jiffies + 1); diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 12b7c27ce5ce..fc6d7d143f2c 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c @@ -75,10 +75,10 @@ static struct in6_addr mld2_all_mcr = MLD2_ALL_MCR_INIT;  static void igmp6_join_group(struct ifmcaddr6 *ma);  static void igmp6_leave_group(struct ifmcaddr6 *ma); -static void igmp6_timer_handler(unsigned long data); +static void igmp6_timer_handler(struct timer_list *t); -static void mld_gq_timer_expire(unsigned long data); -static void mld_ifc_timer_expire(unsigned long data); +static void mld_gq_timer_expire(struct timer_list *t); +static void mld_ifc_timer_expire(struct timer_list *t);  static void mld_ifc_event(struct inet6_dev *idev);  static void mld_add_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc);  static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc); @@ -839,7 +839,7 @@ static struct ifmcaddr6 *mca_alloc(struct inet6_dev *idev,  	if (!mc)  		return NULL; -	setup_timer(&mc->mca_timer, igmp6_timer_handler, (unsigned long)mc); +	timer_setup(&mc->mca_timer, igmp6_timer_handler, 0);  	mc->mca_addr = *addr;  	mc->idev = idev; /* reference taken by caller */ @@ -2083,9 +2083,9 @@ void ipv6_mc_dad_complete(struct inet6_dev *idev)  	}  } -static void mld_dad_timer_expire(unsigned long data) +static void mld_dad_timer_expire(struct timer_list *t)  { -	struct inet6_dev *idev = (struct inet6_dev *)data; +	struct inet6_dev *idev = from_timer(idev, t, mc_dad_timer);  	mld_send_initial_cr(idev);  	if (idev->mc_dad_count) { @@ -2432,18 +2432,18 @@ static void igmp6_leave_group(struct ifmcaddr6 *ma)  	}  } -static void mld_gq_timer_expire(unsigned long data) +static void mld_gq_timer_expire(struct timer_list *t)  { -	struct inet6_dev *idev = (struct inet6_dev *)data; +	struct inet6_dev *idev = from_timer(idev, t, mc_gq_timer);  	idev->mc_gq_running = 0;  	mld_send_report(idev, NULL);  	in6_dev_put(idev);  } -static void mld_ifc_timer_expire(unsigned long data) +static void mld_ifc_timer_expire(struct timer_list *t)  { -	struct inet6_dev *idev = (struct inet6_dev *)data; +	struct inet6_dev *idev = from_timer(idev, t, mc_ifc_timer);  	mld_send_cr(idev);  	if (idev->mc_ifc_count) { @@ -2462,9 +2462,9 @@ static void mld_ifc_event(struct inet6_dev *idev)  	mld_ifc_start_timer(idev, 1);  } -static void igmp6_timer_handler(unsigned long data) +static void igmp6_timer_handler(struct timer_list *t)  { -	struct ifmcaddr6 *ma = (struct ifmcaddr6 *) data; +	struct ifmcaddr6 *ma = from_timer(ma, t, mca_timer);  	if (mld_in_v1_mode(ma->idev))  		igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT); @@ -2552,14 +2552,11 @@ void ipv6_mc_init_dev(struct inet6_dev *idev)  	write_lock_bh(&idev->lock);  	spin_lock_init(&idev->mc_lock);  	idev->mc_gq_running = 0; -	setup_timer(&idev->mc_gq_timer, mld_gq_timer_expire, -			(unsigned long)idev); +	timer_setup(&idev->mc_gq_timer, mld_gq_timer_expire, 0);  	idev->mc_tomb = NULL;  	idev->mc_ifc_count = 0; -	setup_timer(&idev->mc_ifc_timer, mld_ifc_timer_expire, -			(unsigned long)idev); -	setup_timer(&idev->mc_dad_timer, mld_dad_timer_expire, -		    (unsigned long)idev); +	timer_setup(&idev->mc_ifc_timer, mld_ifc_timer_expire, 0); +	timer_setup(&idev->mc_dad_timer, mld_dad_timer_expire, 0);  	ipv6_mc_reset(idev);  	write_unlock_bh(&idev->lock);  } diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index a2b904a718c6..3ccf8dfb233e 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -529,9 +529,9 @@ struct ncsi_dev *ncsi_find_dev(struct net_device *dev)  	return NULL;  } -static void ncsi_request_timeout(unsigned long data) +static void ncsi_request_timeout(struct timer_list *t)  { -	struct ncsi_request *nr = (struct ncsi_request *)data; +	struct ncsi_request *nr = from_timer(nr, t, timer);  	struct ncsi_dev_priv *ndp = nr->ndp;  	unsigned long flags; @@ -1577,9 +1577,7 @@ struct ncsi_dev *ncsi_register_dev(struct net_device *dev,  	for (i = 0; i < ARRAY_SIZE(ndp->requests); i++) {  		ndp->requests[i].id = i;  		ndp->requests[i].ndp = ndp; -		setup_timer(&ndp->requests[i].timer, -			    ncsi_request_timeout, -			    (unsigned long)&ndp->requests[i]); +		timer_setup(&ndp->requests[i].timer, ncsi_request_timeout, 0);  	}  	spin_lock_irqsave(&ncsi_dev_lock, flags); diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c index 64778f9a8548..d6748a8a79c5 100644 --- a/net/netfilter/nf_conntrack_expect.c +++ b/net/netfilter/nf_conntrack_expect.c @@ -67,9 +67,9 @@ void nf_ct_unlink_expect_report(struct nf_conntrack_expect *exp,  }  EXPORT_SYMBOL_GPL(nf_ct_unlink_expect_report); -static void nf_ct_expectation_timed_out(unsigned long ul_expect) +static void nf_ct_expectation_timed_out(struct timer_list *t)  { -	struct nf_conntrack_expect *exp = (void *)ul_expect; +	struct nf_conntrack_expect *exp = from_timer(exp, t, timeout);  	spin_lock_bh(&nf_conntrack_expect_lock);  	nf_ct_unlink_expect(exp); @@ -368,8 +368,7 @@ static void nf_ct_expect_insert(struct nf_conntrack_expect *exp)  	/* two references : one for hash insert, one for the timer */  	refcount_add(2, &exp->use); -	setup_timer(&exp->timeout, nf_ct_expectation_timed_out, -		    (unsigned long)exp); +	timer_setup(&exp->timeout, nf_ct_expectation_timed_out, 0);  	helper = rcu_dereference_protected(master_help->helper,  					   lockdep_is_held(&nf_conntrack_expect_lock));  	if (helper) { diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c index cad6498f10b0..e5afab86381c 100644 --- a/net/netfilter/nfnetlink_log.c +++ b/net/netfilter/nfnetlink_log.c @@ -151,7 +151,7 @@ instance_put(struct nfulnl_instance *inst)  		call_rcu_bh(&inst->rcu, nfulnl_instance_free_rcu);  } -static void nfulnl_timer(unsigned long data); +static void nfulnl_timer(struct timer_list *t);  static struct nfulnl_instance *  instance_create(struct net *net, u_int16_t group_num, @@ -184,7 +184,7 @@ instance_create(struct net *net, u_int16_t group_num,  	/* needs to be two, since we _put() after creation */  	refcount_set(&inst->use, 2); -	setup_timer(&inst->timer, nfulnl_timer, (unsigned long)inst); +	timer_setup(&inst->timer, nfulnl_timer, 0);  	inst->net = get_net(net);  	inst->peer_user_ns = user_ns; @@ -377,9 +377,9 @@ __nfulnl_flush(struct nfulnl_instance *inst)  }  static void -nfulnl_timer(unsigned long data) +nfulnl_timer(struct timer_list *t)  { -	struct nfulnl_instance *inst = (struct nfulnl_instance *)data; +	struct nfulnl_instance *inst = from_timer(inst, t, timer);  	spin_lock_bh(&inst->lock);  	if (inst->skb) diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c index daf45da448fa..ee3421ad108d 100644 --- a/net/netfilter/xt_IDLETIMER.c +++ b/net/netfilter/xt_IDLETIMER.c @@ -107,9 +107,9 @@ static void idletimer_tg_work(struct work_struct *work)  	sysfs_notify(idletimer_tg_kobj, NULL, timer->attr.attr.name);  } -static void idletimer_tg_expired(unsigned long data) +static void idletimer_tg_expired(struct timer_list *t)  { -	struct idletimer_tg *timer = (struct idletimer_tg *) data; +	struct idletimer_tg *timer = from_timer(timer, t, timer);  	pr_debug("timer %s expired\n", timer->attr.attr.name); @@ -143,8 +143,7 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)  	list_add(&info->timer->entry, &idletimer_tg_list); -	setup_timer(&info->timer->timer, idletimer_tg_expired, -		    (unsigned long) info->timer); +	timer_setup(&info->timer->timer, idletimer_tg_expired, 0);  	info->timer->refcnt = 1;  	mod_timer(&info->timer->timer, diff --git a/net/netfilter/xt_LED.c b/net/netfilter/xt_LED.c index 3ba31c194cce..0971634e5444 100644 --- a/net/netfilter/xt_LED.c +++ b/net/netfilter/xt_LED.c @@ -85,9 +85,10 @@ led_tg(struct sk_buff *skb, const struct xt_action_param *par)  	return XT_CONTINUE;  } -static void led_timeout_callback(unsigned long data) +static void led_timeout_callback(struct timer_list *t)  { -	struct xt_led_info_internal *ledinternal = (struct xt_led_info_internal *)data; +	struct xt_led_info_internal *ledinternal = from_timer(ledinternal, t, +							      timer);  	led_trigger_event(&ledinternal->netfilter_led_trigger, LED_OFF);  } @@ -143,8 +144,7 @@ static int led_tg_check(const struct xt_tgchk_param *par)  	/* See if we need to set up a timer */  	if (ledinfo->delay > 0) -		setup_timer(&ledinternal->timer, led_timeout_callback, -			    (unsigned long)ledinternal); +		timer_setup(&ledinternal->timer, led_timeout_callback, 0);  	list_add_tail(&ledinternal->list, &xt_led_triggers); diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index c25e9b4179c3..074960154993 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c @@ -591,18 +591,18 @@ static int nci_close_device(struct nci_dev *ndev)  }  /* NCI command timer function */ -static void nci_cmd_timer(unsigned long arg) +static void nci_cmd_timer(struct timer_list *t)  { -	struct nci_dev *ndev = (void *) arg; +	struct nci_dev *ndev = from_timer(ndev, t, cmd_timer);  	atomic_set(&ndev->cmd_cnt, 1);  	queue_work(ndev->cmd_wq, &ndev->cmd_work);  }  /* NCI data exchange timer function */ -static void nci_data_timer(unsigned long arg) +static void nci_data_timer(struct timer_list *t)  { -	struct nci_dev *ndev = (void *) arg; +	struct nci_dev *ndev = from_timer(ndev, t, data_timer);  	set_bit(NCI_DATA_EXCHANGE_TO, &ndev->flags);  	queue_work(ndev->rx_wq, &ndev->rx_work); @@ -1232,10 +1232,8 @@ int nci_register_device(struct nci_dev *ndev)  	skb_queue_head_init(&ndev->rx_q);  	skb_queue_head_init(&ndev->tx_q); -	setup_timer(&ndev->cmd_timer, nci_cmd_timer, -		    (unsigned long) ndev); -	setup_timer(&ndev->data_timer, nci_data_timer, -		    (unsigned long) ndev); +	timer_setup(&ndev->cmd_timer, nci_cmd_timer, 0); +	timer_setup(&ndev->data_timer, nci_data_timer, 0);  	mutex_init(&ndev->req_lock);  	INIT_LIST_HEAD(&ndev->conn_info_list); diff --git a/net/rxrpc/call_object.c b/net/rxrpc/call_object.c index 4c7fbc6dcce7..994dc2df57e4 100644 --- a/net/rxrpc/call_object.c +++ b/net/rxrpc/call_object.c @@ -45,9 +45,9 @@ const char *const rxrpc_call_completions[NR__RXRPC_CALL_COMPLETIONS] = {  struct kmem_cache *rxrpc_call_jar; -static void rxrpc_call_timer_expired(unsigned long _call) +static void rxrpc_call_timer_expired(struct timer_list *t)  { -	struct rxrpc_call *call = (struct rxrpc_call *)_call; +	struct rxrpc_call *call = from_timer(call, t, timer);  	_enter("%d", call->debug_id); @@ -114,8 +114,7 @@ struct rxrpc_call *rxrpc_alloc_call(gfp_t gfp)  		goto nomem_2;  	mutex_init(&call->user_mutex); -	setup_timer(&call->timer, rxrpc_call_timer_expired, -		    (unsigned long)call); +	timer_setup(&call->timer, rxrpc_call_timer_expired, 0);  	INIT_WORK(&call->processor, &rxrpc_process_call);  	INIT_LIST_HEAD(&call->link);  	INIT_LIST_HEAD(&call->chan_wait_link); diff --git a/net/wireless/lib80211.c b/net/wireless/lib80211.c index 459611577d3d..801d4781a73b 100644 --- a/net/wireless/lib80211.c +++ b/net/wireless/lib80211.c @@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(lib80211_crypto_lock);  static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info,  					  int force);  static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info); -static void lib80211_crypt_deinit_handler(unsigned long data); +static void lib80211_crypt_deinit_handler(struct timer_list *t);  int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name,  				spinlock_t *lock) @@ -55,8 +55,8 @@ int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name,  	info->lock = lock;  	INIT_LIST_HEAD(&info->crypt_deinit_list); -	setup_timer(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler, -			(unsigned long)info); +	timer_setup(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler, +		    0);  	return 0;  } @@ -116,9 +116,10 @@ static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info)  	spin_unlock_irqrestore(info->lock, flags);  } -static void lib80211_crypt_deinit_handler(unsigned long data) +static void lib80211_crypt_deinit_handler(struct timer_list *t)  { -	struct lib80211_crypt_info *info = (struct lib80211_crypt_info *)data; +	struct lib80211_crypt_info *info = from_timer(info, t, +						      crypt_deinit_timer);  	unsigned long flags;  	lib80211_crypt_deinit_entries(info, 0); diff --git a/net/x25/x25_link.c b/net/x25/x25_link.c index e0cd04d28352..a6a8ab09b914 100644 --- a/net/x25/x25_link.c +++ b/net/x25/x25_link.c @@ -36,7 +36,7 @@  LIST_HEAD(x25_neigh_list);  DEFINE_RWLOCK(x25_neigh_list_lock); -static void x25_t20timer_expiry(unsigned long); +static void x25_t20timer_expiry(struct timer_list *);  static void x25_transmit_restart_confirmation(struct x25_neigh *nb);  static void x25_transmit_restart_request(struct x25_neigh *nb); @@ -49,9 +49,9 @@ static inline void x25_start_t20timer(struct x25_neigh *nb)  	mod_timer(&nb->t20timer, jiffies + nb->t20);  } -static void x25_t20timer_expiry(unsigned long param) +static void x25_t20timer_expiry(struct timer_list *t)  { -	struct x25_neigh *nb = (struct x25_neigh *)param; +	struct x25_neigh *nb = from_timer(nb, t, t20timer);  	x25_transmit_restart_request(nb); @@ -252,7 +252,7 @@ void x25_link_device_up(struct net_device *dev)  		return;  	skb_queue_head_init(&nb->queue); -	setup_timer(&nb->t20timer, x25_t20timer_expiry, (unsigned long)nb); +	timer_setup(&nb->t20timer, x25_t20timer_expiry, 0);  	dev_hold(dev);  	nb->dev      = dev; diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 1f5cee2269af..065d89606888 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -556,7 +556,7 @@ out:  	return HRTIMER_NORESTART;  } -static void xfrm_replay_timer_handler(unsigned long data); +static void xfrm_replay_timer_handler(struct timer_list *t);  struct xfrm_state *xfrm_state_alloc(struct net *net)  { @@ -574,8 +574,7 @@ struct xfrm_state *xfrm_state_alloc(struct net *net)  		INIT_HLIST_NODE(&x->byspi);  		tasklet_hrtimer_init(&x->mtimer, xfrm_timer_handler,  					CLOCK_BOOTTIME, HRTIMER_MODE_ABS); -		setup_timer(&x->rtimer, xfrm_replay_timer_handler, -				(unsigned long)x); +		timer_setup(&x->rtimer, xfrm_replay_timer_handler, 0);  		x->curlft.add_time = get_seconds();  		x->lft.soft_byte_limit = XFRM_INF;  		x->lft.soft_packet_limit = XFRM_INF; @@ -1879,9 +1878,9 @@ void xfrm_state_walk_done(struct xfrm_state_walk *walk, struct net *net)  }  EXPORT_SYMBOL(xfrm_state_walk_done); -static void xfrm_replay_timer_handler(unsigned long data) +static void xfrm_replay_timer_handler(struct timer_list *t)  { -	struct xfrm_state *x = (struct xfrm_state *)data; +	struct xfrm_state *x = from_timer(x, t, rtimer);  	spin_lock(&x->lock); | 
