提交 c7c2f3d9 编写于 作者: T Thomas Gleixner

Merge tag 'timers-conversion-next3' of...

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
...@@ -136,19 +136,14 @@ struct pci_ops dc21285_ops = { ...@@ -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) { del_timer(timer);
case IRQ_PCI_SERR:
del_timer(&serr_timer);
break;
case IRQ_PCI_PERR:
del_timer(&perr_timer);
break;
}
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) ...@@ -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); timer_setup(&serr_timer, dc21285_enable_error, 0);
init_timer(&perr_timer); timer_setup(&perr_timer, dc21285_enable_error, 0);
serr_timer.data = IRQ_PCI_SERR;
serr_timer.function = dc21285_enable_error;
perr_timer.data = IRQ_PCI_PERR;
perr_timer.function = dc21285_enable_error;
/* /*
* We don't care if these fail. * We don't care if these fail.
......
...@@ -381,14 +381,11 @@ static struct pxafb_mach_info sharp_lm8v31 = { ...@@ -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 = { static void lubbock_mmc_poll(struct timer_list *unused)
.function = lubbock_mmc_poll,
};
static void lubbock_mmc_poll(unsigned long data)
{ {
unsigned long flags; unsigned long flags;
...@@ -401,7 +398,7 @@ static void lubbock_mmc_poll(unsigned long data) ...@@ -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, ...@@ -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_detect_int_data = data;
mmc_timer.data = (unsigned long) 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);
} }
......
...@@ -341,7 +341,7 @@ static void sharpsl_charge_toggle(struct work_struct *private_) ...@@ -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) ...@@ -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) ...@@ -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);
......
...@@ -17,6 +17,8 @@ ...@@ -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 { ...@@ -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)
......
...@@ -1513,7 +1513,7 @@ ia64_mca_cmc_int_caller(int cmc_irq, void *arg) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
...@@ -263,7 +263,7 @@ salinfo_timeout_check(struct salinfo_data *data) ...@@ -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) ...@@ -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",
......
...@@ -219,7 +219,7 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification) ...@@ -219,7 +219,7 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
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); ...@@ -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) ...@@ -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); timer_setup(&mynodepda->bte_recovery_timer, bte_recovery_timeout, 0);
mynodepda->bte_recovery_timer.function = bte_error_handler;
mynodepda->bte_recovery_timer.data = (unsigned long)mynodepda;
for (i = 0; i < BTES_PER_NODE; i++) { for (i = 0; i < BTES_PER_NODE; i++) {
u64 *base_addr; u64 *base_addr;
......
...@@ -27,15 +27,12 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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));
} }
...@@ -50,7 +50,7 @@ static irqreturn_t hub_eint_handler(int irq, void *arg) ...@@ -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;
} }
......
...@@ -72,7 +72,7 @@ static void sn_cpei_handler(int irq, void *devid, struct pt_regs *regs) ...@@ -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) ...@@ -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);
} }
......
...@@ -38,6 +38,7 @@ ...@@ -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) ...@@ -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) ...@@ -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_timer_timeout = POWERDOWN_FREQ;
blink_timeout(POWERDOWN_FREQ); blink_timeout(&blink_timer);
init_timer(&power_timer); timer_setup(&power_timer, power_timeout, 0);
power_timer.function = power_timeout;
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) ...@@ -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); timer_setup(&debounce_timer, debounce, 0);
debounce_timer.function = debounce;
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, ...@@ -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_timer_timeout = PANIC_FREQ;
blink_timeout(PANIC_FREQ); blink_timeout(&blink_timer);
return NOTIFY_DONE; return NOTIFY_DONE;
} }
...@@ -195,8 +194,7 @@ static int __init reboot_setup(void) ...@@ -195,8 +194,7 @@ static int __init reboot_setup(void)
return res; return res;
} }
init_timer(&blink_timer); timer_setup(&blink_timer, blink_timeout, 0);
blink_timer.function = blink_timeout;
atomic_notifier_chain_register(&panic_notifier_list, &panic_block); atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
return 0; return 0;
......
...@@ -38,6 +38,7 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -99,11 +100,10 @@ void ip32_prepare_poweroff(void)
} }
shutting_down = 1; shutting_down = 1;
blink_timer.data = POWERDOWN_FREQ; blink_timer_timeout = POWERDOWN_FREQ;
blink_timeout(POWERDOWN_FREQ); blink_timeout(&blink_timer);
init_timer(&power_timer); timer_setup(&power_timer, power_timeout, 0);
power_timer.function = power_timeout;
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, ...@@ -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_timer_timeout = PANIC_FREQ;
blink_timeout(PANIC_FREQ); blink_timeout(&blink_timer);
return NOTIFY_DONE; return NOTIFY_DONE;
} }
...@@ -143,8 +143,7 @@ static __init int ip32_reboot_setup(void) ...@@ -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); timer_setup(&blink_timer, blink_timeout, 0);
blink_timer.function = blink_timeout;
atomic_notifier_chain_register(&panic_notifier_list, &panic_block); atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
return 0; return 0;
......
...@@ -261,9 +261,8 @@ static void wd_timer_reset(unsigned int cpu, struct timer_list *t) ...@@ -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) ...@@ -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);
} }
......
...@@ -31,19 +31,20 @@ static inline void led_toggle(void) ...@@ -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, ...@@ -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; ...@@ -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); timer_setup(&led_blink_timer, led_blink, 0);
led_blink_timer.function = led_blink;
led = proc_create("led", 0, NULL, &led_proc_fops); led = proc_create("led", 0, NULL, &led_proc_fops);
if (!led) if (!led)
......
...@@ -898,10 +898,9 @@ static void calioc2_dump_error_regs(struct iommu_table *tbl) ...@@ -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 = from_timer(tbl, t, watchdog_timer);
struct iommu_table *tbl = pci_iommu(dev->bus);
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) ...@@ -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, timer_setup(&tbl->watchdog_timer, calgary_watchdog, 0);
(unsigned long)dev);
mod_timer(&tbl->watchdog_timer, jiffies); mod_timer(&tbl->watchdog_timer, jiffies);
} }
......
...@@ -47,15 +47,14 @@ static char *serial_name = "ISS serial driver"; ...@@ -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, timer_setup(&serial_timer, rs_poll, 0);
(unsigned long)&serial_port);
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, ...@@ -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;
......
...@@ -349,9 +349,9 @@ static int iss_net_poll(void) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -582,8 +580,7 @@ static int iss_net_configure(int index, char *init)
return 1; return 1;
} }
init_timer(&lp->tl); timer_setup(&lp->tl, iss_net_user_timer_expire, 0);
lp->tl.function = iss_net_user_timer_expire;
return 0; return 0;
......
...@@ -774,9 +774,9 @@ static void ghes_add_timer(struct ghes *ghes) ...@@ -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) ...@@ -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, timer_setup(&ghes->timer, ghes_poll_func, TIMER_DEFERRABLE);
(unsigned long)ghes);
ghes_add_timer(ghes); ghes_add_timer(ghes);
break; break;
case ACPI_HEST_NOTIFY_EXTERNAL: case ACPI_HEST_NOTIFY_EXTERNAL:
......
...@@ -229,9 +229,9 @@ MODULE_DEVICE_TABLE(of, img_ascii_lcd_matches); ...@@ -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, ...@@ -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) ...@@ -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); timer_setup(&ctx->timer, img_ascii_lcd_scroll, 0);
ctx->timer.function = img_ascii_lcd_scroll;
ctx->timer.data = (unsigned long)ctx;
platform_set_drvdata(pdev, ctx); platform_set_drvdata(pdev, ctx);
......
...@@ -1396,7 +1396,7 @@ static void panel_process_inputs(void) ...@@ -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) ...@@ -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);
} }
......
...@@ -100,9 +100,9 @@ struct xgene_rng_dev { ...@@ -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) ...@@ -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) ...@@ -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);
......
...@@ -975,9 +975,9 @@ static void hangcheck_timer_reset(struct etnaviv_gpu *gpu) ...@@ -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, ...@@ -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, timer_setup(&gpu->hangcheck_timer, hangcheck_handler, TIMER_DEFERRABLE);
(unsigned long)gpu);
priv->gpu[priv->num_gpus++] = gpu; priv->gpu[priv->num_gpus++] = gpu;
......
...@@ -103,7 +103,7 @@ static DEFINE_MUTEX(smu_part_access); ...@@ -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) ...@@ -582,9 +582,7 @@ static int smu_late_init(void)
if (!smu) if (!smu)
return 0; return 0;
init_timer(&smu->i2c_timer); timer_setup(&smu->i2c_timer, smu_i2c_retry, 0);
smu->i2c_timer.function = smu_i2c_retry;
smu->i2c_timer.data = (unsigned long)smu;
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) ...@@ -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) ...@@ -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));
......
...@@ -330,10 +330,10 @@ static void pvr2_hdw_state_log_state(struct pvr2_hdw *); ...@@ -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_quiescent_timeout(struct timer_list *);
static void pvr2_hdw_decoder_stabilization_timeout(unsigned long); static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *);
static void pvr2_hdw_encoder_wait_timeout(unsigned long); static void pvr2_hdw_encoder_wait_timeout(struct timer_list *);
static void pvr2_hdw_encoder_run_timeout(unsigned long); 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, ...@@ -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, timer_setup(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout, 0);
(unsigned long)hdw);
setup_timer(&hdw->decoder_stabilization_timer, timer_setup(&hdw->decoder_stabilization_timer,
pvr2_hdw_decoder_stabilization_timeout, pvr2_hdw_decoder_stabilization_timeout, 0);
(unsigned long)hdw);
setup_timer(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout, timer_setup(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
(unsigned long)hdw); 0);
setup_timer(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, timer_setup(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, 0);
(unsigned long)hdw);
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) ...@@ -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, ...@@ -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, ...@@ -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_setup_on_stack(&timer.timer, pvr2_ctl_timeout, 0);
timer.expires = jiffies + timeout; 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); ...@@ -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); ...@@ -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); ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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);
......
...@@ -59,6 +59,7 @@ struct jmb38x_ms_host { ...@@ -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) ...@@ -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 = from_timer(host, t, timer);
struct jmb38x_ms_host *host = memstick_priv(msh); 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) ...@@ -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) ...@@ -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))
......
...@@ -616,9 +616,9 @@ static void r592_update_card_detect(struct r592_device *dev) ...@@ -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) ...@@ -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, timer_setup(&dev->detect_timer, r592_detect_timer, 0);
r592_detect_timer, (long unsigned int)dev);
/* Host initialization */ /* Host initialization */
host->caps = MEMSTICK_CAP_PAR4; host->caps = MEMSTICK_CAP_PAR4;
......
...@@ -538,9 +538,9 @@ static int tifm_ms_set_param(struct memstick_host *msh, ...@@ -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) ...@@ -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;
......
...@@ -172,9 +172,9 @@ struct xpc_arch_operations xpc_arch_ops; ...@@ -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) ...@@ -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 ...@@ -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); timer_setup(&xpc_hb_timer, xpc_hb_beater, 0);
xpc_hb_timer.function = xpc_hb_beater;
xpc_hb_beater(0); xpc_hb_beater(0);
} }
...@@ -931,10 +930,8 @@ xpc_setup_partitions(void) ...@@ -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); timer_setup(&part->disengage_timer,
part->disengage_timer.function = xpc_timeout_partition_disengage, 0);
xpc_timeout_partition_disengage;
part->disengage_timer.data = (unsigned long)part;
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);
......
...@@ -323,16 +323,16 @@ xpc_handle_notify_IRQ_sn2(int irq, void *dev_id) ...@@ -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 + t->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL; add_timer(t);
add_timer(&part_sn2->dropped_notify_IRQ_timer);
xpc_part_deref(part); xpc_part_deref(part);
} }
} }
...@@ -1232,10 +1232,7 @@ xpc_setup_ch_structures_sn2(struct xpc_partition *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_setup(timer, xpc_check_for_dropped_notify_IRQ_sn2, 0);
timer->function =
(void (*)(unsigned long))xpc_check_for_dropped_notify_IRQ_sn2;
timer->data = (unsigned long)part;
timer->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL; timer->expires = jiffies + XPC_DROPPED_NOTIFY_IRQ_WAIT_INTERVAL;
add_timer(timer); add_timer(timer);
......
...@@ -263,12 +263,12 @@ static int bcm63xx_pcmcia_get_status(struct pcmcia_socket *sock, ...@@ -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) ...@@ -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
......
...@@ -86,9 +86,9 @@ static int bfin_cf_ss_init(struct pcmcia_socket *s) ...@@ -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) ...@@ -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);
......
...@@ -875,7 +875,7 @@ static irqreturn_t pcic_interrupt(int irq, void *dev) ...@@ -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) ...@@ -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; timer_setup(&poll_timer, pcic_interrupt_wrapper, 0);
poll_timer.data = 0;
init_timer(&poll_timer);
poll_timer.expires = jiffies + poll_interval; poll_timer.expires = jiffies + poll_interval;
add_timer(&poll_timer); add_timer(&poll_timer);
} }
......
...@@ -80,9 +80,9 @@ static int omap_cf_ss_init(struct pcmcia_socket *s) ...@@ -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) ...@@ -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) ...@@ -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);
......
...@@ -234,9 +234,9 @@ static irqreturn_t pd6729_interrupt(int irq, void *dev) ...@@ -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, ...@@ -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, timer_setup(&socket->poll_timer, pd6729_interrupt_wrapper, 0);
(unsigned long)socket);
mod_timer(&socket->poll_timer, jiffies + HZ); mod_timer(&socket->poll_timer, jiffies + HZ);
} }
......
...@@ -456,9 +456,9 @@ static void soc_common_check_status(struct soc_pcmcia_socket *skt) ...@@ -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) ...@@ -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, timer_setup(&skt->poll_timer, soc_common_pcmcia_poll_event, 0);
(unsigned long)skt);
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);
......
...@@ -98,7 +98,7 @@ module_param(cycle_time, int, 0444); ...@@ -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) ...@@ -435,9 +435,7 @@ static int __init init_tcic(void)
} }
/* Set up polling */ /* Set up polling */
poll_timer.function = &tcic_timer; timer_setup(&poll_timer, &tcic_timer, 0);
poll_timer.data = 0;
init_timer(&poll_timer);
/* 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) ...@@ -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;
......
...@@ -534,9 +534,9 @@ static irqreturn_t yenta_interrupt(int irq, void *dev_id) ...@@ -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) ...@@ -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, timer_setup(&socket->poll_timer, yenta_interrupt_wrapper, 0);
(unsigned long)socket);
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");
......
...@@ -230,9 +230,9 @@ static void cpwd_resetbrokentimer(struct cpwd *p, int index) ...@@ -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) ...@@ -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) ...@@ -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",
......
...@@ -78,10 +78,10 @@ static int lpc18xx_wdt_feed(struct watchdog_device *wdt_dev) ...@@ -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 = from_timer(lpc18xx_wdt, t, timer);
struct lpc18xx_wdt_dev *lpc18xx_wdt = watchdog_get_drvdata(wdt_dev); 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) ...@@ -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) ...@@ -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, timer_setup(&lpc18xx_wdt->timer, lpc18xx_wdt_timer_feed, 0);
(unsigned long)&lpc18xx_wdt->wdt_dev);
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);
......
...@@ -618,7 +618,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent) ...@@ -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) ...@@ -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);
......
...@@ -149,7 +149,7 @@ extern void ncp_tcp_rcv_proc(struct work_struct *work); ...@@ -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);
......
...@@ -116,10 +116,10 @@ void ncp_tcp_write_space(struct sock *sk) ...@@ -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);
} }
......
...@@ -1076,7 +1076,7 @@ static void rcu_torture_timer_cb(struct rcu_head *rhp) ...@@ -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) ...@@ -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) {
......
...@@ -2261,9 +2261,11 @@ static void do_nocb_deferred_wakeup_common(struct rcu_data *rdp) ...@@ -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) ...@@ -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, timer_setup(&rdp->nocb_timer, do_nocb_deferred_wakeup_timer, 0);
(unsigned long)rdp);
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册