Browse Source

Merge tag 'timers-conversion-next3' of https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux into timers/core

Pull the 3rd batch of timer conversions from Kees Cook:

 - various per-architecture conversions
 - several driver conversions not picked up by a specific maintainer
 - other Acked/Reviewed conversions to go through tip
Thomas Gleixner 7 years ago
parent
commit
c7c2f3d9e8
44 changed files with 215 additions and 249 deletions
  1. 8 18
      arch/arm/mach-footbridge/dc21285.c
  2. 6 9
      arch/arm/mach-pxa/lubbock.c
  3. 4 4
      arch/arm/mach-pxa/sharpsl_pm.c
  4. 3 1
      arch/ia64/include/asm/sn/bte.h
  5. 4 4
      arch/ia64/kernel/mca.c
  6. 2 3
      arch/ia64/kernel/salinfo.c
  7. 8 4
      arch/ia64/sn/kernel/bte.c
  8. 6 11
      arch/ia64/sn/kernel/bte_error.c
  9. 1 1
      arch/ia64/sn/kernel/huberror.c
  10. 2 3
      arch/ia64/sn/kernel/mca.c
  11. 12 14
      arch/mips/sgi-ip22/ip22-reset.c
  12. 10 11
      arch/mips/sgi-ip32/ip32-reset.c
  13. 2 3
      arch/powerpc/kernel/watchdog.c
  14. 9 7
      arch/sparc/kernel/led.c
  15. 3 5
      arch/x86/kernel/pci-calgary_64.c
  16. 4 5
      arch/xtensa/platforms/iss/console.c
  17. 5 8
      arch/xtensa/platforms/iss/network.c
  18. 3 4
      drivers/acpi/apei/ghes.c
  19. 4 6
      drivers/auxdisplay/img-ascii-lcd.c
  20. 2 2
      drivers/auxdisplay/panel.c
  21. 3 5
      drivers/char/hw_random/xgene-rng.c
  22. 3 4
      drivers/gpu/drm/etnaviv/etnaviv_gpu.c
  23. 4 6
      drivers/macintosh/smu.c
  24. 36 28
      drivers/media/usb/pvrusb2/pvrusb2-hdw.c
  25. 6 4
      drivers/memstick/host/jmb38x_ms.c
  26. 3 4
      drivers/memstick/host/r592.c
  27. 3 3
      drivers/memstick/host/tifm_ms.c
  28. 6 9
      drivers/misc/sgi-xp/xpc_main.c
  29. 6 9
      drivers/misc/sgi-xp/xpc_sn2.c
  30. 3 3
      drivers/pcmcia/bcm63xx_pcmcia.c
  31. 3 3
      drivers/pcmcia/bfin_cf_pcmcia.c
  32. 2 4
      drivers/pcmcia/i82365.c
  33. 4 4
      drivers/pcmcia/omap_cf.c
  34. 3 4
      drivers/pcmcia/pd6729.c
  35. 3 4
      drivers/pcmcia/soc_common.c
  36. 3 5
      drivers/pcmcia/tcic.c
  37. 3 4
      drivers/pcmcia/yenta_socket.c
  38. 4 4
      drivers/watchdog/cpwd.c
  39. 7 6
      drivers/watchdog/lpc18xx_wdt.c
  40. 1 3
      fs/ncpfs/inode.c
  41. 1 1
      fs/ncpfs/ncp_fs_sb.h
  42. 3 3
      fs/ncpfs/sock.c
  43. 2 2
      kernel/rcu/rcutorture.c
  44. 5 4
      kernel/rcu/tree_plugin.h

+ 8 - 18
arch/arm/mach-footbridge/dc21285.c

@@ -136,19 +136,14 @@ struct pci_ops dc21285_ops = {
 static struct timer_list serr_timer;
 static struct timer_list serr_timer;
 static struct timer_list perr_timer;
 static struct timer_list perr_timer;
 
 
-static void dc21285_enable_error(unsigned long __data)
+static void dc21285_enable_error(struct timer_list *timer)
 {
 {
-	switch (__data) {
-	case IRQ_PCI_SERR:
-		del_timer(&serr_timer);
-		break;
-
-	case IRQ_PCI_PERR:
-		del_timer(&perr_timer);
-		break;
-	}
+	del_timer(timer);
 
 
-	enable_irq(__data);
+	if (timer == &serr_timer)
+		enable_irq(IRQ_PCI_SERR)
+	else if (timer == &perr_timer)
+		enable_irq(IRQ_PCI_PERR);
 }
 }
 
 
 /*
 /*
@@ -323,13 +318,8 @@ void __init dc21285_preinit(void)
 		*CSR_PCICMD = (*CSR_PCICMD & 0xffff) | PCICMD_ERROR_BITS;
 		*CSR_PCICMD = (*CSR_PCICMD & 0xffff) | PCICMD_ERROR_BITS;
 	}
 	}
 
 
-	init_timer(&serr_timer);
-	init_timer(&perr_timer);
-
-	serr_timer.data = IRQ_PCI_SERR;
-	serr_timer.function = dc21285_enable_error;
-	perr_timer.data = IRQ_PCI_PERR;
-	perr_timer.function = dc21285_enable_error;
+	timer_setup(&serr_timer, dc21285_enable_error, 0);
+	timer_setup(&perr_timer, dc21285_enable_error, 0);
 
 
 	/*
 	/*
 	 * We don't care if these fail.
 	 * We don't care if these fail.

+ 6 - 9
arch/arm/mach-pxa/lubbock.c

@@ -381,14 +381,11 @@ static struct pxafb_mach_info sharp_lm8v31 = {
 
 
 #define	MMC_POLL_RATE		msecs_to_jiffies(1000)
 #define	MMC_POLL_RATE		msecs_to_jiffies(1000)
 
 
-static void lubbock_mmc_poll(unsigned long);
 static irq_handler_t mmc_detect_int;
 static irq_handler_t mmc_detect_int;
+static void *mmc_detect_int_data;
+static struct timer_list mmc_timer;
 
 
-static struct timer_list mmc_timer = {
-	.function	= lubbock_mmc_poll,
-};
-
-static void lubbock_mmc_poll(unsigned long data)
+static void lubbock_mmc_poll(struct timer_list *unused)
 {
 {
 	unsigned long flags;
 	unsigned long flags;
 
 
@@ -401,7 +398,7 @@ static void lubbock_mmc_poll(unsigned long data)
 	if (LUB_IRQ_SET_CLR & (1 << 0))
 	if (LUB_IRQ_SET_CLR & (1 << 0))
 		mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE);
 		mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE);
 	else {
 	else {
-		(void) mmc_detect_int(LUBBOCK_SD_IRQ, (void *)data);
+		(void) mmc_detect_int(LUBBOCK_SD_IRQ, mmc_detect_int_data);
 		enable_irq(LUBBOCK_SD_IRQ);
 		enable_irq(LUBBOCK_SD_IRQ);
 	}
 	}
 }
 }
@@ -421,8 +418,8 @@ static int lubbock_mci_init(struct device *dev,
 {
 {
 	/* detect card insert/eject */
 	/* detect card insert/eject */
 	mmc_detect_int = detect_int;
 	mmc_detect_int = detect_int;
-	init_timer(&mmc_timer);
-	mmc_timer.data = (unsigned long) data;
+	mmc_detect_int_data = data;
+	timer_setup(&mmc_timer, lubbock_mmc_poll, 0);
 	return request_irq(LUBBOCK_SD_IRQ, lubbock_detect_int,
 	return request_irq(LUBBOCK_SD_IRQ, lubbock_detect_int,
 			   0, "lubbock-sd-detect", data);
 			   0, "lubbock-sd-detect", data);
 }
 }

+ 4 - 4
arch/arm/mach-pxa/sharpsl_pm.c

@@ -341,7 +341,7 @@ static void sharpsl_charge_toggle(struct work_struct *private_)
 	sharpsl_pm.charge_start_time = jiffies;
 	sharpsl_pm.charge_start_time = jiffies;
 }
 }
 
 
-static void sharpsl_ac_timer(unsigned long data)
+static void sharpsl_ac_timer(struct timer_list *unused)
 {
 {
 	int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
 	int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
 
 
@@ -366,7 +366,7 @@ static irqreturn_t sharpsl_ac_isr(int irq, void *dev_id)
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
 }
 }
 
 
-static void sharpsl_chrg_full_timer(unsigned long data)
+static void sharpsl_chrg_full_timer(struct timer_list *unused)
 {
 {
 	dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies);
 	dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies);
 
 
@@ -841,9 +841,9 @@ static int sharpsl_pm_probe(struct platform_device *pdev)
 	sharpsl_pm.charge_mode = CHRG_OFF;
 	sharpsl_pm.charge_mode = CHRG_OFF;
 	sharpsl_pm.flags = 0;
 	sharpsl_pm.flags = 0;
 
 
-	setup_timer(&sharpsl_pm.ac_timer, sharpsl_ac_timer, 0UL);
+	timer_setup(&sharpsl_pm.ac_timer, sharpsl_ac_timer, 0);
 
 
-	setup_timer(&sharpsl_pm.chrg_full_timer, sharpsl_chrg_full_timer, 0UL);
+	timer_setup(&sharpsl_pm.chrg_full_timer, sharpsl_chrg_full_timer, 0);
 
 
 	led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
 	led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
 
 

+ 3 - 1
arch/ia64/include/asm/sn/bte.h

@@ -17,6 +17,8 @@
 #include <asm/sn/types.h>
 #include <asm/sn/types.h>
 #include <asm/sn/shub_mmr.h>
 #include <asm/sn/shub_mmr.h>
 
 
+struct nodepda_s;
+
 #define IBCT_NOTIFY             (0x1UL << 4)
 #define IBCT_NOTIFY             (0x1UL << 4)
 #define IBCT_ZFIL_MODE          (0x1UL << 0)
 #define IBCT_ZFIL_MODE          (0x1UL << 0)
 
 
@@ -210,7 +212,7 @@ struct bteinfo_s {
  */
  */
 extern bte_result_t bte_copy(u64, u64, u64, u64, void *);
 extern bte_result_t bte_copy(u64, u64, u64, u64, void *);
 extern bte_result_t bte_unaligned_copy(u64, u64, u64, u64);
 extern bte_result_t bte_unaligned_copy(u64, u64, u64, u64);
-extern void bte_error_handler(unsigned long);
+extern void bte_error_handler(struct nodepda_s *);
 
 
 #define bte_zero(dest, len, mode, notification) \
 #define bte_zero(dest, len, mode, notification) \
 	bte_copy(0, dest, len, ((mode) | BTE_ZERO_FILL), notification)
 	bte_copy(0, dest, len, ((mode) | BTE_ZERO_FILL), notification)

+ 4 - 4
arch/ia64/kernel/mca.c

@@ -1513,7 +1513,7 @@ ia64_mca_cmc_int_caller(int cmc_irq, void *arg)
  *
  *
  */
  */
 static void
 static void
-ia64_mca_cmc_poll (unsigned long dummy)
+ia64_mca_cmc_poll (struct timer_list *unused)
 {
 {
 	/* Trigger a CMC interrupt cascade  */
 	/* Trigger a CMC interrupt cascade  */
 	platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CMCP_VECTOR,
 	platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CMCP_VECTOR,
@@ -1590,7 +1590,7 @@ ia64_mca_cpe_int_caller(int cpe_irq, void *arg)
  *
  *
  */
  */
 static void
 static void
-ia64_mca_cpe_poll (unsigned long dummy)
+ia64_mca_cpe_poll (struct timer_list *unused)
 {
 {
 	/* Trigger a CPE interrupt cascade  */
 	/* Trigger a CPE interrupt cascade  */
 	platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CPEP_VECTOR,
 	platform_send_ipi(cpumask_first(cpu_online_mask), IA64_CPEP_VECTOR,
@@ -2098,7 +2098,7 @@ ia64_mca_late_init(void)
 		return 0;
 		return 0;
 
 
 	/* Setup the CMCI/P vector and handler */
 	/* Setup the CMCI/P vector and handler */
-	setup_timer(&cmc_poll_timer, ia64_mca_cmc_poll, 0UL);
+	timer_setup(&cmc_poll_timer, ia64_mca_cmc_poll, 0);
 
 
 	/* Unmask/enable the vector */
 	/* Unmask/enable the vector */
 	cmc_polling_enabled = 0;
 	cmc_polling_enabled = 0;
@@ -2109,7 +2109,7 @@ ia64_mca_late_init(void)
 #ifdef CONFIG_ACPI
 #ifdef CONFIG_ACPI
 	/* Setup the CPEI/P vector and handler */
 	/* Setup the CPEI/P vector and handler */
 	cpe_vector = acpi_request_vector(ACPI_INTERRUPT_CPEI);
 	cpe_vector = acpi_request_vector(ACPI_INTERRUPT_CPEI);
-	setup_timer(&cpe_poll_timer, ia64_mca_cpe_poll, 0UL);
+	timer_setup(&cpe_poll_timer, ia64_mca_cpe_poll, 0);
 
 
 	{
 	{
 		unsigned int irq;
 		unsigned int irq;

+ 2 - 3
arch/ia64/kernel/salinfo.c

@@ -263,7 +263,7 @@ salinfo_timeout_check(struct salinfo_data *data)
 }
 }
 
 
 static void
 static void
-salinfo_timeout (unsigned long arg)
+salinfo_timeout(struct timer_list *unused)
 {
 {
 	ia64_mlogbuf_dump();
 	ia64_mlogbuf_dump();
 	salinfo_timeout_check(salinfo_data + SAL_INFO_TYPE_MCA);
 	salinfo_timeout_check(salinfo_data + SAL_INFO_TYPE_MCA);
@@ -623,9 +623,8 @@ salinfo_init(void)
 
 
 	*sdir++ = salinfo_dir;
 	*sdir++ = salinfo_dir;
 
 
-	init_timer(&salinfo_timer);
+	timer_setup(&salinfo_timer, salinfo_timeout, 0);
 	salinfo_timer.expires = jiffies + SALINFO_TIMER_DELAY;
 	salinfo_timer.expires = jiffies + SALINFO_TIMER_DELAY;
-	salinfo_timer.function = &salinfo_timeout;
 	add_timer(&salinfo_timer);
 	add_timer(&salinfo_timer);
 
 
 	i = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "ia64/salinfo:online",
 	i = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "ia64/salinfo:online",

+ 8 - 4
arch/ia64/sn/kernel/bte.c

@@ -219,7 +219,7 @@ retry_bteop:
 				BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na) );
 				BTE_LNSTAT_LOAD(bte), *bte->most_rcnt_na) );
 			bte->bte_error_count++;
 			bte->bte_error_count++;
 			bte->bh_error = IBLS_ERROR;
 			bte->bh_error = IBLS_ERROR;
-			bte_error_handler((unsigned long)NODEPDA(bte->bte_cnode));
+			bte_error_handler(NODEPDA(bte->bte_cnode));
 			*bte->most_rcnt_na = BTE_WORD_AVAILABLE;
 			*bte->most_rcnt_na = BTE_WORD_AVAILABLE;
 			goto retry_bteop;
 			goto retry_bteop;
 		}
 		}
@@ -414,6 +414,12 @@ EXPORT_SYMBOL(bte_unaligned_copy);
  * Block Transfer Engine initialization functions.
  * Block Transfer Engine initialization functions.
  *
  *
  ***********************************************************************/
  ***********************************************************************/
+static void bte_recovery_timeout(struct timer_list *t)
+{
+	struct nodepda_s *nodepda = from_timer(nodepda, t, bte_recovery_timer);
+
+	bte_error_handler(nodepda);
+}
 
 
 /*
 /*
  * bte_init_node(nodepda, cnode)
  * bte_init_node(nodepda, cnode)
@@ -436,9 +442,7 @@ void bte_init_node(nodepda_t * mynodepda, cnodeid_t cnode)
 	 * will point at this one bte_recover structure to get the lock.
 	 * will point at this one bte_recover structure to get the lock.
 	 */
 	 */
 	spin_lock_init(&mynodepda->bte_recovery_lock);
 	spin_lock_init(&mynodepda->bte_recovery_lock);
-	init_timer(&mynodepda->bte_recovery_timer);
-	mynodepda->bte_recovery_timer.function = bte_error_handler;
-	mynodepda->bte_recovery_timer.data = (unsigned long)mynodepda;
+	timer_setup(&mynodepda->bte_recovery_timer, bte_recovery_timeout, 0);
 
 
 	for (i = 0; i < BTES_PER_NODE; i++) {
 	for (i = 0; i < BTES_PER_NODE; i++) {
 		u64 *base_addr;
 		u64 *base_addr;

+ 6 - 11
arch/ia64/sn/kernel/bte_error.c

@@ -27,15 +27,12 @@
  * transfers to be queued.
  * transfers to be queued.
  */
  */
 
 
-void bte_error_handler(unsigned long);
-
 /*
 /*
  * Wait until all BTE related CRBs are completed
  * Wait until all BTE related CRBs are completed
  * and then reset the interfaces.
  * and then reset the interfaces.
  */
  */
-int shub1_bte_error_handler(unsigned long _nodepda)
+static int shub1_bte_error_handler(struct nodepda_s *err_nodepda)
 {
 {
-	struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
 	struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
 	struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
 	nasid_t nasid;
 	nasid_t nasid;
 	int i;
 	int i;
@@ -131,9 +128,8 @@ int shub1_bte_error_handler(unsigned long _nodepda)
  * Wait until all BTE related CRBs are completed
  * Wait until all BTE related CRBs are completed
  * and then reset the interfaces.
  * and then reset the interfaces.
  */
  */
-int shub2_bte_error_handler(unsigned long _nodepda)
+static int shub2_bte_error_handler(struct nodepda_s *err_nodepda)
 {
 {
-	struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
 	struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
 	struct timer_list *recovery_timer = &err_nodepda->bte_recovery_timer;
 	struct bteinfo_s *bte;
 	struct bteinfo_s *bte;
 	nasid_t nasid;
 	nasid_t nasid;
@@ -170,9 +166,8 @@ int shub2_bte_error_handler(unsigned long _nodepda)
  * Wait until all BTE related CRBs are completed
  * Wait until all BTE related CRBs are completed
  * and then reset the interfaces.
  * and then reset the interfaces.
  */
  */
-void bte_error_handler(unsigned long _nodepda)
+void bte_error_handler(struct nodepda_s *err_nodepda)
 {
 {
-	struct nodepda_s *err_nodepda = (struct nodepda_s *)_nodepda;
 	spinlock_t *recovery_lock = &err_nodepda->bte_recovery_lock;
 	spinlock_t *recovery_lock = &err_nodepda->bte_recovery_lock;
 	int i;
 	int i;
 	unsigned long irq_flags;
 	unsigned long irq_flags;
@@ -199,12 +194,12 @@ void bte_error_handler(unsigned long _nodepda)
 	}
 	}
 
 
 	if (is_shub1()) {
 	if (is_shub1()) {
-		if (shub1_bte_error_handler(_nodepda)) {
+		if (shub1_bte_error_handler(err_nodepda)) {
 			spin_unlock_irqrestore(recovery_lock, irq_flags);
 			spin_unlock_irqrestore(recovery_lock, irq_flags);
 			return;
 			return;
 		}
 		}
 	} else {
 	} else {
-		if (shub2_bte_error_handler(_nodepda)) {
+		if (shub2_bte_error_handler(err_nodepda)) {
 			spin_unlock_irqrestore(recovery_lock, irq_flags);
 			spin_unlock_irqrestore(recovery_lock, irq_flags);
 			return;
 			return;
 		}
 		}
@@ -255,6 +250,6 @@ bte_crb_error_handler(cnodeid_t cnode, int btenum,
 
 
 	BTE_PRINTK(("Got an error on cnode %d bte %d: HW error type 0x%x\n",
 	BTE_PRINTK(("Got an error on cnode %d bte %d: HW error type 0x%x\n",
 		bte->bte_cnode, bte->bte_num, ioe->ie_errortype));
 		bte->bte_cnode, bte->bte_num, ioe->ie_errortype));
-	bte_error_handler((unsigned long) NODEPDA(cnode));
+	bte_error_handler(NODEPDA(cnode));
 }
 }
 
 

+ 1 - 1
arch/ia64/sn/kernel/huberror.c

@@ -50,7 +50,7 @@ static irqreturn_t hub_eint_handler(int irq, void *arg)
 			if ((int)ret_stuff.v0)
 			if ((int)ret_stuff.v0)
 				panic("%s: Fatal TIO Error", __func__);
 				panic("%s: Fatal TIO Error", __func__);
 		} else
 		} else
-			bte_error_handler((unsigned long)NODEPDA(nasid_to_cnodeid(nasid)));
+			bte_error_handler(NODEPDA(nasid_to_cnodeid(nasid)));
 
 
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
 }
 }

+ 2 - 3
arch/ia64/sn/kernel/mca.c

@@ -72,7 +72,7 @@ static void sn_cpei_handler(int irq, void *devid, struct pt_regs *regs)
 	ia64_sn_plat_cpei_handler();
 	ia64_sn_plat_cpei_handler();
 }
 }
 
 
-static void sn_cpei_timer_handler(unsigned long dummy)
+static void sn_cpei_timer_handler(struct timer_list *unused)
 {
 {
 	sn_cpei_handler(-1, NULL, NULL);
 	sn_cpei_handler(-1, NULL, NULL);
 	mod_timer(&sn_cpei_timer, jiffies + CPEI_INTERVAL);
 	mod_timer(&sn_cpei_timer, jiffies + CPEI_INTERVAL);
@@ -80,9 +80,8 @@ static void sn_cpei_timer_handler(unsigned long dummy)
 
 
 void sn_init_cpei_timer(void)
 void sn_init_cpei_timer(void)
 {
 {
-	init_timer(&sn_cpei_timer);
+	timer_setup(&sn_cpei_timer, sn_cpei_timer_handler, 0);
 	sn_cpei_timer.expires = jiffies + CPEI_INTERVAL;
 	sn_cpei_timer.expires = jiffies + CPEI_INTERVAL;
-	sn_cpei_timer.function = sn_cpei_timer_handler;
 	add_timer(&sn_cpei_timer);
 	add_timer(&sn_cpei_timer);
 }
 }
 
 

+ 12 - 14
arch/mips/sgi-ip22/ip22-reset.c

@@ -38,6 +38,7 @@
 #define PANIC_FREQ		(HZ / 8)
 #define PANIC_FREQ		(HZ / 8)
 
 
 static struct timer_list power_timer, blink_timer, debounce_timer;
 static struct timer_list power_timer, blink_timer, debounce_timer;
+static unsigned long blink_timer_timeout;
 
 
 #define MACHINE_PANICED		1
 #define MACHINE_PANICED		1
 #define MACHINE_SHUTTING_DOWN	2
 #define MACHINE_SHUTTING_DOWN	2
@@ -81,21 +82,21 @@ static void __noreturn sgi_machine_halt(void)
 	ArcEnterInteractiveMode();
 	ArcEnterInteractiveMode();
 }
 }
 
 
-static void power_timeout(unsigned long data)
+static void power_timeout(struct timer_list *unused)
 {
 {
 	sgi_machine_power_off();
 	sgi_machine_power_off();
 }
 }
 
 
-static void blink_timeout(unsigned long data)
+static void blink_timeout(struct timer_list *unused)
 {
 {
 	/* XXX fix this for fullhouse  */
 	/* XXX fix this for fullhouse  */
 	sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF);
 	sgi_ioc_reset ^= (SGIOC_RESET_LC0OFF|SGIOC_RESET_LC1OFF);
 	sgioc->reset = sgi_ioc_reset;
 	sgioc->reset = sgi_ioc_reset;
 
 
-	mod_timer(&blink_timer, jiffies + data);
+	mod_timer(&blink_timer, jiffies + blink_timer_timeout);
 }
 }
 
 
-static void debounce(unsigned long data)
+static void debounce(struct timer_list *unused)
 {
 {
 	del_timer(&debounce_timer);
 	del_timer(&debounce_timer);
 	if (sgint->istat1 & SGINT_ISTAT1_PWR) {
 	if (sgint->istat1 & SGINT_ISTAT1_PWR) {
@@ -128,11 +129,10 @@ static inline void power_button(void)
 	}
 	}
 
 
 	machine_state |= MACHINE_SHUTTING_DOWN;
 	machine_state |= MACHINE_SHUTTING_DOWN;
-	blink_timer.data = POWERDOWN_FREQ;
-	blink_timeout(POWERDOWN_FREQ);
+	blink_timer_timeout = POWERDOWN_FREQ;
+	blink_timeout(&blink_timer);
 
 
-	init_timer(&power_timer);
-	power_timer.function = power_timeout;
+	timer_setup(&power_timer, power_timeout, 0);
 	power_timer.expires = jiffies + POWERDOWN_TIMEOUT * HZ;
 	power_timer.expires = jiffies + POWERDOWN_TIMEOUT * HZ;
 	add_timer(&power_timer);
 	add_timer(&power_timer);
 }
 }
@@ -147,8 +147,7 @@ static irqreturn_t panel_int(int irq, void *dev_id)
 	if (sgint->istat1 & SGINT_ISTAT1_PWR) {
 	if (sgint->istat1 & SGINT_ISTAT1_PWR) {
 		/* Wait until interrupt goes away */
 		/* Wait until interrupt goes away */
 		disable_irq_nosync(SGI_PANEL_IRQ);
 		disable_irq_nosync(SGI_PANEL_IRQ);
-		init_timer(&debounce_timer);
-		debounce_timer.function = debounce;
+		timer_setup(&debounce_timer, debounce, 0);
 		debounce_timer.expires = jiffies + 5;
 		debounce_timer.expires = jiffies + 5;
 		add_timer(&debounce_timer);
 		add_timer(&debounce_timer);
 	}
 	}
@@ -171,8 +170,8 @@ static int panic_event(struct notifier_block *this, unsigned long event,
 		return NOTIFY_DONE;
 		return NOTIFY_DONE;
 	machine_state |= MACHINE_PANICED;
 	machine_state |= MACHINE_PANICED;
 
 
-	blink_timer.data = PANIC_FREQ;
-	blink_timeout(PANIC_FREQ);
+	blink_timer_timeout = PANIC_FREQ;
+	blink_timeout(&blink_timer);
 
 
 	return NOTIFY_DONE;
 	return NOTIFY_DONE;
 }
 }
@@ -195,8 +194,7 @@ static int __init reboot_setup(void)
 		return res;
 		return res;
 	}
 	}
 
 
-	init_timer(&blink_timer);
-	blink_timer.function = blink_timeout;
+	timer_setup(&blink_timer, blink_timeout, 0);
 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
 
 
 	return 0;
 	return 0;

+ 10 - 11
arch/mips/sgi-ip32/ip32-reset.c

@@ -38,6 +38,7 @@
 extern struct platform_device ip32_rtc_device;
 extern struct platform_device ip32_rtc_device;
 
 
 static struct timer_list power_timer, blink_timer;
 static struct timer_list power_timer, blink_timer;
+static unsigned long blink_timer_timeout;
 static int has_panicked, shutting_down;
 static int has_panicked, shutting_down;
 
 
 static __noreturn void ip32_poweroff(void *data)
 static __noreturn void ip32_poweroff(void *data)
@@ -71,11 +72,11 @@ static void ip32_machine_restart(char *cmd)
 	unreachable();
 	unreachable();
 }
 }
 
 
-static void blink_timeout(unsigned long data)
+static void blink_timeout(struct timer_list *unused)
 {
 {
 	unsigned long led = mace->perif.ctrl.misc ^ MACEISA_LED_RED;
 	unsigned long led = mace->perif.ctrl.misc ^ MACEISA_LED_RED;
 	mace->perif.ctrl.misc = led;
 	mace->perif.ctrl.misc = led;
-	mod_timer(&blink_timer, jiffies + data);
+	mod_timer(&blink_timer, jiffies + blink_timer_timeout);
 }
 }
 
 
 static void ip32_machine_halt(void)
 static void ip32_machine_halt(void)
@@ -83,7 +84,7 @@ static void ip32_machine_halt(void)
 	ip32_poweroff(&ip32_rtc_device);
 	ip32_poweroff(&ip32_rtc_device);
 }
 }
 
 
-static void power_timeout(unsigned long data)
+static void power_timeout(struct timer_list *unused)
 {
 {
 	ip32_poweroff(&ip32_rtc_device);
 	ip32_poweroff(&ip32_rtc_device);
 }
 }
@@ -99,11 +100,10 @@ void ip32_prepare_poweroff(void)
 	}
 	}
 
 
 	shutting_down = 1;
 	shutting_down = 1;
-	blink_timer.data = POWERDOWN_FREQ;
-	blink_timeout(POWERDOWN_FREQ);
+	blink_timer_timeout = POWERDOWN_FREQ;
+	blink_timeout(&blink_timer);
 
 
-	init_timer(&power_timer);
-	power_timer.function = power_timeout;
+	timer_setup(&power_timer, power_timeout, 0);
 	power_timer.expires = jiffies + POWERDOWN_TIMEOUT * HZ;
 	power_timer.expires = jiffies + POWERDOWN_TIMEOUT * HZ;
 	add_timer(&power_timer);
 	add_timer(&power_timer);
 }
 }
@@ -121,8 +121,8 @@ static int panic_event(struct notifier_block *this, unsigned long event,
 	led = mace->perif.ctrl.misc | MACEISA_LED_GREEN;
 	led = mace->perif.ctrl.misc | MACEISA_LED_GREEN;
 	mace->perif.ctrl.misc = led;
 	mace->perif.ctrl.misc = led;
 
 
-	blink_timer.data = PANIC_FREQ;
-	blink_timeout(PANIC_FREQ);
+	blink_timer_timeout = PANIC_FREQ;
+	blink_timeout(&blink_timer);
 
 
 	return NOTIFY_DONE;
 	return NOTIFY_DONE;
 }
 }
@@ -143,8 +143,7 @@ static __init int ip32_reboot_setup(void)
 	_machine_halt = ip32_machine_halt;
 	_machine_halt = ip32_machine_halt;
 	pm_power_off = ip32_machine_halt;
 	pm_power_off = ip32_machine_halt;
 
 
-	init_timer(&blink_timer);
-	blink_timer.function = blink_timeout;
+	timer_setup(&blink_timer, blink_timeout, 0);
 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
 
 
 	return 0;
 	return 0;

+ 2 - 3
arch/powerpc/kernel/watchdog.c

@@ -261,9 +261,8 @@ static void wd_timer_reset(unsigned int cpu, struct timer_list *t)
 	add_timer_on(t, cpu);
 	add_timer_on(t, cpu);
 }
 }
 
 
-static void wd_timer_fn(unsigned long data)
+static void wd_timer_fn(struct timer_list *t)
 {
 {
-	struct timer_list *t = this_cpu_ptr(&wd_timer);
 	int cpu = smp_processor_id();
 	int cpu = smp_processor_id();
 
 
 	watchdog_timer_interrupt(cpu);
 	watchdog_timer_interrupt(cpu);
@@ -287,7 +286,7 @@ static void start_watchdog_timer_on(unsigned int cpu)
 
 
 	per_cpu(wd_timer_tb, cpu) = get_tb();
 	per_cpu(wd_timer_tb, cpu) = get_tb();
 
 
-	setup_pinned_timer(t, wd_timer_fn, 0);
+	timer_setup(t, wd_timer_fn, TIMER_PINNED);
 	wd_timer_reset(cpu, t);
 	wd_timer_reset(cpu, t);
 }
 }
 
 

+ 9 - 7
arch/sparc/kernel/led.c

@@ -31,19 +31,20 @@ static inline void led_toggle(void)
 }
 }
 
 
 static struct timer_list led_blink_timer;
 static struct timer_list led_blink_timer;
+static unsigned long led_blink_timer_timeout;
 
 
-static void led_blink(unsigned long timeout)
+static void led_blink(struct timer_list *unused)
 {
 {
+	unsigned long timeout = led_blink_timer_timeout;
+
 	led_toggle();
 	led_toggle();
 
 
 	/* reschedule */
 	/* reschedule */
 	if (!timeout) { /* blink according to load */
 	if (!timeout) { /* blink according to load */
 		led_blink_timer.expires = jiffies +
 		led_blink_timer.expires = jiffies +
 			((1 + (avenrun[0] >> FSHIFT)) * HZ);
 			((1 + (avenrun[0] >> FSHIFT)) * HZ);
-		led_blink_timer.data = 0;
 	} else { /* blink at user specified interval */
 	} else { /* blink at user specified interval */
 		led_blink_timer.expires = jiffies + (timeout * HZ);
 		led_blink_timer.expires = jiffies + (timeout * HZ);
-		led_blink_timer.data = timeout;
 	}
 	}
 	add_timer(&led_blink_timer);
 	add_timer(&led_blink_timer);
 }
 }
@@ -88,9 +89,11 @@ static ssize_t led_proc_write(struct file *file, const char __user *buffer,
 	} else if (!strcmp(buf, "toggle")) {
 	} else if (!strcmp(buf, "toggle")) {
 		led_toggle();
 		led_toggle();
 	} else if ((*buf > '0') && (*buf <= '9')) {
 	} else if ((*buf > '0') && (*buf <= '9')) {
-		led_blink(simple_strtoul(buf, NULL, 10));
+		led_blink_timer_timeout = simple_strtoul(buf, NULL, 10);
+		led_blink(&led_blink_timer);
 	} else if (!strcmp(buf, "load")) {
 	} else if (!strcmp(buf, "load")) {
-		led_blink(0);
+		led_blink_timer_timeout = 0;
+		led_blink(&led_blink_timer);
 	} else {
 	} else {
 		auxio_set_led(AUXIO_LED_OFF);
 		auxio_set_led(AUXIO_LED_OFF);
 	}
 	}
@@ -115,8 +118,7 @@ static struct proc_dir_entry *led;
 
 
 static int __init led_init(void)
 static int __init led_init(void)
 {
 {
-	init_timer(&led_blink_timer);
-	led_blink_timer.function = led_blink;
+	timer_setup(&led_blink_timer, led_blink, 0);
 
 
 	led = proc_create("led", 0, NULL, &led_proc_fops);
 	led = proc_create("led", 0, NULL, &led_proc_fops);
 	if (!led)
 	if (!led)

+ 3 - 5
arch/x86/kernel/pci-calgary_64.c

@@ -898,10 +898,9 @@ static void calioc2_dump_error_regs(struct iommu_table *tbl)
 	       PHB_ROOT_COMPLEX_STATUS);
 	       PHB_ROOT_COMPLEX_STATUS);
 }
 }
 
 
-static void calgary_watchdog(unsigned long data)
+static void calgary_watchdog(struct timer_list *t)
 {
 {
-	struct pci_dev *dev = (struct pci_dev *)data;
-	struct iommu_table *tbl = pci_iommu(dev->bus);
+	struct iommu_table *tbl = from_timer(tbl, t, watchdog_timer);
 	void __iomem *bbar = tbl->bbar;
 	void __iomem *bbar = tbl->bbar;
 	u32 val32;
 	u32 val32;
 	void __iomem *target;
 	void __iomem *target;
@@ -1016,8 +1015,7 @@ static void __init calgary_enable_translation(struct pci_dev *dev)
 	writel(cpu_to_be32(val32), target);
 	writel(cpu_to_be32(val32), target);
 	readl(target); /* flush */
 	readl(target); /* flush */
 
 
-	setup_timer(&tbl->watchdog_timer, &calgary_watchdog,
-		    (unsigned long)dev);
+	timer_setup(&tbl->watchdog_timer, calgary_watchdog, 0);
 	mod_timer(&tbl->watchdog_timer, jiffies);
 	mod_timer(&tbl->watchdog_timer, jiffies);
 }
 }
 
 

+ 4 - 5
arch/xtensa/platforms/iss/console.c

@@ -47,15 +47,14 @@ static char *serial_name = "ISS serial driver";
  * initialization for the tty structure.
  * initialization for the tty structure.
  */
  */
 
 
-static void rs_poll(unsigned long);
+static void rs_poll(struct timer_list *);
 
 
 static int rs_open(struct tty_struct *tty, struct file * filp)
 static int rs_open(struct tty_struct *tty, struct file * filp)
 {
 {
 	tty->port = &serial_port;
 	tty->port = &serial_port;
 	spin_lock_bh(&timer_lock);
 	spin_lock_bh(&timer_lock);
 	if (tty->count == 1) {
 	if (tty->count == 1) {
-		setup_timer(&serial_timer, rs_poll,
-				(unsigned long)&serial_port);
+		timer_setup(&serial_timer, rs_poll, 0);
 		mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);
 		mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);
 	}
 	}
 	spin_unlock_bh(&timer_lock);
 	spin_unlock_bh(&timer_lock);
@@ -92,9 +91,9 @@ static int rs_write(struct tty_struct * tty,
 	return count;
 	return count;
 }
 }
 
 
-static void rs_poll(unsigned long priv)
+static void rs_poll(struct timer_list *unused)
 {
 {
-	struct tty_port *port = (struct tty_port *)priv;
+	struct tty_port *port = &serial_port;
 	int i = 0;
 	int i = 0;
 	int rd = 1;
 	int rd = 1;
 	unsigned char c;
 	unsigned char c;

+ 5 - 8
arch/xtensa/platforms/iss/network.c

@@ -349,9 +349,9 @@ static int iss_net_poll(void)
 }
 }
 
 
 
 
-static void iss_net_timer(unsigned long priv)
+static void iss_net_timer(struct timer_list *t)
 {
 {
-	struct iss_net_private *lp = (struct iss_net_private *)priv;
+	struct iss_net_private *lp = from_timer(lp, t, timer);
 
 
 	iss_net_poll();
 	iss_net_poll();
 	spin_lock(&lp->lock);
 	spin_lock(&lp->lock);
@@ -386,10 +386,8 @@ static int iss_net_open(struct net_device *dev)
 	spin_unlock_bh(&opened_lock);
 	spin_unlock_bh(&opened_lock);
 	spin_lock_bh(&lp->lock);
 	spin_lock_bh(&lp->lock);
 
 
-	init_timer(&lp->timer);
+	timer_setup(&lp->timer, iss_net_timer, 0);
 	lp->timer_val = ISS_NET_TIMER_VALUE;
 	lp->timer_val = ISS_NET_TIMER_VALUE;
-	lp->timer.data = (unsigned long) lp;
-	lp->timer.function = iss_net_timer;
 	mod_timer(&lp->timer, jiffies + lp->timer_val);
 	mod_timer(&lp->timer, jiffies + lp->timer_val);
 
 
 out:
 out:
@@ -482,7 +480,7 @@ static int iss_net_change_mtu(struct net_device *dev, int new_mtu)
 	return -EINVAL;
 	return -EINVAL;
 }
 }
 
 
-void iss_net_user_timer_expire(unsigned long _conn)
+void iss_net_user_timer_expire(struct timer_list *unused)
 {
 {
 }
 }
 
 
@@ -582,8 +580,7 @@ static int iss_net_configure(int index, char *init)
 		return 1;
 		return 1;
 	}
 	}
 
 
-	init_timer(&lp->tl);
-	lp->tl.function = iss_net_user_timer_expire;
+	timer_setup(&lp->tl, iss_net_user_timer_expire, 0);
 
 
 	return 0;
 	return 0;
 
 

+ 3 - 4
drivers/acpi/apei/ghes.c

@@ -774,9 +774,9 @@ static void ghes_add_timer(struct ghes *ghes)
 	add_timer(&ghes->timer);
 	add_timer(&ghes->timer);
 }
 }
 
 
-static void ghes_poll_func(unsigned long data)
+static void ghes_poll_func(struct timer_list *t)
 {
 {
-	struct ghes *ghes = (void *)data;
+	struct ghes *ghes = from_timer(ghes, t, timer);
 
 
 	ghes_proc(ghes);
 	ghes_proc(ghes);
 	if (!(ghes->flags & GHES_EXITING))
 	if (!(ghes->flags & GHES_EXITING))
@@ -1147,8 +1147,7 @@ static int ghes_probe(struct platform_device *ghes_dev)
 
 
 	switch (generic->notify.type) {
 	switch (generic->notify.type) {
 	case ACPI_HEST_NOTIFY_POLLED:
 	case ACPI_HEST_NOTIFY_POLLED:
-		setup_deferrable_timer(&ghes->timer, ghes_poll_func,
-				       (unsigned long)ghes);
+		timer_setup(&ghes->timer, ghes_poll_func, TIMER_DEFERRABLE);
 		ghes_add_timer(ghes);
 		ghes_add_timer(ghes);
 		break;
 		break;
 	case ACPI_HEST_NOTIFY_EXTERNAL:
 	case ACPI_HEST_NOTIFY_EXTERNAL:

+ 4 - 6
drivers/auxdisplay/img-ascii-lcd.c

@@ -229,9 +229,9 @@ MODULE_DEVICE_TABLE(of, img_ascii_lcd_matches);
  * Scroll the current message along the LCD by one character, rearming the
  * Scroll the current message along the LCD by one character, rearming the
  * timer if required.
  * timer if required.
  */
  */
-static void img_ascii_lcd_scroll(unsigned long arg)
+static void img_ascii_lcd_scroll(struct timer_list *t)
 {
 {
-	struct img_ascii_lcd_ctx *ctx = (struct img_ascii_lcd_ctx *)arg;
+	struct img_ascii_lcd_ctx *ctx = from_timer(ctx, t, timer);
 	unsigned int i, ch = ctx->scroll_pos;
 	unsigned int i, ch = ctx->scroll_pos;
 	unsigned int num_chars = ctx->cfg->num_chars;
 	unsigned int num_chars = ctx->cfg->num_chars;
 
 
@@ -299,7 +299,7 @@ static int img_ascii_lcd_display(struct img_ascii_lcd_ctx *ctx,
 	ctx->scroll_pos = 0;
 	ctx->scroll_pos = 0;
 
 
 	/* update the LCD */
 	/* update the LCD */
-	img_ascii_lcd_scroll((unsigned long)ctx);
+	img_ascii_lcd_scroll(&ctx->timer);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -395,9 +395,7 @@ static int img_ascii_lcd_probe(struct platform_device *pdev)
 	ctx->scroll_rate = HZ / 2;
 	ctx->scroll_rate = HZ / 2;
 
 
 	/* initialise a timer for scrolling the message */
 	/* initialise a timer for scrolling the message */
-	init_timer(&ctx->timer);
-	ctx->timer.function = img_ascii_lcd_scroll;
-	ctx->timer.data = (unsigned long)ctx;
+	timer_setup(&ctx->timer, img_ascii_lcd_scroll, 0);
 
 
 	platform_set_drvdata(pdev, ctx);
 	platform_set_drvdata(pdev, ctx);
 
 

+ 2 - 2
drivers/auxdisplay/panel.c

@@ -1396,7 +1396,7 @@ static void panel_process_inputs(void)
 	}
 	}
 }
 }
 
 
-static void panel_scan_timer(void)
+static void panel_scan_timer(struct timer_list *unused)
 {
 {
 	if (keypad.enabled && keypad_initialized) {
 	if (keypad.enabled && keypad_initialized) {
 		if (spin_trylock_irq(&pprt_lock)) {
 		if (spin_trylock_irq(&pprt_lock)) {
@@ -1421,7 +1421,7 @@ static void init_scan_timer(void)
 	if (scan_timer.function)
 	if (scan_timer.function)
 		return;		/* already started */
 		return;		/* already started */
 
 
-	setup_timer(&scan_timer, (void *)&panel_scan_timer, 0);
+	timer_setup(&scan_timer, panel_scan_timer, 0);
 	scan_timer.expires = jiffies + INPUT_POLL_TIME;
 	scan_timer.expires = jiffies + INPUT_POLL_TIME;
 	add_timer(&scan_timer);
 	add_timer(&scan_timer);
 }
 }

+ 3 - 5
drivers/char/hw_random/xgene-rng.c

@@ -100,9 +100,9 @@ struct xgene_rng_dev {
 	struct clk *clk;
 	struct clk *clk;
 };
 };
 
 
-static void xgene_rng_expired_timer(unsigned long arg)
+static void xgene_rng_expired_timer(struct timer_list *t)
 {
 {
-	struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) arg;
+	struct xgene_rng_dev *ctx = from_timer(ctx, t, failure_timer);
 
 
 	/* Clear failure counter as timer expired */
 	/* Clear failure counter as timer expired */
 	disable_irq(ctx->irq);
 	disable_irq(ctx->irq);
@@ -113,8 +113,6 @@ static void xgene_rng_expired_timer(unsigned long arg)
 
 
 static void xgene_rng_start_timer(struct xgene_rng_dev *ctx)
 static void xgene_rng_start_timer(struct xgene_rng_dev *ctx)
 {
 {
-	ctx->failure_timer.data = (unsigned long) ctx;
-	ctx->failure_timer.function = xgene_rng_expired_timer;
 	ctx->failure_timer.expires = jiffies + 120 * HZ;
 	ctx->failure_timer.expires = jiffies + 120 * HZ;
 	add_timer(&ctx->failure_timer);
 	add_timer(&ctx->failure_timer);
 }
 }
@@ -292,7 +290,7 @@ static int xgene_rng_init(struct hwrng *rng)
 	struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) rng->priv;
 	struct xgene_rng_dev *ctx = (struct xgene_rng_dev *) rng->priv;
 
 
 	ctx->failure_cnt = 0;
 	ctx->failure_cnt = 0;
-	init_timer(&ctx->failure_timer);
+	timer_setup(&ctx->failure_timer, xgene_rng_expired_timer, 0);
 
 
 	ctx->revision = readl(ctx->csr_base + RNG_EIP_REV);
 	ctx->revision = readl(ctx->csr_base + RNG_EIP_REV);
 
 

+ 3 - 4
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

@@ -975,9 +975,9 @@ static void hangcheck_timer_reset(struct etnaviv_gpu *gpu)
 		  round_jiffies_up(jiffies + DRM_ETNAVIV_HANGCHECK_JIFFIES));
 		  round_jiffies_up(jiffies + DRM_ETNAVIV_HANGCHECK_JIFFIES));
 }
 }
 
 
-static void hangcheck_handler(unsigned long data)
+static void hangcheck_handler(struct timer_list *t)
 {
 {
-	struct etnaviv_gpu *gpu = (struct etnaviv_gpu *)data;
+	struct etnaviv_gpu *gpu = from_timer(gpu, t, hangcheck_timer);
 	u32 fence = gpu->completed_fence;
 	u32 fence = gpu->completed_fence;
 	bool progress = false;
 	bool progress = false;
 
 
@@ -1648,8 +1648,7 @@ static int etnaviv_gpu_bind(struct device *dev, struct device *master,
 	INIT_WORK(&gpu->recover_work, recover_worker);
 	INIT_WORK(&gpu->recover_work, recover_worker);
 	init_waitqueue_head(&gpu->fence_event);
 	init_waitqueue_head(&gpu->fence_event);
 
 
-	setup_deferrable_timer(&gpu->hangcheck_timer, hangcheck_handler,
-			       (unsigned long)gpu);
+	timer_setup(&gpu->hangcheck_timer, hangcheck_handler, TIMER_DEFERRABLE);
 
 
 	priv->gpu[priv->num_gpus++] = gpu;
 	priv->gpu[priv->num_gpus++] = gpu;
 
 

+ 4 - 6
drivers/macintosh/smu.c

@@ -103,7 +103,7 @@ static DEFINE_MUTEX(smu_part_access);
 static int smu_irq_inited;
 static int smu_irq_inited;
 static unsigned long smu_cmdbuf_abs;
 static unsigned long smu_cmdbuf_abs;
 
 
-static void smu_i2c_retry(unsigned long data);
+static void smu_i2c_retry(struct timer_list *t);
 
 
 /*
 /*
  * SMU driver low level stuff
  * SMU driver low level stuff
@@ -582,9 +582,7 @@ static int smu_late_init(void)
 	if (!smu)
 	if (!smu)
 		return 0;
 		return 0;
 
 
-	init_timer(&smu->i2c_timer);
-	smu->i2c_timer.function = smu_i2c_retry;
-	smu->i2c_timer.data = (unsigned long)smu;
+	timer_setup(&smu->i2c_timer, smu_i2c_retry, 0);
 
 
 	if (smu->db_node) {
 	if (smu->db_node) {
 		smu->db_irq = irq_of_parse_and_map(smu->db_node, 0);
 		smu->db_irq = irq_of_parse_and_map(smu->db_node, 0);
@@ -755,7 +753,7 @@ static void smu_i2c_complete_command(struct smu_i2c_cmd *cmd, int fail)
 }
 }
 
 
 
 
-static void smu_i2c_retry(unsigned long data)
+static void smu_i2c_retry(struct timer_list *unused)
 {
 {
 	struct smu_i2c_cmd	*cmd = smu->cmd_i2c_cur;
 	struct smu_i2c_cmd	*cmd = smu->cmd_i2c_cur;
 
 
@@ -795,7 +793,7 @@ static void smu_i2c_low_completion(struct smu_cmd *scmd, void *misc)
 		BUG_ON(cmd != smu->cmd_i2c_cur);
 		BUG_ON(cmd != smu->cmd_i2c_cur);
 		if (!smu_irq_inited) {
 		if (!smu_irq_inited) {
 			mdelay(5);
 			mdelay(5);
-			smu_i2c_retry(0);
+			smu_i2c_retry(NULL);
 			return;
 			return;
 		}
 		}
 		mod_timer(&smu->i2c_timer, jiffies + msecs_to_jiffies(5));
 		mod_timer(&smu->i2c_timer, jiffies + msecs_to_jiffies(5));

+ 36 - 28
drivers/media/usb/pvrusb2/pvrusb2-hdw.c

@@ -330,10 +330,10 @@ static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
 static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
 static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
 static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
-static void pvr2_hdw_quiescent_timeout(unsigned long);
-static void pvr2_hdw_decoder_stabilization_timeout(unsigned long);
-static void pvr2_hdw_encoder_wait_timeout(unsigned long);
-static void pvr2_hdw_encoder_run_timeout(unsigned long);
+static void pvr2_hdw_quiescent_timeout(struct timer_list *);
+static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *);
+static void pvr2_hdw_encoder_wait_timeout(struct timer_list *);
+static void pvr2_hdw_encoder_run_timeout(struct timer_list *);
 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
 static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
 static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
 				unsigned int timeout,int probe_fl,
 				unsigned int timeout,int probe_fl,
@@ -2373,18 +2373,15 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 	}
 	}
 	if (!hdw) goto fail;
 	if (!hdw) goto fail;
 
 
-	setup_timer(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout,
-		    (unsigned long)hdw);
+	timer_setup(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout, 0);
 
 
-	setup_timer(&hdw->decoder_stabilization_timer,
-		    pvr2_hdw_decoder_stabilization_timeout,
-		    (unsigned long)hdw);
+	timer_setup(&hdw->decoder_stabilization_timer,
+		    pvr2_hdw_decoder_stabilization_timeout, 0);
 
 
-	setup_timer(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
-		    (unsigned long)hdw);
+	timer_setup(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
+		    0);
 
 
-	setup_timer(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout,
-		    (unsigned long)hdw);
+	timer_setup(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, 0);
 
 
 	hdw->master_state = PVR2_STATE_DEAD;
 	hdw->master_state = PVR2_STATE_DEAD;
 
 
@@ -3539,10 +3536,16 @@ static void pvr2_ctl_read_complete(struct urb *urb)
 	complete(&hdw->ctl_done);
 	complete(&hdw->ctl_done);
 }
 }
 
 
+struct hdw_timer {
+	struct timer_list timer;
+	struct pvr2_hdw *hdw;
+};
 
 
-static void pvr2_ctl_timeout(unsigned long data)
+static void pvr2_ctl_timeout(struct timer_list *t)
 {
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
+	struct hdw_timer *timer = from_timer(timer, t, timer);
+	struct pvr2_hdw *hdw = timer->hdw;
+
 	if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
 	if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
 		hdw->ctl_timeout_flag = !0;
 		hdw->ctl_timeout_flag = !0;
 		if (hdw->ctl_write_pend_flag)
 		if (hdw->ctl_write_pend_flag)
@@ -3564,7 +3567,10 @@ static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
 {
 {
 	unsigned int idx;
 	unsigned int idx;
 	int status = 0;
 	int status = 0;
-	struct timer_list timer;
+	struct hdw_timer timer = {
+		.hdw = hdw,
+	};
+
 	if (!hdw->ctl_lock_held) {
 	if (!hdw->ctl_lock_held) {
 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 			   "Attempted to execute control transfer without lock!!");
 			   "Attempted to execute control transfer without lock!!");
@@ -3621,8 +3627,8 @@ static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
 	hdw->ctl_timeout_flag = 0;
 	hdw->ctl_timeout_flag = 0;
 	hdw->ctl_write_pend_flag = 0;
 	hdw->ctl_write_pend_flag = 0;
 	hdw->ctl_read_pend_flag = 0;
 	hdw->ctl_read_pend_flag = 0;
-	setup_timer(&timer, pvr2_ctl_timeout, (unsigned long)hdw);
-	timer.expires = jiffies + timeout;
+	timer_setup_on_stack(&timer.timer, pvr2_ctl_timeout, 0);
+	timer.timer.expires = jiffies + timeout;
 
 
 	if (write_len && write_data) {
 	if (write_len && write_data) {
 		hdw->cmd_debug_state = 2;
 		hdw->cmd_debug_state = 2;
@@ -3677,7 +3683,7 @@ status);
 	}
 	}
 
 
 	/* Start timer */
 	/* Start timer */
-	add_timer(&timer);
+	add_timer(&timer.timer);
 
 
 	/* Now wait for all I/O to complete */
 	/* Now wait for all I/O to complete */
 	hdw->cmd_debug_state = 4;
 	hdw->cmd_debug_state = 4;
@@ -3687,7 +3693,7 @@ status);
 	hdw->cmd_debug_state = 5;
 	hdw->cmd_debug_state = 5;
 
 
 	/* Stop timer */
 	/* Stop timer */
-	del_timer_sync(&timer);
+	del_timer_sync(&timer.timer);
 
 
 	hdw->cmd_debug_state = 6;
 	hdw->cmd_debug_state = 6;
 	status = 0;
 	status = 0;
@@ -3769,6 +3775,8 @@ status);
 	if ((status < 0) && (!probe_fl)) {
 	if ((status < 0) && (!probe_fl)) {
 		pvr2_hdw_render_useless(hdw);
 		pvr2_hdw_render_useless(hdw);
 	}
 	}
+	destroy_timer_on_stack(&timer.timer);
+
 	return status;
 	return status;
 }
 }
 
 
@@ -4366,9 +4374,9 @@ static int state_eval_encoder_run(struct pvr2_hdw *hdw)
 
 
 
 
 /* Timeout function for quiescent timer. */
 /* Timeout function for quiescent timer. */
-static void pvr2_hdw_quiescent_timeout(unsigned long data)
+static void pvr2_hdw_quiescent_timeout(struct timer_list *t)
 {
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
+	struct pvr2_hdw *hdw = from_timer(hdw, t, quiescent_timer);
 	hdw->state_decoder_quiescent = !0;
 	hdw->state_decoder_quiescent = !0;
 	trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
 	trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
 	hdw->state_stale = !0;
 	hdw->state_stale = !0;
@@ -4377,9 +4385,9 @@ static void pvr2_hdw_quiescent_timeout(unsigned long data)
 
 
 
 
 /* Timeout function for decoder stabilization timer. */
 /* Timeout function for decoder stabilization timer. */
-static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data)
+static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *t)
 {
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
+	struct pvr2_hdw *hdw = from_timer(hdw, t, decoder_stabilization_timer);
 	hdw->state_decoder_ready = !0;
 	hdw->state_decoder_ready = !0;
 	trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
 	trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
 	hdw->state_stale = !0;
 	hdw->state_stale = !0;
@@ -4388,9 +4396,9 @@ static void pvr2_hdw_decoder_stabilization_timeout(unsigned long data)
 
 
 
 
 /* Timeout function for encoder wait timer. */
 /* Timeout function for encoder wait timer. */
-static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
+static void pvr2_hdw_encoder_wait_timeout(struct timer_list *t)
 {
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
+	struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_wait_timer);
 	hdw->state_encoder_waitok = !0;
 	hdw->state_encoder_waitok = !0;
 	trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
 	trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
 	hdw->state_stale = !0;
 	hdw->state_stale = !0;
@@ -4399,9 +4407,9 @@ static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
 
 
 
 
 /* Timeout function for encoder run timer. */
 /* Timeout function for encoder run timer. */
-static void pvr2_hdw_encoder_run_timeout(unsigned long data)
+static void pvr2_hdw_encoder_run_timeout(struct timer_list *t)
 {
 {
-	struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
+	struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_run_timer);
 	if (!hdw->state_encoder_runok) {
 	if (!hdw->state_encoder_runok) {
 		hdw->state_encoder_runok = !0;
 		hdw->state_encoder_runok = !0;
 		trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
 		trace_stbit("state_encoder_runok",hdw->state_encoder_runok);

+ 6 - 4
drivers/memstick/host/jmb38x_ms.c

@@ -59,6 +59,7 @@ struct jmb38x_ms_host {
 	unsigned int            block_pos;
 	unsigned int            block_pos;
 	unsigned long           timeout_jiffies;
 	unsigned long           timeout_jiffies;
 	struct timer_list       timer;
 	struct timer_list       timer;
+	struct memstick_host	*msh;
 	struct memstick_request *req;
 	struct memstick_request *req;
 	unsigned char           cmd_flags;
 	unsigned char           cmd_flags;
 	unsigned char           io_pos;
 	unsigned char           io_pos;
@@ -592,10 +593,10 @@ static irqreturn_t jmb38x_ms_isr(int irq, void *dev_id)
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
 }
 }
 
 
-static void jmb38x_ms_abort(unsigned long data)
+static void jmb38x_ms_abort(struct timer_list *t)
 {
 {
-	struct memstick_host *msh = (struct memstick_host *)data;
-	struct jmb38x_ms_host *host = memstick_priv(msh);
+	struct jmb38x_ms_host *host = from_timer(host, t, timer);
+	struct memstick_host *msh = host->msh;
 	unsigned long flags;
 	unsigned long flags;
 
 
 	dev_dbg(&host->chip->pdev->dev, "abort\n");
 	dev_dbg(&host->chip->pdev->dev, "abort\n");
@@ -878,6 +879,7 @@ static struct memstick_host *jmb38x_ms_alloc_host(struct jmb38x_ms *jm, int cnt)
 		return NULL;
 		return NULL;
 
 
 	host = memstick_priv(msh);
 	host = memstick_priv(msh);
+	host->msh = msh;
 	host->chip = jm;
 	host->chip = jm;
 	host->addr = ioremap(pci_resource_start(jm->pdev, cnt),
 	host->addr = ioremap(pci_resource_start(jm->pdev, cnt),
 			     pci_resource_len(jm->pdev, cnt));
 			     pci_resource_len(jm->pdev, cnt));
@@ -897,7 +899,7 @@ static struct memstick_host *jmb38x_ms_alloc_host(struct jmb38x_ms *jm, int cnt)
 
 
 	msh->caps = MEMSTICK_CAP_PAR4 | MEMSTICK_CAP_PAR8;
 	msh->caps = MEMSTICK_CAP_PAR4 | MEMSTICK_CAP_PAR8;
 
 
-	setup_timer(&host->timer, jmb38x_ms_abort, (unsigned long)msh);
+	timer_setup(&host->timer, jmb38x_ms_abort, 0);
 
 
 	if (!request_irq(host->irq, jmb38x_ms_isr, IRQF_SHARED, host->host_id,
 	if (!request_irq(host->irq, jmb38x_ms_isr, IRQF_SHARED, host->host_id,
 			 msh))
 			 msh))

+ 3 - 4
drivers/memstick/host/r592.c

@@ -616,9 +616,9 @@ static void r592_update_card_detect(struct r592_device *dev)
 }
 }
 
 
 /* Timer routine that fires 1 second after last card detection event, */
 /* Timer routine that fires 1 second after last card detection event, */
-static void r592_detect_timer(long unsigned int data)
+static void r592_detect_timer(struct timer_list *t)
 {
 {
-	struct r592_device *dev = (struct r592_device *)data;
+	struct r592_device *dev = from_timer(dev, t, detect_timer);
 	r592_update_card_detect(dev);
 	r592_update_card_detect(dev);
 	memstick_detect_change(dev->host);
 	memstick_detect_change(dev->host);
 }
 }
@@ -770,8 +770,7 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 	spin_lock_init(&dev->io_thread_lock);
 	spin_lock_init(&dev->io_thread_lock);
 	init_completion(&dev->dma_done);
 	init_completion(&dev->dma_done);
 	INIT_KFIFO(dev->pio_fifo);
 	INIT_KFIFO(dev->pio_fifo);
-	setup_timer(&dev->detect_timer,
-		r592_detect_timer, (long unsigned int)dev);
+	timer_setup(&dev->detect_timer, r592_detect_timer, 0);
 
 
 	/* Host initialization */
 	/* Host initialization */
 	host->caps = MEMSTICK_CAP_PAR4;
 	host->caps = MEMSTICK_CAP_PAR4;

+ 3 - 3
drivers/memstick/host/tifm_ms.c

@@ -538,9 +538,9 @@ static int tifm_ms_set_param(struct memstick_host *msh,
 	return 0;
 	return 0;
 }
 }
 
 
-static void tifm_ms_abort(unsigned long data)
+static void tifm_ms_abort(struct timer_list *t)
 {
 {
-	struct tifm_ms *host = (struct tifm_ms *)data;
+	struct tifm_ms *host = from_timer(host, t, timer);
 
 
 	dev_dbg(&host->dev->dev, "status %x\n",
 	dev_dbg(&host->dev->dev, "status %x\n",
 		readl(host->dev->addr + SOCK_MS_STATUS));
 		readl(host->dev->addr + SOCK_MS_STATUS));
@@ -575,7 +575,7 @@ static int tifm_ms_probe(struct tifm_dev *sock)
 	host->dev = sock;
 	host->dev = sock;
 	host->timeout_jiffies = msecs_to_jiffies(1000);
 	host->timeout_jiffies = msecs_to_jiffies(1000);
 
 
-	setup_timer(&host->timer, tifm_ms_abort, (unsigned long)host);
+	timer_setup(&host->timer, tifm_ms_abort, 0);
 	tasklet_init(&host->notify, tifm_ms_req_tasklet, (unsigned long)msh);
 	tasklet_init(&host->notify, tifm_ms_req_tasklet, (unsigned long)msh);
 
 
 	msh->request = tifm_ms_submit_req;
 	msh->request = tifm_ms_submit_req;

+ 6 - 9
drivers/misc/sgi-xp/xpc_main.c

@@ -172,9 +172,9 @@ struct xpc_arch_operations xpc_arch_ops;
  * Timer function to enforce the timelimit on the partition disengage.
  * Timer function to enforce the timelimit on the partition disengage.
  */
  */
 static void
 static void
-xpc_timeout_partition_disengage(unsigned long data)
+xpc_timeout_partition_disengage(struct timer_list *t)
 {
 {
-	struct xpc_partition *part = (struct xpc_partition *)data;
+	struct xpc_partition *part = from_timer(part, t, disengage_timer);
 
 
 	DBUG_ON(time_is_after_jiffies(part->disengage_timeout));
 	DBUG_ON(time_is_after_jiffies(part->disengage_timeout));
 
 
@@ -190,7 +190,7 @@ xpc_timeout_partition_disengage(unsigned long data)
  * specify when the next timeout should occur.
  * specify when the next timeout should occur.
  */
  */
 static void
 static void
-xpc_hb_beater(unsigned long dummy)
+xpc_hb_beater(struct timer_list *unused)
 {
 {
 	xpc_arch_ops.increment_heartbeat();
 	xpc_arch_ops.increment_heartbeat();
 
 
@@ -205,8 +205,7 @@ static void
 xpc_start_hb_beater(void)
 xpc_start_hb_beater(void)
 {
 {
 	xpc_arch_ops.heartbeat_init();
 	xpc_arch_ops.heartbeat_init();
-	init_timer(&xpc_hb_timer);
-	xpc_hb_timer.function = xpc_hb_beater;
+	timer_setup(&xpc_hb_timer, xpc_hb_beater, 0);
 	xpc_hb_beater(0);
 	xpc_hb_beater(0);
 }
 }
 
 
@@ -931,10 +930,8 @@ xpc_setup_partitions(void)
 		part->act_state = XPC_P_AS_INACTIVE;
 		part->act_state = XPC_P_AS_INACTIVE;
 		XPC_SET_REASON(part, 0, 0);
 		XPC_SET_REASON(part, 0, 0);
 
 
-		init_timer(&part->disengage_timer);
-		part->disengage_timer.function =
-		    xpc_timeout_partition_disengage;
-		part->disengage_timer.data = (unsigned long)part;
+		timer_setup(&part->disengage_timer,
+			    xpc_timeout_partition_disengage, 0);
 
 
 		part->setup_state = XPC_P_SS_UNSET;
 		part->setup_state = XPC_P_SS_UNSET;
 		init_waitqueue_head(&part->teardown_wq);
 		init_waitqueue_head(&part->teardown_wq);

+ 6 - 9
drivers/misc/sgi-xp/xpc_sn2.c

@@ -323,16 +323,16 @@ xpc_handle_notify_IRQ_sn2(int irq, void *dev_id)
  * was received.
  * was received.
  */
  */
 static void
 static void
-xpc_check_for_dropped_notify_IRQ_sn2(struct xpc_partition *part)
+xpc_check_for_dropped_notify_IRQ_sn2(struct timer_list *t)
 {
 {
-	struct xpc_partition_sn2 *part_sn2 = &part->sn.sn2;
+	struct xpc_partition *part =
+		from_timer(part, t, sn.sn2.dropped_notify_IRQ_timer);
 
 
 	if (xpc_part_ref(part)) {
 	if (xpc_part_ref(part)) {
 		xpc_check_for_sent_chctl_flags_sn2(part);
 		xpc_check_for_sent_chctl_flags_sn2(part);
 
 
-		part_sn2->dropped_notify_IRQ_timer.expires = jiffies +
-		    XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
-		add_timer(&part_sn2->dropped_notify_IRQ_timer);
+		t->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
+		add_timer(t);
 		xpc_part_deref(part);
 		xpc_part_deref(part);
 	}
 	}
 }
 }
@@ -1232,10 +1232,7 @@ xpc_setup_ch_structures_sn2(struct xpc_partition *part)
 
 
 	/* Setup a timer to check for dropped notify IRQs */
 	/* Setup a timer to check for dropped notify IRQs */
 	timer = &part_sn2->dropped_notify_IRQ_timer;
 	timer = &part_sn2->dropped_notify_IRQ_timer;
-	init_timer(timer);
-	timer->function =
-	    (void (*)(unsigned long))xpc_check_for_dropped_notify_IRQ_sn2;
-	timer->data = (unsigned long)part;
+	timer_setup(timer, xpc_check_for_dropped_notify_IRQ_sn2, 0);
 	timer->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
 	timer->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
 	add_timer(timer);
 	add_timer(timer);
 
 

+ 3 - 3
drivers/pcmcia/bcm63xx_pcmcia.c

@@ -263,12 +263,12 @@ static int bcm63xx_pcmcia_get_status(struct pcmcia_socket *sock,
 /*
 /*
  * socket polling timer callback
  * socket polling timer callback
  */
  */
-static void bcm63xx_pcmcia_poll(unsigned long data)
+static void bcm63xx_pcmcia_poll(struct timer_list *t)
 {
 {
 	struct bcm63xx_pcmcia_socket *skt;
 	struct bcm63xx_pcmcia_socket *skt;
 	unsigned int stat, events;
 	unsigned int stat, events;
 
 
-	skt = (struct bcm63xx_pcmcia_socket *)data;
+	skt = from_timer(skt, t, timer);
 
 
 	spin_lock_bh(&skt->lock);
 	spin_lock_bh(&skt->lock);
 
 
@@ -392,7 +392,7 @@ static int bcm63xx_drv_pcmcia_probe(struct platform_device *pdev)
 	sock->map_size = resource_size(skt->common_res);
 	sock->map_size = resource_size(skt->common_res);
 
 
 	/* initialize polling timer */
 	/* initialize polling timer */
-	setup_timer(&skt->timer, bcm63xx_pcmcia_poll, (unsigned long)skt);
+	timer_setup(&skt->timer, bcm63xx_pcmcia_poll, 0);
 
 
 	/* initialize  pcmcia  control register,  drive  VS[12] to  0,
 	/* initialize  pcmcia  control register,  drive  VS[12] to  0,
 	 * leave CB IDSEL to the old  value since it is set by the PCI
 	 * leave CB IDSEL to the old  value since it is set by the PCI

+ 3 - 3
drivers/pcmcia/bfin_cf_pcmcia.c

@@ -86,9 +86,9 @@ static int bfin_cf_ss_init(struct pcmcia_socket *s)
 }
 }
 
 
 /* the timer is primarily to kick this socket's pccardd */
 /* the timer is primarily to kick this socket's pccardd */
-static void bfin_cf_timer(unsigned long _cf)
+static void bfin_cf_timer(struct timer_list *t)
 {
 {
-	struct bfin_cf_socket *cf = (void *)_cf;
+	struct bfin_cf_socket *cf = from_timer(cf, t, timer);
 	unsigned short present = bfin_cf_present(cf->cd_pfx);
 	unsigned short present = bfin_cf_present(cf->cd_pfx);
 
 
 	if (present != cf->present) {
 	if (present != cf->present) {
@@ -227,7 +227,7 @@ static int bfin_cf_probe(struct platform_device *pdev)
 
 
 	cf->cd_pfx = cd_pfx;
 	cf->cd_pfx = cd_pfx;
 
 
-	setup_timer(&cf->timer, bfin_cf_timer, (unsigned long)cf);
+	timer_setup(&cf->timer, bfin_cf_timer, 0);
 
 
 	cf->pdev = pdev;
 	cf->pdev = pdev;
 	platform_set_drvdata(pdev, cf);
 	platform_set_drvdata(pdev, cf);

+ 2 - 4
drivers/pcmcia/i82365.c

@@ -875,7 +875,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev)
     return IRQ_RETVAL(handled);
     return IRQ_RETVAL(handled);
 } /* pcic_interrupt */
 } /* pcic_interrupt */
 
 
-static void pcic_interrupt_wrapper(u_long data)
+static void pcic_interrupt_wrapper(struct timer_list *unused)
 {
 {
     pcic_interrupt(0, NULL);
     pcic_interrupt(0, NULL);
     poll_timer.expires = jiffies + poll_interval;
     poll_timer.expires = jiffies + poll_interval;
@@ -1289,9 +1289,7 @@ static int __init init_i82365(void)
 
 
     /* Finally, schedule a polling interrupt */
     /* Finally, schedule a polling interrupt */
     if (poll_interval != 0) {
     if (poll_interval != 0) {
-	poll_timer.function = pcic_interrupt_wrapper;
-	poll_timer.data = 0;
-	init_timer(&poll_timer);
+	timer_setup(&poll_timer, pcic_interrupt_wrapper, 0);
     	poll_timer.expires = jiffies + poll_interval;
     	poll_timer.expires = jiffies + poll_interval;
 	add_timer(&poll_timer);
 	add_timer(&poll_timer);
     }
     }

+ 4 - 4
drivers/pcmcia/omap_cf.c

@@ -80,9 +80,9 @@ static int omap_cf_ss_init(struct pcmcia_socket *s)
 }
 }
 
 
 /* the timer is primarily to kick this socket's pccardd */
 /* the timer is primarily to kick this socket's pccardd */
-static void omap_cf_timer(unsigned long _cf)
+static void omap_cf_timer(struct timer_list *t)
 {
 {
-	struct omap_cf_socket	*cf = (void *) _cf;
+	struct omap_cf_socket	*cf = from_timer(cf, t, timer);
 	unsigned		present = omap_cf_present();
 	unsigned		present = omap_cf_present();
 
 
 	if (present != cf->present) {
 	if (present != cf->present) {
@@ -102,7 +102,7 @@ static void omap_cf_timer(unsigned long _cf)
  */
  */
 static irqreturn_t omap_cf_irq(int irq, void *_cf)
 static irqreturn_t omap_cf_irq(int irq, void *_cf)
 {
 {
-	omap_cf_timer((unsigned long)_cf);
+	omap_cf_timer(&_cf->timer);
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
 }
 }
 
 
@@ -220,7 +220,7 @@ static int __init omap_cf_probe(struct platform_device *pdev)
 	cf = kzalloc(sizeof *cf, GFP_KERNEL);
 	cf = kzalloc(sizeof *cf, GFP_KERNEL);
 	if (!cf)
 	if (!cf)
 		return -ENOMEM;
 		return -ENOMEM;
-	setup_timer(&cf->timer, omap_cf_timer, (unsigned long)cf);
+	timer_setup(&cf->timer, omap_cf_timer, 0);
 
 
 	cf->pdev = pdev;
 	cf->pdev = pdev;
 	platform_set_drvdata(pdev, cf);
 	platform_set_drvdata(pdev, cf);

+ 3 - 4
drivers/pcmcia/pd6729.c

@@ -234,9 +234,9 @@ static irqreturn_t pd6729_interrupt(int irq, void *dev)
 
 
 /* socket functions */
 /* socket functions */
 
 
-static void pd6729_interrupt_wrapper(unsigned long data)
+static void pd6729_interrupt_wrapper(struct timer_list *t)
 {
 {
-	struct pd6729_socket *socket = (struct pd6729_socket *) data;
+	struct pd6729_socket *socket = from_timer(socket, t, poll_timer);
 
 
 	pd6729_interrupt(0, (void *)socket);
 	pd6729_interrupt(0, (void *)socket);
 	mod_timer(&socket->poll_timer, jiffies + HZ);
 	mod_timer(&socket->poll_timer, jiffies + HZ);
@@ -707,8 +707,7 @@ static int pd6729_pci_probe(struct pci_dev *dev,
 		}
 		}
 	} else {
 	} else {
 		/* poll Card status change */
 		/* poll Card status change */
-		setup_timer(&socket->poll_timer, pd6729_interrupt_wrapper,
-			    (unsigned long)socket);
+		timer_setup(&socket->poll_timer, pd6729_interrupt_wrapper, 0);
 		mod_timer(&socket->poll_timer, jiffies + HZ);
 		mod_timer(&socket->poll_timer, jiffies + HZ);
 	}
 	}
 
 

+ 3 - 4
drivers/pcmcia/soc_common.c

@@ -456,9 +456,9 @@ static void soc_common_check_status(struct soc_pcmcia_socket *skt)
 }
 }
 
 
 /* Let's poll for events in addition to IRQs since IRQ only is unreliable... */
 /* Let's poll for events in addition to IRQs since IRQ only is unreliable... */
-static void soc_common_pcmcia_poll_event(unsigned long dummy)
+static void soc_common_pcmcia_poll_event(struct timer_list *t)
 {
 {
-	struct soc_pcmcia_socket *skt = (struct soc_pcmcia_socket *)dummy;
+	struct soc_pcmcia_socket *skt = from_timer(skt, t, poll_timer);
 	debug(skt, 4, "polling for events\n");
 	debug(skt, 4, "polling for events\n");
 
 
 	mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD);
 	mod_timer(&skt->poll_timer, jiffies + SOC_PCMCIA_POLL_PERIOD);
@@ -794,8 +794,7 @@ int soc_pcmcia_add_one(struct soc_pcmcia_socket *skt)
 
 
 	skt->cs_state = dead_socket;
 	skt->cs_state = dead_socket;
 
 
-	setup_timer(&skt->poll_timer, soc_common_pcmcia_poll_event,
-		    (unsigned long)skt);
+	timer_setup(&skt->poll_timer, soc_common_pcmcia_poll_event, 0);
 	skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
 	skt->poll_timer.expires = jiffies + SOC_PCMCIA_POLL_PERIOD;
 
 
 	ret = request_resource(&iomem_resource, &skt->res_skt);
 	ret = request_resource(&iomem_resource, &skt->res_skt);

+ 3 - 5
drivers/pcmcia/tcic.c

@@ -98,7 +98,7 @@ module_param(cycle_time, int, 0444);
 /*====================================================================*/
 /*====================================================================*/
 
 
 static irqreturn_t tcic_interrupt(int irq, void *dev);
 static irqreturn_t tcic_interrupt(int irq, void *dev);
-static void tcic_timer(u_long data);
+static void tcic_timer(struct timer_list *unused);
 static struct pccard_operations tcic_operations;
 static struct pccard_operations tcic_operations;
 
 
 struct tcic_socket {
 struct tcic_socket {
@@ -435,9 +435,7 @@ static int __init init_tcic(void)
     }
     }
     
     
     /* Set up polling */
     /* Set up polling */
-    poll_timer.function = &tcic_timer;
-    poll_timer.data = 0;
-    init_timer(&poll_timer);
+    timer_setup(&poll_timer, &tcic_timer, 0);
 
 
     /* Build interrupt mask */
     /* Build interrupt mask */
     printk(KERN_CONT ", %d sockets\n", sockets);
     printk(KERN_CONT ", %d sockets\n", sockets);
@@ -583,7 +581,7 @@ static irqreturn_t tcic_interrupt(int irq, void *dev)
     return IRQ_HANDLED;
     return IRQ_HANDLED;
 } /* tcic_interrupt */
 } /* tcic_interrupt */
 
 
-static void tcic_timer(u_long data)
+static void tcic_timer(struct timer_list *unused)
 {
 {
     pr_debug("tcic_timer()\n");
     pr_debug("tcic_timer()\n");
     tcic_timer_pending = 0;
     tcic_timer_pending = 0;

+ 3 - 4
drivers/pcmcia/yenta_socket.c

@@ -534,9 +534,9 @@ static irqreturn_t yenta_interrupt(int irq, void *dev_id)
 	return IRQ_HANDLED;
 	return IRQ_HANDLED;
 }
 }
 
 
-static void yenta_interrupt_wrapper(unsigned long data)
+static void yenta_interrupt_wrapper(struct timer_list *t)
 {
 {
-	struct yenta_socket *socket = (struct yenta_socket *) data;
+	struct yenta_socket *socket = from_timer(socket, t, poll_timer);
 
 
 	yenta_interrupt(0, (void *)socket);
 	yenta_interrupt(0, (void *)socket);
 	socket->poll_timer.expires = jiffies + HZ;
 	socket->poll_timer.expires = jiffies + HZ;
@@ -1233,8 +1233,7 @@ static int yenta_probe(struct pci_dev *dev, const struct pci_device_id *id)
 	if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
 	if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
 		/* No IRQ or request_irq failed. Poll */
 		/* No IRQ or request_irq failed. Poll */
 		socket->cb_irq = 0; /* But zero is a valid IRQ number. */
 		socket->cb_irq = 0; /* But zero is a valid IRQ number. */
-		setup_timer(&socket->poll_timer, yenta_interrupt_wrapper,
-			    (unsigned long)socket);
+		timer_setup(&socket->poll_timer, yenta_interrupt_wrapper, 0);
 		mod_timer(&socket->poll_timer, jiffies + HZ);
 		mod_timer(&socket->poll_timer, jiffies + HZ);
 		dev_info(&dev->dev,
 		dev_info(&dev->dev,
 			 "no PCI IRQ, CardBus support disabled for this socket.\n");
 			 "no PCI IRQ, CardBus support disabled for this socket.\n");

+ 4 - 4
drivers/watchdog/cpwd.c

@@ -230,9 +230,9 @@ static void cpwd_resetbrokentimer(struct cpwd *p, int index)
  * interrupts within the PLD so me must continually
  * interrupts within the PLD so me must continually
  * reset the timers ad infinitum.
  * reset the timers ad infinitum.
  */
  */
-static void cpwd_brokentimer(unsigned long data)
+static void cpwd_brokentimer(struct timer_list *unused)
 {
 {
-	struct cpwd *p = (struct cpwd *) data;
+	struct cpwd *p = cpwd_device;
 	int id, tripped = 0;
 	int id, tripped = 0;
 
 
 	/* kill a running timer instance, in case we
 	/* kill a running timer instance, in case we
@@ -275,7 +275,7 @@ static void cpwd_stoptimer(struct cpwd *p, int index)
 
 
 		if (p->broken) {
 		if (p->broken) {
 			p->devs[index].runstatus |= WD_STAT_BSTOP;
 			p->devs[index].runstatus |= WD_STAT_BSTOP;
-			cpwd_brokentimer((unsigned long) p);
+			cpwd_brokentimer(NULL);
 		}
 		}
 	}
 	}
 }
 }
@@ -608,7 +608,7 @@ static int cpwd_probe(struct platform_device *op)
 	}
 	}
 
 
 	if (p->broken) {
 	if (p->broken) {
-		setup_timer(&cpwd_timer, cpwd_brokentimer, (unsigned long)p);
+		timer_setup(&cpwd_timer, cpwd_brokentimer, 0);
 		cpwd_timer.expires	= WD_BTIMEOUT;
 		cpwd_timer.expires	= WD_BTIMEOUT;
 
 
 		pr_info("PLD defect workaround enabled for model %s\n",
 		pr_info("PLD defect workaround enabled for model %s\n",

+ 7 - 6
drivers/watchdog/lpc18xx_wdt.c

@@ -78,10 +78,10 @@ static int lpc18xx_wdt_feed(struct watchdog_device *wdt_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void lpc18xx_wdt_timer_feed(unsigned long data)
+static void lpc18xx_wdt_timer_feed(struct timer_list *t)
 {
 {
-	struct watchdog_device *wdt_dev = (struct watchdog_device *)data;
-	struct lpc18xx_wdt_dev *lpc18xx_wdt = watchdog_get_drvdata(wdt_dev);
+	struct lpc18xx_wdt_dev *lpc18xx_wdt = from_timer(lpc18xx_wdt, t, timer);
+	struct watchdog_device *wdt_dev = &lpc18xx_wdt->wdt_dev;
 
 
 	lpc18xx_wdt_feed(wdt_dev);
 	lpc18xx_wdt_feed(wdt_dev);
 
 
@@ -96,7 +96,9 @@ static void lpc18xx_wdt_timer_feed(unsigned long data)
  */
  */
 static int lpc18xx_wdt_stop(struct watchdog_device *wdt_dev)
 static int lpc18xx_wdt_stop(struct watchdog_device *wdt_dev)
 {
 {
-	lpc18xx_wdt_timer_feed((unsigned long)wdt_dev);
+	struct lpc18xx_wdt_dev *lpc18xx_wdt = watchdog_get_drvdata(wdt_dev);
+
+	lpc18xx_wdt_timer_feed(&lpc18xx_wdt->timer);
 
 
 	return 0;
 	return 0;
 }
 }
@@ -267,8 +269,7 @@ static int lpc18xx_wdt_probe(struct platform_device *pdev)
 
 
 	__lpc18xx_wdt_set_timeout(lpc18xx_wdt);
 	__lpc18xx_wdt_set_timeout(lpc18xx_wdt);
 
 
-	setup_timer(&lpc18xx_wdt->timer, lpc18xx_wdt_timer_feed,
-		    (unsigned long)&lpc18xx_wdt->wdt_dev);
+	timer_setup(&lpc18xx_wdt->timer, lpc18xx_wdt_timer_feed, 0);
 
 
 	watchdog_set_nowayout(&lpc18xx_wdt->wdt_dev, nowayout);
 	watchdog_set_nowayout(&lpc18xx_wdt->wdt_dev, nowayout);
 	watchdog_set_restart_priority(&lpc18xx_wdt->wdt_dev, 128);
 	watchdog_set_restart_priority(&lpc18xx_wdt->wdt_dev, 128);

+ 1 - 3
fs/ncpfs/inode.c

@@ -618,7 +618,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
 	server->tx.creq		= NULL;
 	server->tx.creq		= NULL;
 	server->rcv.creq	= NULL;
 	server->rcv.creq	= NULL;
 
 
-	init_timer(&server->timeout_tm);
+	timer_setup(&server->timeout_tm, ncpdgram_timeout_call, 0);
 #undef NCP_PACKET_SIZE
 #undef NCP_PACKET_SIZE
 #define NCP_PACKET_SIZE 131072
 #define NCP_PACKET_SIZE 131072
 	error = -ENOMEM;
 	error = -ENOMEM;
@@ -650,8 +650,6 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
 	} else {
 	} else {
 		INIT_WORK(&server->rcv.tq, ncpdgram_rcv_proc);
 		INIT_WORK(&server->rcv.tq, ncpdgram_rcv_proc);
 		INIT_WORK(&server->timeout_tq, ncpdgram_timeout_proc);
 		INIT_WORK(&server->timeout_tq, ncpdgram_timeout_proc);
-		server->timeout_tm.data = (unsigned long)server;
-		server->timeout_tm.function = ncpdgram_timeout_call;
 	}
 	}
 	release_sock(sock->sk);
 	release_sock(sock->sk);
 
 

+ 1 - 1
fs/ncpfs/ncp_fs_sb.h

@@ -149,7 +149,7 @@ extern void ncp_tcp_rcv_proc(struct work_struct *work);
 extern void ncp_tcp_tx_proc(struct work_struct *work);
 extern void ncp_tcp_tx_proc(struct work_struct *work);
 extern void ncpdgram_rcv_proc(struct work_struct *work);
 extern void ncpdgram_rcv_proc(struct work_struct *work);
 extern void ncpdgram_timeout_proc(struct work_struct *work);
 extern void ncpdgram_timeout_proc(struct work_struct *work);
-extern void ncpdgram_timeout_call(unsigned long server);
+extern void ncpdgram_timeout_call(struct timer_list *t);
 extern void ncp_tcp_data_ready(struct sock* sk);
 extern void ncp_tcp_data_ready(struct sock* sk);
 extern void ncp_tcp_write_space(struct sock* sk);
 extern void ncp_tcp_write_space(struct sock* sk);
 extern void ncp_tcp_error_report(struct sock* sk);
 extern void ncp_tcp_error_report(struct sock* sk);

+ 3 - 3
fs/ncpfs/sock.c

@@ -116,10 +116,10 @@ void ncp_tcp_write_space(struct sock *sk)
 		schedule_work(&server->tx.tq);
 		schedule_work(&server->tx.tq);
 }
 }
 
 
-void ncpdgram_timeout_call(unsigned long v)
+void ncpdgram_timeout_call(struct timer_list *t)
 {
 {
-	struct ncp_server *server = (void*)v;
-	
+	struct ncp_server *server = from_timer(server, t, timeout_tm);
+
 	schedule_work(&server->timeout_tq);
 	schedule_work(&server->timeout_tq);
 }
 }
 
 

+ 2 - 2
kernel/rcu/rcutorture.c

@@ -1076,7 +1076,7 @@ static void rcu_torture_timer_cb(struct rcu_head *rhp)
  * counter in the element should never be greater than 1, otherwise, the
  * counter in the element should never be greater than 1, otherwise, the
  * RCU implementation is broken.
  * RCU implementation is broken.
  */
  */
-static void rcu_torture_timer(unsigned long unused)
+static void rcu_torture_timer(struct timer_list *unused)
 {
 {
 	int idx;
 	int idx;
 	unsigned long started;
 	unsigned long started;
@@ -1163,7 +1163,7 @@ rcu_torture_reader(void *arg)
 	VERBOSE_TOROUT_STRING("rcu_torture_reader task started");
 	VERBOSE_TOROUT_STRING("rcu_torture_reader task started");
 	set_user_nice(current, MAX_NICE);
 	set_user_nice(current, MAX_NICE);
 	if (irqreader && cur_ops->irq_capable)
 	if (irqreader && cur_ops->irq_capable)
-		setup_timer_on_stack(&t, rcu_torture_timer, 0);
+		timer_setup_on_stack(&t, rcu_torture_timer, 0);
 
 
 	do {
 	do {
 		if (irqreader && cur_ops->irq_capable) {
 		if (irqreader && cur_ops->irq_capable) {

+ 5 - 4
kernel/rcu/tree_plugin.h

@@ -2261,9 +2261,11 @@ static void do_nocb_deferred_wakeup_common(struct rcu_data *rdp)
 }
 }
 
 
 /* Do a deferred wakeup of rcu_nocb_kthread() from a timer handler. */
 /* Do a deferred wakeup of rcu_nocb_kthread() from a timer handler. */
-static void do_nocb_deferred_wakeup_timer(unsigned long x)
+static void do_nocb_deferred_wakeup_timer(struct timer_list *t)
 {
 {
-	do_nocb_deferred_wakeup_common((struct rcu_data *)x);
+	struct rcu_data *rdp = from_timer(rdp, t, nocb_timer);
+
+	do_nocb_deferred_wakeup_common(rdp);
 }
 }
 
 
 /*
 /*
@@ -2327,8 +2329,7 @@ static void __init rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp)
 	init_swait_queue_head(&rdp->nocb_wq);
 	init_swait_queue_head(&rdp->nocb_wq);
 	rdp->nocb_follower_tail = &rdp->nocb_follower_head;
 	rdp->nocb_follower_tail = &rdp->nocb_follower_head;
 	raw_spin_lock_init(&rdp->nocb_lock);
 	raw_spin_lock_init(&rdp->nocb_lock);
-	setup_timer(&rdp->nocb_timer, do_nocb_deferred_wakeup_timer,
-		    (unsigned long)rdp);
+	timer_setup(&rdp->nocb_timer, do_nocb_deferred_wakeup_timer, 0);
 }
 }
 
 
 /*
 /*