]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
treewide: setup_timer() -> timer_setup()
authorKees Cook <keescook@chromium.org>
Mon, 16 Oct 2017 21:43:17 +0000 (14:43 -0700)
committerKees Cook <keescook@chromium.org>
Tue, 21 Nov 2017 23:57:07 +0000 (15:57 -0800)
This converts all remaining cases of the old setup_timer() API into using
timer_setup(), where the callback argument is the structure already
holding the struct timer_list. These should have no behavioral changes,
since they just change which pointer is passed into the callback with
the same available pointers after conversion. It handles the following
examples, in addition to some other variations.

Casting from unsigned long:

    void my_callback(unsigned long data)
    {
        struct something *ptr = (struct something *)data;
    ...
    }
    ...
    setup_timer(&ptr->my_timer, my_callback, ptr);

and forced object casts:

    void my_callback(struct something *ptr)
    {
    ...
    }
    ...
    setup_timer(&ptr->my_timer, my_callback, (unsigned long)ptr);

become:

    void my_callback(struct timer_list *t)
    {
        struct something *ptr = from_timer(ptr, t, my_timer);
    ...
    }
    ...
    timer_setup(&ptr->my_timer, my_callback, 0);

Direct function assignments:

    void my_callback(unsigned long data)
    {
        struct something *ptr = (struct something *)data;
    ...
    }
    ...
    ptr->my_timer.function = my_callback;

have a temporary cast added, along with converting the args:

    void my_callback(struct timer_list *t)
    {
        struct something *ptr = from_timer(ptr, t, my_timer);
    ...
    }
    ...
    ptr->my_timer.function = (TIMER_FUNC_TYPE)my_callback;

And finally, callbacks without a data assignment:

    void my_callback(unsigned long data)
    {
    ...
    }
    ...
    setup_timer(&ptr->my_timer, my_callback, 0);

have their argument renamed to verify they're unused during conversion:

    void my_callback(struct timer_list *unused)
    {
    ...
    }
    ...
    timer_setup(&ptr->my_timer, my_callback, 0);

The conversion is done with the following Coccinelle script:

spatch --very-quiet --all-includes --include-headers \
-I ./arch/x86/include -I ./arch/x86/include/generated \
-I ./include -I ./arch/x86/include/uapi \
-I ./arch/x86/include/generated/uapi -I ./include/uapi \
-I ./include/generated/uapi --include ./include/linux/kconfig.h \
--dir . \
--cocci-file ~/src/data/timer_setup.cocci

@fix_address_of@
expression e;
@@

 setup_timer(
-&(e)
+&e
 , ...)

// Update any raw setup_timer() usages that have a NULL callback, but
// would otherwise match change_timer_function_usage, since the latter
// will update all function assignments done in the face of a NULL
// function initialization in setup_timer().
@change_timer_function_usage_NULL@
expression _E;
identifier _timer;
type _cast_data;
@@

(
-setup_timer(&_E->_timer, NULL, _E);
+timer_setup(&_E->_timer, NULL, 0);
|
-setup_timer(&_E->_timer, NULL, (_cast_data)_E);
+timer_setup(&_E->_timer, NULL, 0);
|
-setup_timer(&_E._timer, NULL, &_E);
+timer_setup(&_E._timer, NULL, 0);
|
-setup_timer(&_E._timer, NULL, (_cast_data)&_E);
+timer_setup(&_E._timer, NULL, 0);
)

@change_timer_function_usage@
expression _E;
identifier _timer;
struct timer_list _stl;
identifier _callback;
type _cast_func, _cast_data;
@@

(
-setup_timer(&_E->_timer, _callback, _E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, &_callback, _E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, _callback, (_cast_data)_E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, &_callback, (_cast_data)_E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, (_cast_func)_callback, _E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, (_cast_func)&_callback, _E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, (_cast_func)_callback, (_cast_data)_E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, (_cast_func)&_callback, (_cast_data)_E);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E._timer, _callback, (_cast_data)_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, _callback, (_cast_data)&_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, &_callback, (_cast_data)_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, &_callback, (_cast_data)&_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, (_cast_func)_callback, (_cast_data)_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, (_cast_func)_callback, (_cast_data)&_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, (_cast_func)&_callback, (_cast_data)_E);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, (_cast_func)&_callback, (_cast_data)&_E);
+timer_setup(&_E._timer, _callback, 0);
|
 _E->_timer@_stl.function = _callback;
|
 _E->_timer@_stl.function = &_callback;
|
 _E->_timer@_stl.function = (_cast_func)_callback;
|
 _E->_timer@_stl.function = (_cast_func)&_callback;
|
 _E._timer@_stl.function = _callback;
|
 _E._timer@_stl.function = &_callback;
|
 _E._timer@_stl.function = (_cast_func)_callback;
|
 _E._timer@_stl.function = (_cast_func)&_callback;
)

// callback(unsigned long arg)
@change_callback_handle_cast
 depends on change_timer_function_usage@
identifier change_timer_function_usage._callback;
identifier change_timer_function_usage._timer;
type _origtype;
identifier _origarg;
type _handletype;
identifier _handle;
@@

 void _callback(
-_origtype _origarg
+struct timer_list *t
 )
 {
(
... when != _origarg
_handletype *_handle =
-(_handletype *)_origarg;
+from_timer(_handle, t, _timer);
... when != _origarg
|
... when != _origarg
_handletype *_handle =
-(void *)_origarg;
+from_timer(_handle, t, _timer);
... when != _origarg
|
... when != _origarg
_handletype *_handle;
... when != _handle
_handle =
-(_handletype *)_origarg;
+from_timer(_handle, t, _timer);
... when != _origarg
|
... when != _origarg
_handletype *_handle;
... when != _handle
_handle =
-(void *)_origarg;
+from_timer(_handle, t, _timer);
... when != _origarg
)
 }

// callback(unsigned long arg) without existing variable
@change_callback_handle_cast_no_arg
 depends on change_timer_function_usage &&
                     !change_callback_handle_cast@
identifier change_timer_function_usage._callback;
identifier change_timer_function_usage._timer;
type _origtype;
identifier _origarg;
type _handletype;
@@

 void _callback(
-_origtype _origarg
+struct timer_list *t
 )
 {
+ _handletype *_origarg = from_timer(_origarg, t, _timer);
+
... when != _origarg
- (_handletype *)_origarg
+ _origarg
... when != _origarg
 }

// Avoid already converted callbacks.
@match_callback_converted
 depends on change_timer_function_usage &&
            !change_callback_handle_cast &&
    !change_callback_handle_cast_no_arg@
identifier change_timer_function_usage._callback;
identifier t;
@@

 void _callback(struct timer_list *t)
 { ... }

// callback(struct something *handle)
@change_callback_handle_arg
 depends on change_timer_function_usage &&
    !match_callback_converted &&
            !change_callback_handle_cast &&
            !change_callback_handle_cast_no_arg@
identifier change_timer_function_usage._callback;
identifier change_timer_function_usage._timer;
type _handletype;
identifier _handle;
@@

 void _callback(
-_handletype *_handle
+struct timer_list *t
 )
 {
+ _handletype *_handle = from_timer(_handle, t, _timer);
...
 }

// If change_callback_handle_arg ran on an empty function, remove
// the added handler.
@unchange_callback_handle_arg
 depends on change_timer_function_usage &&
    change_callback_handle_arg@
identifier change_timer_function_usage._callback;
identifier change_timer_function_usage._timer;
type _handletype;
identifier _handle;
identifier t;
@@

 void _callback(struct timer_list *t)
 {
- _handletype *_handle = from_timer(_handle, t, _timer);
 }

// We only want to refactor the setup_timer() data argument if we've found
// the matching callback. This undoes changes in change_timer_function_usage.
@unchange_timer_function_usage
 depends on change_timer_function_usage &&
            !change_callback_handle_cast &&
            !change_callback_handle_cast_no_arg &&
    !change_callback_handle_arg@
expression change_timer_function_usage._E;
identifier change_timer_function_usage._timer;
identifier change_timer_function_usage._callback;
type change_timer_function_usage._cast_data;
@@

(
-timer_setup(&_E->_timer, _callback, 0);
+setup_timer(&_E->_timer, _callback, (_cast_data)_E);
|
-timer_setup(&_E._timer, _callback, 0);
+setup_timer(&_E._timer, _callback, (_cast_data)&_E);
)

// If we fixed a callback from a .function assignment, fix the
// assignment cast now.
@change_timer_function_assignment
 depends on change_timer_function_usage &&
            (change_callback_handle_cast ||
             change_callback_handle_cast_no_arg ||
             change_callback_handle_arg)@
expression change_timer_function_usage._E;
identifier change_timer_function_usage._timer;
identifier change_timer_function_usage._callback;
type _cast_func;
typedef TIMER_FUNC_TYPE;
@@

(
 _E->_timer.function =
-_callback
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E->_timer.function =
-&_callback
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E->_timer.function =
-(_cast_func)_callback;
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E->_timer.function =
-(_cast_func)&_callback
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E._timer.function =
-_callback
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E._timer.function =
-&_callback;
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E._timer.function =
-(_cast_func)_callback
+(TIMER_FUNC_TYPE)_callback
 ;
|
 _E._timer.function =
-(_cast_func)&_callback
+(TIMER_FUNC_TYPE)_callback
 ;
)

// Sometimes timer functions are called directly. Replace matched args.
@change_timer_function_calls
 depends on change_timer_function_usage &&
            (change_callback_handle_cast ||
             change_callback_handle_cast_no_arg ||
             change_callback_handle_arg)@
expression _E;
identifier change_timer_function_usage._timer;
identifier change_timer_function_usage._callback;
type _cast_data;
@@

 _callback(
(
-(_cast_data)_E
+&_E->_timer
|
-(_cast_data)&_E
+&_E._timer
|
-_E
+&_E->_timer
)
 )

// If a timer has been configured without a data argument, it can be
// converted without regard to the callback argument, since it is unused.
@match_timer_function_unused_data@
expression _E;
identifier _timer;
identifier _callback;
@@

(
-setup_timer(&_E->_timer, _callback, 0);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, _callback, 0L);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E->_timer, _callback, 0UL);
+timer_setup(&_E->_timer, _callback, 0);
|
-setup_timer(&_E._timer, _callback, 0);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, _callback, 0L);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_E._timer, _callback, 0UL);
+timer_setup(&_E._timer, _callback, 0);
|
-setup_timer(&_timer, _callback, 0);
+timer_setup(&_timer, _callback, 0);
|
-setup_timer(&_timer, _callback, 0L);
+timer_setup(&_timer, _callback, 0);
|
-setup_timer(&_timer, _callback, 0UL);
+timer_setup(&_timer, _callback, 0);
|
-setup_timer(_timer, _callback, 0);
+timer_setup(_timer, _callback, 0);
|
-setup_timer(_timer, _callback, 0L);
+timer_setup(_timer, _callback, 0);
|
-setup_timer(_timer, _callback, 0UL);
+timer_setup(_timer, _callback, 0);
)

@change_callback_unused_data
 depends on match_timer_function_unused_data@
identifier match_timer_function_unused_data._callback;
type _origtype;
identifier _origarg;
@@

 void _callback(
-_origtype _origarg
+struct timer_list *unused
 )
 {
... when != _origarg
 }

Signed-off-by: Kees Cook <keescook@chromium.org>
227 files changed:
arch/alpha/kernel/srmcons.c
arch/arm/mach-iop32x/n2100.c
arch/arm/mach-orion5x/db88f5281-setup.c
arch/blackfin/kernel/nmi.c
arch/mips/lasat/picvue_proc.c
arch/powerpc/kernel/tau_6xx.c
arch/powerpc/oprofile/op_model_cell.c
arch/powerpc/platforms/cell/spufs/sched.c
arch/powerpc/platforms/powermac/low_i2c.c
arch/s390/kernel/time.c
arch/sh/drivers/heartbeat.c
arch/sh/drivers/pci/common.c
arch/sh/drivers/push-switch.c
block/blk-stat.c
block/blk-throttle.c
drivers/atm/ambassador.c
drivers/atm/firestream.c
drivers/atm/horizon.c
drivers/atm/idt77252.c
drivers/atm/lanai.c
drivers/atm/nicstar.c
drivers/block/DAC960.c
drivers/block/DAC960.h
drivers/block/rsxx/dma.c
drivers/block/skd_main.c
drivers/block/sunvdc.c
drivers/block/umem.c
drivers/block/xsysace.c
drivers/char/ipmi/bt-bmc.c
drivers/char/ipmi/ipmi_msghandler.c
drivers/char/ipmi/ipmi_si_intf.c
drivers/char/ipmi/ipmi_ssif.c
drivers/char/tpm/tpm-dev-common.c
drivers/gpu/drm/drm_vblank.c
drivers/gpu/drm/exynos/exynos_drm_vidi.c
drivers/gpu/drm/i2c/tda998x_drv.c
drivers/gpu/drm/msm/adreno/a5xx_preempt.c
drivers/gpu/drm/msm/msm_gpu.c
drivers/gpu/drm/omapdrm/dss/dsi.c
drivers/gpu/drm/rockchip/rockchip_drm_psr.c
drivers/gpu/drm/vgem/vgem_fence.c
drivers/gpu/drm/via/via_dmablit.c
drivers/hid/hid-appleir.c
drivers/hid/hid-prodikeys.c
drivers/hid/hid-wiimote-core.c
drivers/iio/common/ssp_sensors/ssp_dev.c
drivers/infiniband/hw/mlx5/mr.c
drivers/input/gameport/gameport.c
drivers/input/joystick/db9.c
drivers/input/joystick/gamecon.c
drivers/input/joystick/turbografx.c
drivers/iommu/iova.c
drivers/isdn/capi/capidrv.c
drivers/isdn/divert/isdn_divert.c
drivers/isdn/hardware/eicon/divasi.c
drivers/isdn/hardware/mISDN/hfcmulti.c
drivers/isdn/hardware/mISDN/hfcpci.c
drivers/isdn/hardware/mISDN/mISDNisar.c
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_ppp.c
drivers/isdn/i4l/isdn_tty.c
drivers/media/platform/s5p-mfc/s5p_mfc.c
drivers/media/platform/sti/c8sectpfe/c8sectpfe-core.c
drivers/media/platform/vim2m.c
drivers/media/usb/au0828/au0828-dvb.c
drivers/media/usb/au0828/au0828-video.c
drivers/memstick/core/ms_block.c
drivers/mfd/rtsx_usb.c
drivers/mmc/core/host.c
drivers/mtd/sm_ftl.c
drivers/net/caif/caif_hsi.c
drivers/net/dsa/mv88e6xxx/phy.c
drivers/net/eql.c
drivers/net/ethernet/adi/bfin_mac.c
drivers/net/ethernet/agere/et131x.c
drivers/net/ethernet/amazon/ena/ena_netdev.c
drivers/net/ethernet/aquantia/atlantic/aq_nic.c
drivers/net/ethernet/atheros/atl1c/atl1c_main.c
drivers/net/ethernet/atheros/atl1e/atl1e_main.c
drivers/net/ethernet/atheros/atlx/atl1.c
drivers/net/ethernet/atheros/atlx/atl2.c
drivers/net/ethernet/broadcom/b44.c
drivers/net/ethernet/broadcom/bnx2.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/cisco/enic/enic_main.c
drivers/net/ethernet/marvell/mv643xx_eth.c
drivers/net/ethernet/marvell/pxa168_eth.c
drivers/net/ethernet/marvell/skge.c
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/myricom/myri10ge/myri10ge.c
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
drivers/net/ethernet/pasemi/pasemi_mac.c
drivers/net/ethernet/qlogic/qla3xxx.c
drivers/net/ethernet/rocker/rocker_ofdpa.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/synopsys/dwc-xlgmac-net.c
drivers/net/ethernet/ti/cpsw_ale.c
drivers/net/ethernet/ti/netcp_ethss.c
drivers/net/ethernet/toshiba/spider_net.c
drivers/net/slip/slip.c
drivers/net/tun.c
drivers/net/wan/hdlc_ppp.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
drivers/net/wireless/intel/iwlwifi/dvm/main.c
drivers/net/wireless/intel/iwlwifi/pcie/tx.c
drivers/net/wireless/intersil/hostap/hostap_ap.c
drivers/net/wireless/intersil/hostap/hostap_hw.c
drivers/net/wireless/intersil/orinoco/orinoco_usb.c
drivers/net/wireless/quantenna/qtnfmac/core.c
drivers/net/wireless/ti/wlcore/main.c
drivers/net/xen-netfront.c
drivers/nfc/pn533/pn533.c
drivers/nfc/st-nci/ndlc.c
drivers/ntb/test/ntb_pingpong.c
drivers/platform/x86/sony-laptop.c
drivers/pps/clients/pps-ktimer.c
drivers/rtc/rtc-dev.c
drivers/s390/block/dasd.c
drivers/s390/net/fsm.c
drivers/scsi/arcmsr/arcmsr_hba.c
drivers/scsi/arm/fas216.c
drivers/scsi/bfa/bfad.c
drivers/scsi/bfa/bfad_drv.h
drivers/scsi/bnx2fc/bnx2fc_tgt.c
drivers/scsi/esas2r/esas2r_main.c
drivers/scsi/fcoe/fcoe_ctlr.c
drivers/scsi/fnic/fnic_main.c
drivers/scsi/ncr53c8xx.c
drivers/staging/greybus/operation.c
drivers/staging/lustre/lnet/lnet/net_fault.c
drivers/staging/lustre/lustre/ptlrpc/service.c
drivers/staging/media/imx/imx-ic-prpencvf.c
drivers/staging/media/imx/imx-media-csi.c
drivers/staging/most/hdm-usb/hdm_usb.c
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8712/recv_linux.c
drivers/staging/rtl8712/rtl8712_led.c
drivers/staging/unisys/visorbus/visorbus_main.c
drivers/staging/unisys/visornic/visornic_main.c
drivers/staging/wilc1000/wilc_wfi_cfgoperations.c
drivers/target/target_core_user.c
drivers/tty/ipwireless/hardware.c
drivers/tty/n_gsm.c
drivers/tty/n_r3964.c
drivers/tty/serial/crisv10.c
drivers/tty/serial/fsl_lpuart.c
drivers/tty/serial/ifx6x60.c
drivers/tty/serial/imx.c
drivers/tty/serial/kgdb_nmi.c
drivers/tty/serial/max3100.c
drivers/tty/serial/mux.c
drivers/tty/serial/pnx8xxx_uart.c
drivers/tty/serial/sa1100.c
drivers/tty/serial/sh-sci.c
drivers/tty/serial/sn_console.c
drivers/tty/synclink.c
drivers/tty/synclink_gt.c
drivers/tty/synclinkmp.c
drivers/usb/core/hcd.c
drivers/usb/dwc2/hcd.c
drivers/usb/dwc2/hcd_queue.c
drivers/usb/gadget/udc/at91_udc.c
drivers/usb/gadget/udc/dummy_hcd.c
drivers/usb/gadget/udc/m66592-udc.c
drivers/usb/gadget/udc/omap_udc.c
drivers/usb/gadget/udc/pxa25x_udc.c
drivers/usb/gadget/udc/r8a66597-udc.c
drivers/usb/host/ohci-hcd.c
drivers/usb/host/oxu210hp-hcd.c
drivers/usb/host/r8a66597-hcd.c
drivers/usb/host/sl811-hcd.c
drivers/usb/host/uhci-hcd.c
drivers/usb/host/uhci-q.c
drivers/usb/host/xhci.c
drivers/usb/serial/mos7840.c
drivers/usb/storage/realtek_cr.c
drivers/uwb/drp.c
drivers/uwb/neh.c
drivers/uwb/rsv.c
drivers/uwb/uwb-internal.h
drivers/watchdog/at91sam9_wdt.c
drivers/watchdog/bcm47xx_wdt.c
drivers/watchdog/bcm63xx_wdt.c
drivers/watchdog/cpu5wdt.c
drivers/watchdog/mpc8xxx_wdt.c
drivers/watchdog/mtx-1_wdt.c
drivers/watchdog/nuc900_wdt.c
drivers/watchdog/pcwd.c
drivers/watchdog/pika_wdt.c
drivers/watchdog/rdc321x_wdt.c
drivers/watchdog/shwdt.c
fs/ocfs2/cluster/tcp.c
kernel/padata.c
kernel/time/clocksource.c
net/802/garp.c
net/802/mrp.c
net/appletalk/aarp.c
net/appletalk/ddp.c
net/batman-adv/tp_meter.c
net/bluetooth/hidp/core.c
net/bluetooth/rfcomm/core.c
net/bluetooth/sco.c
net/core/drop_monitor.c
net/core/gen_estimator.c
net/core/neighbour.c
net/decnet/dn_route.c
net/decnet/dn_timer.c
net/ipv4/igmp.c
net/ipv4/ipmr.c
net/ipv6/addrconf.c
net/ipv6/ip6mr.c
net/ipv6/mcast.c
net/ncsi/ncsi-manage.c
net/netfilter/nf_conntrack_expect.c
net/netfilter/nfnetlink_log.c
net/netfilter/xt_IDLETIMER.c
net/netfilter/xt_LED.c
net/nfc/nci/core.c
net/rxrpc/call_object.c
net/wireless/lib80211.c
net/x25/x25_link.c
net/xfrm/xfrm_state.c

index 5da0aec8ce904d1bacc7a4811bcb5b17f3276fcf..438b10c44d732355888e856668fc09c5a9685e85 100644 (file)
@@ -65,9 +65,9 @@ srmcons_do_receive_chars(struct tty_port *port)
 }
 
 static void
-srmcons_receive_chars(unsigned long data)
+srmcons_receive_chars(struct timer_list *t)
 {
-       struct srmcons_private *srmconsp = (struct srmcons_private *)data;
+       struct srmcons_private *srmconsp = from_timer(srmconsp, t, timer);
        struct tty_port *port = &srmconsp->port;
        unsigned long flags;
        int incr = 10;
@@ -206,8 +206,7 @@ static const struct tty_operations srmcons_ops = {
 static int __init
 srmcons_init(void)
 {
-       setup_timer(&srmcons_singleton.timer, srmcons_receive_chars,
-                       (unsigned long)&srmcons_singleton);
+       timer_setup(&srmcons_singleton.timer, srmcons_receive_chars, 0);
        if (srm_is_registered_console) {
                struct tty_driver *driver;
                int err;
index 4a64a11ba63ca07f67b05640fa41a03ab9638a4b..3b73813c6b0434f93c85bf4256ae70049de8ae2c 100644 (file)
@@ -305,7 +305,7 @@ static void n2100_restart(enum reboot_mode mode, const char *cmd)
 
 static struct timer_list power_button_poll_timer;
 
-static void power_button_poll(unsigned long dummy)
+static void power_button_poll(struct timer_list *unused)
 {
        if (gpio_get_value(N2100_POWER_BUTTON) == 0) {
                ctrl_alt_del();
@@ -336,7 +336,7 @@ static int __init n2100_request_gpios(void)
                        pr_err("could not set power GPIO as input\n");
        }
        /* Set up power button poll timer */
-       setup_timer(&power_button_poll_timer, power_button_poll, 0UL);
+       timer_setup(&power_button_poll_timer, power_button_poll, 0);
        power_button_poll_timer.expires = jiffies + (HZ / 10);
        add_timer(&power_button_poll_timer);
        return 0;
index 3f5863de766acbdbe4189f4fe53a23f648710995..39eae10ac8defa76b2574cc907dc7451c5ccd38c 100644 (file)
@@ -172,7 +172,7 @@ static struct platform_device db88f5281_nand_flash = {
 static void __iomem *db88f5281_7seg;
 static struct timer_list db88f5281_timer;
 
-static void db88f5281_7seg_event(unsigned long data)
+static void db88f5281_7seg_event(struct timer_list *unused)
 {
        static int count = 0;
        writel(0, db88f5281_7seg + (count << 4));
@@ -189,7 +189,7 @@ static int __init db88f5281_7seg_init(void)
                        printk(KERN_ERR "Failed to ioremap db88f5281_7seg\n");
                        return -EIO;
                }
-               setup_timer(&db88f5281_timer, db88f5281_7seg_event, 0);
+               timer_setup(&db88f5281_timer, db88f5281_7seg_event, 0);
                mod_timer(&db88f5281_timer, jiffies + 2 * HZ);
        }
 
index 828f4fbdb58a17b11a5c8f84dddce9eea7d760c3..8a211d95821f6d5b98992a65b820da20a7a60b21 100644 (file)
@@ -166,7 +166,7 @@ int check_nmi_wdt_touched(void)
        return 1;
 }
 
-static void nmi_wdt_timer(unsigned long data)
+static void nmi_wdt_timer(struct timer_list *unused)
 {
        if (check_nmi_wdt_touched())
                nmi_wdt_keepalive();
@@ -180,7 +180,7 @@ static int __init init_nmi_wdt(void)
        nmi_wdt_start();
        nmi_active = true;
 
-       setup_timer(&ntimer, nmi_wdt_timer, 0UL);
+       timer_setup(&ntimer, nmi_wdt_timer, 0);
        ntimer.expires = jiffies + NMI_CHECK_TIMEOUT;
        add_timer(&ntimer);
 
index a8103f6972cd43a63163eec228faa5b917685f83..5d89e1ec5fcc3f31feb8181f1c635284036c6ea2 100644 (file)
@@ -156,7 +156,7 @@ static const struct file_operations pvc_scroll_proc_fops = {
        .write          = pvc_scroll_proc_write,
 };
 
-void pvc_proc_timerfunc(unsigned long data)
+void pvc_proc_timerfunc(struct timer_list *unused)
 {
        if (scroll_dir < 0)
                pvc_move(DISPLAY|RIGHT);
@@ -197,7 +197,7 @@ static int __init pvc_proc_init(void)
        if (proc_entry == NULL)
                goto error;
 
-       setup_timer(&timer, pvc_proc_timerfunc, 0UL);
+       timer_setup(&timer, pvc_proc_timerfunc, 0);
 
        return 0;
 error:
index e3c5f75d137c51ec94e5d73e5e4d10f9d2944b99..8cdd852aedd1e86193b036b765b6c5b6d27ac643 100644 (file)
@@ -188,7 +188,7 @@ static void tau_timeout(void * info)
        local_irq_restore(flags);
 }
 
-static void tau_timeout_smp(unsigned long unused)
+static void tau_timeout_smp(struct timer_list *unused)
 {
 
        /* schedule ourselves to be run again */
@@ -230,7 +230,7 @@ int __init TAU_init(void)
 
 
        /* first, set up the window shrinking timer */
-       setup_timer(&tau_timer, tau_timeout_smp, 0UL);
+       timer_setup(&tau_timer, tau_timeout_smp, 0);
        tau_timer.expires = jiffies + shrink_timer;
        add_timer(&tau_timer);
 
index 264b6ab11978dc7a84cd0fbb58fb2245003c1b3d..b90a21bc2f3faeb2e14384c0df62b7c53a6acda7 100644 (file)
@@ -451,7 +451,7 @@ static inline void enable_ctr(u32 cpu, u32 ctr, u32 *pm07_cntrl)
  * This routine will alternate loading the virtual counters for
  * virtual CPUs
  */
-static void cell_virtual_cntr(unsigned long data)
+static void cell_virtual_cntr(struct timer_list *unused)
 {
        int i, prev_hdw_thread, next_hdw_thread;
        u32 cpu;
@@ -555,7 +555,7 @@ static void cell_virtual_cntr(unsigned long data)
 
 static void start_virt_cntrs(void)
 {
-       setup_timer(&timer_virt_cntr, cell_virtual_cntr, 0UL);
+       timer_setup(&timer_virt_cntr, cell_virtual_cntr, 0);
        timer_virt_cntr.expires = jiffies + HZ / 10;
        add_timer(&timer_virt_cntr);
 }
@@ -587,7 +587,7 @@ static int cell_reg_setup_spu_cycles(struct op_counter_config *ctr,
  * periodically based on kernel timer to switch which SPU is
  * being monitored in a round robbin fashion.
  */
-static void spu_evnt_swap(unsigned long data)
+static void spu_evnt_swap(struct timer_list *unused)
 {
        int node;
        int cur_phys_spu, nxt_phys_spu, cur_spu_evnt_phys_spu_indx;
@@ -677,7 +677,7 @@ static void spu_evnt_swap(unsigned long data)
 
 static void start_spu_event_swap(void)
 {
-       setup_timer(&timer_spu_event_swap, spu_evnt_swap, 0UL);
+       timer_setup(&timer_spu_event_swap, spu_evnt_swap, 0);
        timer_spu_event_swap.expires = jiffies + HZ / 25;
        add_timer(&timer_spu_event_swap);
 }
index e47761cdcb98fe4f13bdb3fd395b439ab9b5405a..9033c8194eda5d7d39db99af0af9e6f33811a272 100644 (file)
@@ -992,13 +992,13 @@ static void spu_calc_load(void)
        CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);
 }
 
-static void spusched_wake(unsigned long data)
+static void spusched_wake(struct timer_list *unused)
 {
        mod_timer(&spusched_timer, jiffies + SPUSCHED_TICK);
        wake_up_process(spusched_task);
 }
 
-static void spuloadavg_wake(unsigned long data)
+static void spuloadavg_wake(struct timer_list *unused)
 {
        mod_timer(&spuloadavg_timer, jiffies + LOAD_FREQ);
        spu_calc_load();
@@ -1124,8 +1124,8 @@ int __init spu_sched_init(void)
        }
        spin_lock_init(&spu_prio->runq_lock);
 
-       setup_timer(&spusched_timer, spusched_wake, 0);
-       setup_timer(&spuloadavg_timer, spuloadavg_wake, 0);
+       timer_setup(&spusched_timer, spusched_wake, 0);
+       timer_setup(&spuloadavg_timer, spuloadavg_wake, 0);
 
        spusched_task = kthread_run(spusched_thread, NULL, "spusched");
        if (IS_ERR(spusched_task)) {
index 39a1d4225e0f7c114701e8550b073eb3aabd647d..3408f315ef48ed238a43f81c82e63a9bcb652e00 100644 (file)
@@ -361,9 +361,9 @@ static irqreturn_t kw_i2c_irq(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-static void kw_i2c_timeout(unsigned long data)
+static void kw_i2c_timeout(struct timer_list *t)
 {
-       struct pmac_i2c_host_kw *host = (struct pmac_i2c_host_kw *)data;
+       struct pmac_i2c_host_kw *host = from_timer(host, t, timeout_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&host->lock, flags);
@@ -513,7 +513,7 @@ static struct pmac_i2c_host_kw *__init kw_i2c_host_init(struct device_node *np)
        mutex_init(&host->mutex);
        init_completion(&host->complete);
        spin_lock_init(&host->lock);
-       setup_timer(&host->timeout_timer, kw_i2c_timeout, (unsigned long)host);
+       timer_setup(&host->timeout_timer, kw_i2c_timeout, 0);
 
        psteps = of_get_property(np, "AAPL,address-step", NULL);
        steps = psteps ? (*psteps) : 0x10;
index 5cbd52169348faf9c09bc258c2cd0072e0089ee0..be6198193ec29fc4a78c83c2c4f271e51a0693db 100644 (file)
@@ -523,7 +523,7 @@ static void __init stp_reset(void)
        }
 }
 
-static void stp_timeout(unsigned long dummy)
+static void stp_timeout(struct timer_list *unused)
 {
        queue_work(time_sync_wq, &stp_work);
 }
@@ -532,7 +532,7 @@ static int __init stp_init(void)
 {
        if (!test_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags))
                return 0;
-       setup_timer(&stp_timer, stp_timeout, 0UL);
+       timer_setup(&stp_timer, stp_timeout, 0);
        time_init_wq();
        if (!stp_online)
                return 0;
index c6d96049a0bb07a91e3515fdc5d3261489d60fbe..e8af2ff29bc3b06ca974a5e7a5139a4b2ba52a29 100644 (file)
@@ -59,9 +59,9 @@ static inline void heartbeat_toggle_bit(struct heartbeat_data *hd,
        }
 }
 
-static void heartbeat_timer(unsigned long data)
+static void heartbeat_timer(struct timer_list *t)
 {
-       struct heartbeat_data *hd = (struct heartbeat_data *)data;
+       struct heartbeat_data *hd = from_timer(hd, t, timer);
        static unsigned bit = 0, up = 1;
 
        heartbeat_toggle_bit(hd, bit, hd->flags & HEARTBEAT_INVERTED);
@@ -133,7 +133,7 @@ static int heartbeat_drv_probe(struct platform_device *pdev)
                }
        }
 
-       setup_timer(&hd->timer, heartbeat_timer, (unsigned long)hd);
+       timer_setup(&hd->timer, heartbeat_timer, 0);
        platform_set_drvdata(pdev, hd);
 
        return mod_timer(&hd->timer, jiffies + 1);
index 0d7eb7b5ac8d00feed926b332500e43a0d55fb35..fe163ecd071970737faf086d47cffe8605d3c046 100644 (file)
@@ -85,18 +85,18 @@ int __init pci_is_66mhz_capable(struct pci_channel *hose,
        return cap66 > 0;
 }
 
-static void pcibios_enable_err(unsigned long __data)
+static void pcibios_enable_err(struct timer_list *t)
 {
-       struct pci_channel *hose = (struct pci_channel *)__data;
+       struct pci_channel *hose = from_timer(hose, t, err_timer);
 
        del_timer(&hose->err_timer);
        printk(KERN_DEBUG "PCI: re-enabling error IRQ.\n");
        enable_irq(hose->err_irq);
 }
 
-static void pcibios_enable_serr(unsigned long __data)
+static void pcibios_enable_serr(struct timer_list *t)
 {
-       struct pci_channel *hose = (struct pci_channel *)__data;
+       struct pci_channel *hose = from_timer(hose, t, serr_timer);
 
        del_timer(&hose->serr_timer);
        printk(KERN_DEBUG "PCI: re-enabling system error IRQ.\n");
@@ -106,13 +106,11 @@ static void pcibios_enable_serr(unsigned long __data)
 void pcibios_enable_timers(struct pci_channel *hose)
 {
        if (hose->err_irq) {
-               setup_timer(&hose->err_timer, pcibios_enable_err,
-                           (unsigned long)hose);
+               timer_setup(&hose->err_timer, pcibios_enable_err, 0);
        }
 
        if (hose->serr_irq) {
-               setup_timer(&hose->serr_timer, pcibios_enable_serr,
-                           (unsigned long)hose);
+               timer_setup(&hose->serr_timer, pcibios_enable_serr, 0);
        }
 }
 
index 2dc791507968aa79e93179200eb24e97782cef1c..a171811602337e01c46230e546dd8855ba717eb3 100644 (file)
@@ -26,9 +26,9 @@ static ssize_t switch_show(struct device *dev,
 }
 static DEVICE_ATTR(switch, S_IRUGO, switch_show, NULL);
 
-static void switch_timer(unsigned long data)
+static void switch_timer(struct timer_list *t)
 {
-       struct push_switch *psw = (struct push_switch *)data;
+       struct push_switch *psw = from_timer(psw, t, debounce);
 
        schedule_work(&psw->work);
 }
@@ -78,7 +78,7 @@ static int switch_drv_probe(struct platform_device *pdev)
        }
 
        INIT_WORK(&psw->work, switch_work_handler);
-       setup_timer(&psw->debounce, switch_timer, (unsigned long)psw);
+       timer_setup(&psw->debounce, switch_timer, 0);
 
        /* Workqueue API brain-damage */
        psw->pdev = pdev;
index 3a2f3c96f3672e102d0498848e6086d9ad7184f8..28003bf9941c701ce8d534bbd8c8faaf58066eb9 100644 (file)
@@ -79,9 +79,9 @@ void blk_stat_add(struct request *rq)
        rcu_read_unlock();
 }
 
-static void blk_stat_timer_fn(unsigned long data)
+static void blk_stat_timer_fn(struct timer_list *t)
 {
-       struct blk_stat_callback *cb = (void *)data;
+       struct blk_stat_callback *cb = from_timer(cb, t, timer);
        unsigned int bucket;
        int cpu;
 
@@ -130,7 +130,7 @@ blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *),
        cb->bucket_fn = bucket_fn;
        cb->data = data;
        cb->buckets = buckets;
-       setup_timer(&cb->timer, blk_stat_timer_fn, (unsigned long)cb);
+       timer_setup(&cb->timer, blk_stat_timer_fn, 0);
 
        return cb;
 }
index 96ad32623427d4794ad7563369bc9f89bb85fd26..825bc29767e6699ac85675d319a9866b70cc9b84 100644 (file)
@@ -225,7 +225,7 @@ struct throtl_data
        bool track_bio_latency;
 };
 
-static void throtl_pending_timer_fn(unsigned long arg);
+static void throtl_pending_timer_fn(struct timer_list *t);
 
 static inline struct throtl_grp *pd_to_tg(struct blkg_policy_data *pd)
 {
@@ -478,8 +478,7 @@ static void throtl_service_queue_init(struct throtl_service_queue *sq)
        INIT_LIST_HEAD(&sq->queued[0]);
        INIT_LIST_HEAD(&sq->queued[1]);
        sq->pending_tree = RB_ROOT;
-       setup_timer(&sq->pending_timer, throtl_pending_timer_fn,
-                   (unsigned long)sq);
+       timer_setup(&sq->pending_timer, throtl_pending_timer_fn, 0);
 }
 
 static struct blkg_policy_data *throtl_pd_alloc(gfp_t gfp, int node)
@@ -1249,9 +1248,9 @@ static bool throtl_can_upgrade(struct throtl_data *td,
  * the top-level service_tree is reached, throtl_data->dispatch_work is
  * kicked so that the ready bio's are issued.
  */
-static void throtl_pending_timer_fn(unsigned long arg)
+static void throtl_pending_timer_fn(struct timer_list *t)
 {
-       struct throtl_service_queue *sq = (void *)arg;
+       struct throtl_service_queue *sq = from_timer(sq, t, pending_timer);
        struct throtl_grp *tg = sq_to_tg(sq);
        struct throtl_data *td = sq_to_td(sq);
        struct request_queue *q = td->queue;
index acf16c323e385d68ba01aa7bec0b9c7aaba32ddd..dd286ad404f8a92dfac73ae751f4a55911a680c0 100644 (file)
@@ -293,7 +293,7 @@ static inline void __init show_version (void) {
   
 */
 
-static void do_housekeeping (unsigned long arg);
+static void do_housekeeping (struct timer_list *t);
 /********** globals **********/
 
 static unsigned short debug = 0;
@@ -1493,8 +1493,8 @@ static const struct atmdev_ops amb_ops = {
 };
 
 /********** housekeeping **********/
-static void do_housekeeping (unsigned long arg) {
-  amb_dev * dev = (amb_dev *) arg;
+static void do_housekeeping (struct timer_list *t) {
+  amb_dev * dev = from_timer(dev, t, housekeeping);
   
   // could collect device-specific (not driver/atm-linux) stats here
       
@@ -2267,8 +2267,7 @@ static int amb_probe(struct pci_dev *pci_dev,
        dev->atm_dev->ci_range.vpi_bits = NUM_VPI_BITS;
        dev->atm_dev->ci_range.vci_bits = NUM_VCI_BITS;
 
-       setup_timer(&dev->housekeeping, do_housekeeping,
-                   (unsigned long)dev);
+       timer_setup(&dev->housekeeping, do_housekeeping, 0);
        mod_timer(&dev->housekeeping, jiffies);
 
        // enable host interrupts
index 534001270be53014a2c8a1f51695476edfeec41e..d97c05690faa99363ac709fb237335a0678af4c0 100644 (file)
@@ -1656,9 +1656,9 @@ static irqreturn_t fs_irq (int irq, void *dev_id)
 
 
 #ifdef FS_POLL_FREQ
-static void fs_poll (unsigned long data)
+static void fs_poll (struct timer_list *t)
 {
-       struct fs_dev *dev = (struct fs_dev *) data;
+       struct fs_dev *dev = from_timer(dev, t, timer);
   
        fs_irq (0, dev);
        dev->timer.expires = jiffies + FS_POLL_FREQ;
@@ -1885,7 +1885,7 @@ static int fs_init(struct fs_dev *dev)
        }
 
 #ifdef FS_POLL_FREQ
-       setup_timer (&dev->timer, fs_poll, (unsigned long)dev);
+       timer_setup(&dev->timer, fs_poll, 0);
        dev->timer.expires = jiffies + FS_POLL_FREQ;
        add_timer (&dev->timer);
 #endif
index e121b84857310836742690c001dec6502dc68db2..5ddc203206b8fb739b2f2552e67d17d2545dfe02 100644 (file)
@@ -357,7 +357,7 @@ static inline void __init show_version (void) {
 
 /********** globals **********/
 
-static void do_housekeeping (unsigned long arg);
+static void do_housekeeping (struct timer_list *t);
 
 static unsigned short debug = 0;
 static unsigned short vpi_bits = 0;
@@ -1418,9 +1418,9 @@ static irqreturn_t interrupt_handler(int irq, void *dev_id)
 
 /********** housekeeping **********/
 
-static void do_housekeeping (unsigned long arg) {
+static void do_housekeeping (struct timer_list *t) {
   // just stats at the moment
-  hrz_dev * dev = (hrz_dev *) arg;
+  hrz_dev * dev = from_timer(dev, t, housekeeping);
 
   // collect device-specific (not driver/atm-linux) stats here
   dev->tx_cell_count += rd_regw (dev, TX_CELL_COUNT_OFF);
@@ -2796,7 +2796,7 @@ static int hrz_probe(struct pci_dev *pci_dev,
        dev->atm_dev->ci_range.vpi_bits = vpi_bits;
        dev->atm_dev->ci_range.vci_bits = 10-vpi_bits;
 
-       setup_timer(&dev->housekeeping, do_housekeeping, (unsigned long) dev);
+       timer_setup(&dev->housekeeping, do_housekeeping, 0);
        mod_timer(&dev->housekeeping, jiffies);
 
 out:
index 0e3b9c44c8089c3d82ad2d518ce0c280834bb86a..0277f36be85b94479c5aa303e2fc25b258451586 100644 (file)
@@ -1528,9 +1528,9 @@ idt77252_tx(struct idt77252_dev *card)
 
 
 static void
-tst_timer(unsigned long data)
+tst_timer(struct timer_list *t)
 {
-       struct idt77252_dev *card = (struct idt77252_dev *)data;
+       struct idt77252_dev *card = from_timer(card, t, tst_timer);
        unsigned long base, idle, jump;
        unsigned long flags;
        u32 pc;
@@ -3634,7 +3634,7 @@ static int idt77252_init_one(struct pci_dev *pcidev,
        spin_lock_init(&card->cmd_lock);
        spin_lock_init(&card->tst_lock);
 
-       setup_timer(&card->tst_timer, tst_timer, (unsigned long)card);
+       timer_setup(&card->tst_timer, tst_timer, 0);
 
        /* Do the I/O remapping... */
        card->membase = ioremap(membase, 1024);
index 87e8b5dfac397309424fd457bd38dedbb0504027..6664aa50789ed74a4c82d1d892cbd0e9cfbaf490 100644 (file)
@@ -1761,9 +1761,9 @@ static void iter_dequeue(struct lanai_dev *lanai, vci_t vci)
 }
 #endif /* !DEBUG_RW */
 
-static void lanai_timed_poll(unsigned long arg)
+static void lanai_timed_poll(struct timer_list *t)
 {
-       struct lanai_dev *lanai = (struct lanai_dev *) arg;
+       struct lanai_dev *lanai = from_timer(lanai, t, timer);
 #ifndef DEBUG_RW
        unsigned long flags;
 #ifdef USE_POWERDOWN
@@ -1790,7 +1790,7 @@ static void lanai_timed_poll(unsigned long arg)
 
 static inline void lanai_timed_poll_start(struct lanai_dev *lanai)
 {
-       setup_timer(&lanai->timer, lanai_timed_poll, (unsigned long)lanai);
+       timer_setup(&lanai->timer, lanai_timed_poll, 0);
        lanai->timer.expires = jiffies + LANAI_POLL_PERIOD;
        add_timer(&lanai->timer);
 }
index 335447ed0ba4516b79e4fbf30970e194c5b0d0ee..cbec9adc01c768e95cf8a3ad000697019f38f65c 100644 (file)
@@ -145,7 +145,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user * arg);
 #ifdef EXTRA_DEBUG
 static void which_list(ns_dev * card, struct sk_buff *skb);
 #endif
-static void ns_poll(unsigned long arg);
+static void ns_poll(struct timer_list *unused);
 static void ns_phy_put(struct atm_dev *dev, unsigned char value,
                       unsigned long addr);
 static unsigned char ns_phy_get(struct atm_dev *dev, unsigned long addr);
@@ -284,7 +284,7 @@ static int __init nicstar_init(void)
        XPRINTK("nicstar: nicstar_init() returned.\n");
 
        if (!error) {
-               setup_timer(&ns_timer, ns_poll, 0UL);
+               timer_setup(&ns_timer, ns_poll, 0);
                ns_timer.expires = jiffies + NS_POLL_PERIOD;
                add_timer(&ns_timer);
        }
@@ -2679,7 +2679,7 @@ static void which_list(ns_dev * card, struct sk_buff *skb)
 }
 #endif /* EXTRA_DEBUG */
 
-static void ns_poll(unsigned long arg)
+static void ns_poll(struct timer_list *unused)
 {
        int i;
        ns_dev *card;
index 6f14cdd6015ba6eec1c92f740953855aa828fcdc..442e777bdfb2ba84449c3c273997be71d36ffba2 100644 (file)
@@ -3079,8 +3079,8 @@ DAC960_InitializeController(DAC960_Controller_T *Controller)
       /*
        Initialize the Monitoring Timer.
       */
-      setup_timer(&Controller->MonitoringTimer,
-                  DAC960_MonitoringTimerFunction, (unsigned long)Controller);
+      timer_setup(&Controller->MonitoringTimer,
+                  DAC960_MonitoringTimerFunction, 0);
       Controller->MonitoringTimer.expires =
        jiffies + DAC960_MonitoringTimerInterval;
       add_timer(&Controller->MonitoringTimer);
@@ -5619,9 +5619,9 @@ static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *Command)
   the status of DAC960 Controllers.
 */
 
-static void DAC960_MonitoringTimerFunction(unsigned long TimerData)
+static void DAC960_MonitoringTimerFunction(struct timer_list *t)
 {
-  DAC960_Controller_T *Controller = (DAC960_Controller_T *) TimerData;
+  DAC960_Controller_T *Controller = from_timer(Controller, t, MonitoringTimer);
   DAC960_Command_T *Command;
   unsigned long flags;
 
index 85fa9bb6375964f04bedcc644d7a8185518c69b7..6a6226a2b9320eb275839962a048b530bcc3fd29 100644 (file)
@@ -4406,7 +4406,7 @@ static irqreturn_t DAC960_PD_InterruptHandler(int, void *);
 static irqreturn_t DAC960_P_InterruptHandler(int, void *);
 static void DAC960_V1_QueueMonitoringCommand(DAC960_Command_T *);
 static void DAC960_V2_QueueMonitoringCommand(DAC960_Command_T *);
-static void DAC960_MonitoringTimerFunction(unsigned long);
+static void DAC960_MonitoringTimerFunction(struct timer_list *);
 static void DAC960_Message(DAC960_MessageLevel_T, unsigned char *,
                           DAC960_Controller_T *, ...);
 static void DAC960_CreateProcEntries(DAC960_Controller_T *);
index 6a1b2177951c1521f50b9364739bd433a16a577e..beaccf197a5a85f41eaf1798862f32ce3eb0cd06 100644 (file)
@@ -354,9 +354,9 @@ static void rsxx_handle_dma_error(struct rsxx_dma_ctrl *ctrl,
                rsxx_complete_dma(ctrl, dma, status);
 }
 
-static void dma_engine_stalled(unsigned long data)
+static void dma_engine_stalled(struct timer_list *t)
 {
-       struct rsxx_dma_ctrl *ctrl = (struct rsxx_dma_ctrl *)data;
+       struct rsxx_dma_ctrl *ctrl = from_timer(ctrl, t, activity_timer);
        int cnt;
 
        if (atomic_read(&ctrl->stats.hw_q_depth) == 0 ||
@@ -838,8 +838,7 @@ static int rsxx_dma_ctrl_init(struct pci_dev *dev,
        mutex_init(&ctrl->work_lock);
        INIT_LIST_HEAD(&ctrl->queue);
 
-       setup_timer(&ctrl->activity_timer, dma_engine_stalled,
-                                       (unsigned long)ctrl);
+       timer_setup(&ctrl->activity_timer, dma_engine_stalled, 0);
 
        ctrl->issue_wq = alloc_ordered_workqueue(DRIVER_NAME"_issue", 0);
        if (!ctrl->issue_wq)
index 2819f23e8bf2fe8f18cac9ccae63a8e298adc73a..de0d08133c7ee071e0ce44167fda6e8a0e1d9c51 100644 (file)
@@ -707,9 +707,9 @@ static void skd_start_queue(struct work_struct *work)
        blk_mq_start_hw_queues(skdev->queue);
 }
 
-static void skd_timer_tick(ulong arg)
+static void skd_timer_tick(struct timer_list *t)
 {
-       struct skd_device *skdev = (struct skd_device *)arg;
+       struct skd_device *skdev = from_timer(skdev, t, timer);
        unsigned long reqflags;
        u32 state;
 
@@ -857,7 +857,7 @@ static int skd_start_timer(struct skd_device *skdev)
 {
        int rc;
 
-       setup_timer(&skdev->timer, skd_timer_tick, (ulong)skdev);
+       timer_setup(&skdev->timer, skd_timer_tick, 0);
 
        rc = mod_timer(&skdev->timer, (jiffies + HZ));
        if (rc)
index ad9749463d4fa9a382afa7f24587bbbe3a2efcc9..5ca56bfae63cf69872cd18270fb8c980db4eddae 100644 (file)
@@ -81,7 +81,7 @@ struct vdc_port {
 
 static void vdc_ldc_reset(struct vdc_port *port);
 static void vdc_ldc_reset_work(struct work_struct *work);
-static void vdc_ldc_reset_timer(unsigned long _arg);
+static void vdc_ldc_reset_timer(struct timer_list *t);
 
 static inline struct vdc_port *to_vdc_port(struct vio_driver_state *vio)
 {
@@ -974,8 +974,7 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id)
         */
        ldc_timeout = mdesc_get_property(hp, vdev->mp, "vdc-timeout", NULL);
        port->ldc_timeout = ldc_timeout ? *ldc_timeout : 0;
-       setup_timer(&port->ldc_reset_timer, vdc_ldc_reset_timer,
-                   (unsigned long)port);
+       timer_setup(&port->ldc_reset_timer, vdc_ldc_reset_timer, 0);
        INIT_WORK(&port->ldc_reset_work, vdc_ldc_reset_work);
 
        err = vio_driver_init(&port->vio, vdev, VDEV_DISK,
@@ -1087,9 +1086,9 @@ static void vdc_queue_drain(struct vdc_port *port)
                __blk_end_request_all(req, BLK_STS_IOERR);
 }
 
-static void vdc_ldc_reset_timer(unsigned long _arg)
+static void vdc_ldc_reset_timer(struct timer_list *t)
 {
-       struct vdc_port *port = (struct vdc_port *) _arg;
+       struct vdc_port *port = from_timer(port, t, ldc_reset_timer);
        struct vio_driver_state *vio = &port->vio;
        unsigned long flags;
 
index b4d4ccfe758269d2c863bd0be12ff69bdf5cb585..8077123678ad8b27fb7807f230ca76c3b0a37e01 100644 (file)
@@ -718,7 +718,7 @@ static void check_batteries(struct cardinfo *card)
                set_fault_to_battery_status(card);
 }
 
-static void check_all_batteries(unsigned long ptr)
+static void check_all_batteries(struct timer_list *unused)
 {
        int i;
 
@@ -738,7 +738,7 @@ static void check_all_batteries(unsigned long ptr)
 
 static void init_battery_timer(void)
 {
-       setup_timer(&battery_timer, check_all_batteries, 0UL);
+       timer_setup(&battery_timer, check_all_batteries, 0);
        battery_timer.expires = jiffies + (HZ * 60);
        add_timer(&battery_timer);
 }
index 14459d66ef0cd8ac223992f2f69ad2b725f8481c..c24589414c75926b934b9bb117b237bcb686e736 100644 (file)
@@ -770,9 +770,9 @@ static void ace_fsm_tasklet(unsigned long data)
        spin_unlock_irqrestore(&ace->lock, flags);
 }
 
-static void ace_stall_timer(unsigned long data)
+static void ace_stall_timer(struct timer_list *t)
 {
-       struct ace_device *ace = (void *)data;
+       struct ace_device *ace = from_timer(ace, t, stall_timer);
        unsigned long flags;
 
        dev_warn(ace->dev,
@@ -984,7 +984,7 @@ static int ace_setup(struct ace_device *ace)
         * Initialize the state machine tasklet and stall timer
         */
        tasklet_init(&ace->fsm_tasklet, ace_fsm_tasklet, (unsigned long)ace);
-       setup_timer(&ace->stall_timer, ace_stall_timer, (unsigned long)ace);
+       timer_setup(&ace->stall_timer, ace_stall_timer, 0);
 
        /*
         * Initialize the request queue
index c4ef73c6f45538bc014a98492e2d077cd0c356d5..6edfaa72b98bb76d18ca25e193db2eb5f1d7a427 100644 (file)
@@ -367,9 +367,9 @@ static const struct file_operations bt_bmc_fops = {
        .unlocked_ioctl = bt_bmc_ioctl,
 };
 
-static void poll_timer(unsigned long data)
+static void poll_timer(struct timer_list *t)
 {
-       struct bt_bmc *bt_bmc = (void *)data;
+       struct bt_bmc *bt_bmc = from_timer(bt_bmc, t, poll_timer);
 
        bt_bmc->poll_timer.expires += msecs_to_jiffies(500);
        wake_up(&bt_bmc->queue);
@@ -487,8 +487,7 @@ static int bt_bmc_probe(struct platform_device *pdev)
                dev_info(dev, "Using IRQ %d\n", bt_bmc->irq);
        } else {
                dev_info(dev, "No IRQ; using timer\n");
-               setup_timer(&bt_bmc->poll_timer, poll_timer,
-                           (unsigned long)bt_bmc);
+               timer_setup(&bt_bmc->poll_timer, poll_timer, 0);
                bt_bmc->poll_timer.expires = jiffies + msecs_to_jiffies(10);
                add_timer(&bt_bmc->poll_timer);
        }
index 9de189db2cc3c6486884decb5073d4c1e3830707..f45732a2cb3e06d4830fd27b1f926a0b8ef2d0ca 100644 (file)
@@ -4766,7 +4766,7 @@ static struct timer_list ipmi_timer;
 
 static atomic_t stop_operation;
 
-static void ipmi_timeout(unsigned long data)
+static void ipmi_timeout(struct timer_list *unused)
 {
        ipmi_smi_t intf;
        int nt = 0;
@@ -5172,7 +5172,7 @@ static int ipmi_init_msghandler(void)
 
 #endif /* CONFIG_IPMI_PROC_INTERFACE */
 
-       setup_timer(&ipmi_timer, ipmi_timeout, 0);
+       timer_setup(&ipmi_timer, ipmi_timeout, 0);
        mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
 
        atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
index 71d33a1807e46fabd27984e4bcafe993e9ef0f13..779869ed32b1516261e80fffd440b3ca1e1132ea 100644 (file)
@@ -1091,9 +1091,9 @@ static void set_need_watch(void *send_info, bool enable)
        spin_unlock_irqrestore(&smi_info->si_lock, flags);
 }
 
-static void smi_timeout(unsigned long data)
+static void smi_timeout(struct timer_list *t)
 {
-       struct smi_info   *smi_info = (struct smi_info *) data;
+       struct smi_info   *smi_info = from_timer(smi_info, t, si_timer);
        enum si_sm_result smi_result;
        unsigned long     flags;
        unsigned long     jiffies_now;
@@ -1166,7 +1166,7 @@ static int smi_start_processing(void       *send_info,
        new_smi->intf = intf;
 
        /* Set up the timer that drives the interface. */
-       setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi);
+       timer_setup(&new_smi->si_timer, smi_timeout, 0);
        smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES);
 
        /* Try to claim any interrupts. */
index 466b3a1c0adfd3fe419ee57338d279d18436eb7e..3cfaec728604d1956c8e8c9e21922e0bee9349c6 100644 (file)
@@ -551,9 +551,9 @@ static void start_get(struct ssif_info *ssif_info)
        }
 }
 
-static void retry_timeout(unsigned long data)
+static void retry_timeout(struct timer_list *t)
 {
-       struct ssif_info *ssif_info = (void *) data;
+       struct ssif_info *ssif_info = from_timer(ssif_info, t, retry_timer);
        unsigned long oflags, *flags;
        bool waiting;
 
@@ -1691,8 +1691,7 @@ static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
        spin_lock_init(&ssif_info->lock);
        ssif_info->ssif_state = SSIF_NORMAL;
-       setup_timer(&ssif_info->retry_timer, retry_timeout,
-                   (unsigned long)ssif_info);
+       timer_setup(&ssif_info->retry_timer, retry_timeout, 0);
 
        for (i = 0; i < SSIF_NUM_STATS; i++)
                atomic_set(&ssif_info->stats[i], 0);
index 461bf0b8a09473dbadc89b9259473dc36be2cd77..230b99288024994b800c3e9adb42dfc8c0ea4c05 100644 (file)
@@ -22,9 +22,9 @@
 #include "tpm.h"
 #include "tpm-dev.h"
 
-static void user_reader_timeout(unsigned long ptr)
+static void user_reader_timeout(struct timer_list *t)
 {
-       struct file_priv *priv = (struct file_priv *)ptr;
+       struct file_priv *priv = from_timer(priv, t, user_read_timer);
 
        pr_warn("TPM user space timeout is deprecated (pid=%d)\n",
                task_tgid_nr(current));
@@ -48,8 +48,7 @@ void tpm_common_open(struct file *file, struct tpm_chip *chip,
        priv->chip = chip;
        atomic_set(&priv->data_pending, 0);
        mutex_init(&priv->buffer_mutex);
-       setup_timer(&priv->user_read_timer, user_reader_timeout,
-                       (unsigned long)priv);
+       timer_setup(&priv->user_read_timer, user_reader_timeout, 0);
        INIT_WORK(&priv->work, timeout_work);
 
        file->private_data = priv;
index 09c1c4ff93ca4c00948b3104970a628b81a06893..3717b3df34a41fdc2170af50802490d4ee63ad20 100644 (file)
@@ -367,9 +367,9 @@ void drm_vblank_disable_and_save(struct drm_device *dev, unsigned int pipe)
        spin_unlock_irqrestore(&dev->vblank_time_lock, irqflags);
 }
 
-static void vblank_disable_fn(unsigned long arg)
+static void vblank_disable_fn(struct timer_list *t)
 {
-       struct drm_vblank_crtc *vblank = (void *)arg;
+       struct drm_vblank_crtc *vblank = from_timer(vblank, t, disable_timer);
        struct drm_device *dev = vblank->dev;
        unsigned int pipe = vblank->pipe;
        unsigned long irqflags;
@@ -436,8 +436,7 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs)
                vblank->dev = dev;
                vblank->pipe = i;
                init_waitqueue_head(&vblank->queue);
-               setup_timer(&vblank->disable_timer, vblank_disable_fn,
-                           (unsigned long)vblank);
+               timer_setup(&vblank->disable_timer, vblank_disable_fn, 0);
                seqlock_init(&vblank->seqlock);
        }
 
@@ -1019,7 +1018,7 @@ static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
                if (drm_vblank_offdelay == 0)
                        return;
                else if (drm_vblank_offdelay < 0)
-                       vblank_disable_fn((unsigned long)vblank);
+                       vblank_disable_fn(&vblank->disable_timer);
                else if (!dev->vblank_disable_immediate)
                        mod_timer(&vblank->disable_timer,
                                  jiffies + ((drm_vblank_offdelay * HZ)/1000));
@@ -1650,7 +1649,7 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
        spin_unlock_irqrestore(&dev->event_lock, irqflags);
 
        if (disable_irq)
-               vblank_disable_fn((unsigned long)vblank);
+               vblank_disable_fn(&vblank->disable_timer);
 
        return true;
 }
index 53e03f8af3d5ecd4dda4ec649a4e17017cc693c4..e6b0940b1ac273f95a12c9a747fd4097b1e3cd1c 100644 (file)
@@ -161,9 +161,9 @@ static const struct exynos_drm_crtc_ops vidi_crtc_ops = {
        .atomic_flush = exynos_crtc_handle_event,
 };
 
-static void vidi_fake_vblank_timer(unsigned long arg)
+static void vidi_fake_vblank_timer(struct timer_list *t)
 {
-       struct vidi_context *ctx = (void *)arg;
+       struct vidi_context *ctx = from_timer(ctx, t, timer);
 
        if (drm_crtc_handle_vblank(&ctx->crtc->base))
                mod_timer(&ctx->timer,
@@ -449,7 +449,7 @@ static int vidi_probe(struct platform_device *pdev)
 
        ctx->pdev = pdev;
 
-       setup_timer(&ctx->timer, vidi_fake_vblank_timer, (unsigned long)ctx);
+       timer_setup(&ctx->timer, vidi_fake_vblank_timer, 0);
 
        mutex_init(&ctx->lock);
 
index 4d1f45acf2cdbb0be6b0a9a53d55f6af6fbb28c5..127815253a84522b2e7c59f1f1af175a56b46158 100644 (file)
@@ -601,9 +601,9 @@ tda998x_reset(struct tda998x_priv *priv)
  * we have seen a HPD inactive->active transition.  This code implements
  * that delay.
  */
-static void tda998x_edid_delay_done(unsigned long data)
+static void tda998x_edid_delay_done(struct timer_list *t)
 {
-       struct tda998x_priv *priv = (struct tda998x_priv *)data;
+       struct tda998x_priv *priv = from_timer(priv, t, edid_delay_timer);
 
        priv->edid_delay_active = false;
        wake_up(&priv->edid_delay_waitq);
@@ -1492,8 +1492,7 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
 
        mutex_init(&priv->mutex);       /* protect the page access */
        init_waitqueue_head(&priv->edid_delay_waitq);
-       setup_timer(&priv->edid_delay_timer, tda998x_edid_delay_done,
-                   (unsigned long)priv);
+       timer_setup(&priv->edid_delay_timer, tda998x_edid_delay_done, 0);
        INIT_WORK(&priv->detect_work, tda998x_detect_work);
 
        /* wake up the device: */
index 40f4840ef98e8273c327b0f350025fa9885f5890..970c7963ae29bfd781a01ceac976abf5fe24764f 100644 (file)
@@ -82,9 +82,9 @@ static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu)
        return NULL;
 }
 
-static void a5xx_preempt_timer(unsigned long data)
+static void a5xx_preempt_timer(struct timer_list *t)
 {
-       struct a5xx_gpu *a5xx_gpu = (struct a5xx_gpu *) data;
+       struct a5xx_gpu *a5xx_gpu = from_timer(a5xx_gpu, t, preempt_timer);
        struct msm_gpu *gpu = &a5xx_gpu->base.base;
        struct drm_device *dev = gpu->dev;
        struct msm_drm_private *priv = dev->dev_private;
@@ -300,6 +300,5 @@ void a5xx_preempt_init(struct msm_gpu *gpu)
                }
        }
 
-       setup_timer(&a5xx_gpu->preempt_timer, a5xx_preempt_timer,
-               (unsigned long) a5xx_gpu);
+       timer_setup(&a5xx_gpu->preempt_timer, a5xx_preempt_timer, 0);
 }
index 8d4477818ec216124952c142189ba4c5a9fa47d2..2322014034398110d879d6c97f7d2e5fe25c68fe 100644 (file)
@@ -353,9 +353,9 @@ static void hangcheck_timer_reset(struct msm_gpu *gpu)
                        round_jiffies_up(jiffies + DRM_MSM_HANGCHECK_JIFFIES));
 }
 
-static void hangcheck_handler(unsigned long data)
+static void hangcheck_handler(struct timer_list *t)
 {
-       struct msm_gpu *gpu = (struct msm_gpu *)data;
+       struct msm_gpu *gpu = from_timer(gpu, t, hangcheck_timer);
        struct drm_device *dev = gpu->dev;
        struct msm_drm_private *priv = dev->dev_private;
        struct msm_ringbuffer *ring = gpu->funcs->active_ring(gpu);
@@ -703,8 +703,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
        INIT_WORK(&gpu->recover_work, recover_worker);
 
 
-       setup_timer(&gpu->hangcheck_timer, hangcheck_handler,
-                       (unsigned long)gpu);
+       timer_setup(&gpu->hangcheck_timer, hangcheck_handler, 0);
 
        spin_lock_init(&gpu->perf_lock);
 
index cea744e4d9bd27c17f4e264a0991d33e638bc2cb..c2cf6d98e577bdf7f367042cde89ae6fd196f133 100644 (file)
@@ -4095,7 +4095,7 @@ static void dsi_update_screen_dispc(struct platform_device *dsidev)
 }
 
 #ifdef DSI_CATCH_MISSING_TE
-static void dsi_te_timeout(unsigned long arg)
+static void dsi_te_timeout(struct timer_list *unused)
 {
        DSSERR("TE not received for 250ms!\n");
 }
@@ -5449,7 +5449,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
                             dsi_framedone_timeout_work_callback);
 
 #ifdef DSI_CATCH_MISSING_TE
-       setup_timer(&dsi->te_timer, dsi_te_timeout, 0);
+       timer_setup(&dsi->te_timer, dsi_te_timeout, 0);
 #endif
 
        dsi_mem = platform_get_resource_byname(dsidev, IORESOURCE_MEM, "proto");
index a553e182ff538b69a212ce121185d10a573966ab..3acfd576b7df894ec9dcc278fc7e02165e606d99 100644 (file)
@@ -101,9 +101,9 @@ static void psr_set_state(struct psr_drv *psr, enum psr_state state)
        spin_unlock_irqrestore(&psr->lock, flags);
 }
 
-static void psr_flush_handler(unsigned long data)
+static void psr_flush_handler(struct timer_list *t)
 {
-       struct psr_drv *psr = (struct psr_drv *)data;
+       struct psr_drv *psr = from_timer(psr, t, flush_timer);
        unsigned long flags;
 
        /* If the state has changed since we initiated the flush, do nothing */
@@ -232,7 +232,7 @@ int rockchip_drm_psr_register(struct drm_encoder *encoder,
        if (!psr)
                return -ENOMEM;
 
-       setup_timer(&psr->flush_timer, psr_flush_handler, (unsigned long)psr);
+       timer_setup(&psr->flush_timer, psr_flush_handler, 0);
        spin_lock_init(&psr->lock);
 
        psr->active = true;
index 8fd52f211e9d9623d0225eb0b549aeac7dd31bca..b28876c222b46c6f9b314354d29fb3fd406a979b 100644 (file)
@@ -85,9 +85,9 @@ static const struct dma_fence_ops vgem_fence_ops = {
        .timeline_value_str = vgem_fence_timeline_value_str,
 };
 
-static void vgem_fence_timeout(unsigned long data)
+static void vgem_fence_timeout(struct timer_list *t)
 {
-       struct vgem_fence *fence = (struct vgem_fence *)data;
+       struct vgem_fence *fence = from_timer(fence, t, timer);
 
        dma_fence_signal(&fence->base);
 }
@@ -105,7 +105,7 @@ static struct dma_fence *vgem_fence_create(struct vgem_file *vfile,
        dma_fence_init(&fence->base, &vgem_fence_ops, &fence->lock,
                       dma_fence_context_alloc(1), 1);
 
-       setup_timer(&fence->timer, vgem_fence_timeout, (unsigned long)fence);
+       timer_setup(&fence->timer, vgem_fence_timeout, 0);
 
        /* We force the fence to expire within 10s to prevent driver hangs */
        mod_timer(&fence->timer, jiffies + VGEM_FENCE_TIMEOUT);
index 32c9938e1e1eae51923e5953284d33632ab36581..d6e84a589ef1161241950cae10ffe8f0b8323499 100644 (file)
@@ -452,9 +452,9 @@ via_dmablit_sync(struct drm_device *dev, uint32_t handle, int engine)
 
 
 static void
-via_dmablit_timer(unsigned long data)
+via_dmablit_timer(struct timer_list *t)
 {
-       drm_via_blitq_t *blitq = (drm_via_blitq_t *) data;
+       drm_via_blitq_t *blitq = from_timer(blitq, t, poll_timer);
        struct drm_device *dev = blitq->dev;
        int engine = (int)
                (blitq - ((drm_via_private_t *)dev->dev_private)->blit_queues);
@@ -559,8 +559,7 @@ via_init_dmablit(struct drm_device *dev)
                        init_waitqueue_head(blitq->blit_queue + j);
                init_waitqueue_head(&blitq->busy_queue);
                INIT_WORK(&blitq->wq, via_dmablit_workqueue);
-               setup_timer(&blitq->poll_timer, via_dmablit_timer,
-                               (unsigned long)blitq);
+               timer_setup(&blitq->poll_timer, via_dmablit_timer, 0);
        }
 }
 
index 07cbc70f00e7dfc8ddbfc7554f8e9c134721bc1f..eae7d52cf1a824acb32ad435f55324011aec28c1 100644 (file)
@@ -173,9 +173,9 @@ static void battery_flat(struct appleir *appleir)
        dev_err(&appleir->input_dev->dev, "possible flat battery?\n");
 }
 
-static void key_up_tick(unsigned long data)
+static void key_up_tick(struct timer_list *t)
 {
-       struct appleir *appleir = (struct appleir *)data;
+       struct appleir *appleir = from_timer(appleir, t, key_up_timer);
        struct hid_device *hid = appleir->hid;
        unsigned long flags;
 
@@ -303,8 +303,7 @@ static int appleir_probe(struct hid_device *hid, const struct hid_device_id *id)
        hid->quirks |= HID_QUIRK_HIDINPUT_FORCE;
 
        spin_lock_init(&appleir->lock);
-       setup_timer(&appleir->key_up_timer,
-                   key_up_tick, (unsigned long) appleir);
+       timer_setup(&appleir->key_up_timer, key_up_tick, 0);
 
        hid_set_drvdata(hid, appleir);
 
index 49c4bd34b3c508259fae68e5714d17d7b0a83b70..87eda34ea2f86aa2abb26ac40793ad2e9df40f56 100644 (file)
@@ -239,9 +239,9 @@ drop_note:
        return;
 }
 
-static void pcmidi_sustained_note_release(unsigned long data)
+static void pcmidi_sustained_note_release(struct timer_list *t)
 {
-       struct pcmidi_sustain *pms = (struct pcmidi_sustain *)data;
+       struct pcmidi_sustain *pms = from_timer(pms, t, timer);
 
        pcmidi_send_note(pms->pm, pms->status, pms->note, pms->velocity);
        pms->in_use = 0;
@@ -256,8 +256,7 @@ static void init_sustain_timers(struct pcmidi_snd *pm)
                pms = &pm->sustained_notes[i];
                pms->in_use = 0;
                pms->pm = pm;
-               setup_timer(&pms->timer, pcmidi_sustained_note_release,
-                       (unsigned long)pms);
+               timer_setup(&pms->timer, pcmidi_sustained_note_release, 0);
        }
 }
 
index d00391418d1ae307ad1ceead4ca39e289a04dfac..579884ebd94db1eb685a1e9477a4dca5a2dcf674 100644 (file)
@@ -1226,9 +1226,9 @@ static void wiimote_schedule(struct wiimote_data *wdata)
        spin_unlock_irqrestore(&wdata->state.lock, flags);
 }
 
-static void wiimote_init_timeout(unsigned long arg)
+static void wiimote_init_timeout(struct timer_list *t)
 {
-       struct wiimote_data *wdata = (void*)arg;
+       struct wiimote_data *wdata = from_timer(wdata, t, timer);
 
        wiimote_schedule(wdata);
 }
@@ -1740,7 +1740,7 @@ static struct wiimote_data *wiimote_create(struct hid_device *hdev)
        wdata->state.cmd_battery = 0xff;
 
        INIT_WORK(&wdata->init_worker, wiimote_init_worker);
-       setup_timer(&wdata->timer, wiimote_init_timeout, (long)wdata);
+       timer_setup(&wdata->timer, wiimote_init_timeout, 0);
 
        return wdata;
 }
index ea7adb638d99a71c31366ee89361fd1618e76ed6..2ba2ff5e59c47c125af52e86c32badba3d633249 100644 (file)
@@ -175,9 +175,9 @@ static void ssp_wdt_work_func(struct work_struct *work)
        data->timeout_cnt = 0;
 }
 
-static void ssp_wdt_timer_func(unsigned long ptr)
+static void ssp_wdt_timer_func(struct timer_list *t)
 {
-       struct ssp_data *data = (struct ssp_data *)ptr;
+       struct ssp_data *data = from_timer(data, t, wdt_timer);
 
        switch (data->fw_dl_state) {
        case SSP_FW_DL_STATE_FAIL:
@@ -571,7 +571,7 @@ static int ssp_probe(struct spi_device *spi)
        INIT_WORK(&data->work_wdt, ssp_wdt_work_func);
        INIT_DELAYED_WORK(&data->work_refresh, ssp_refresh_task);
 
-       setup_timer(&data->wdt_timer, ssp_wdt_timer_func, (unsigned long)data);
+       timer_setup(&data->wdt_timer, ssp_wdt_timer_func, 0);
 
        ret = request_threaded_irq(data->spi->irq, NULL,
                                   ssp_irq_thread_fn,
index 9beee9cef137719f4cdc9f092a4a6f982adfcec2..ee0ee1f9994b4fae933d8590b72ba138d29e176d 100644 (file)
@@ -642,9 +642,9 @@ err:
        return -ENOMEM;
 }
 
-static void delay_time_func(unsigned long ctx)
+static void delay_time_func(struct timer_list *t)
 {
-       struct mlx5_ib_dev *dev = (struct mlx5_ib_dev *)ctx;
+       struct mlx5_ib_dev *dev = from_timer(dev, t, delay_timer);
 
        dev->fill_delay = 0;
 }
@@ -663,7 +663,7 @@ int mlx5_mr_cache_init(struct mlx5_ib_dev *dev)
                return -ENOMEM;
        }
 
-       setup_timer(&dev->delay_timer, delay_time_func, (unsigned long)dev);
+       timer_setup(&dev->delay_timer, delay_time_func, 0);
        for (i = 0; i < MAX_MR_CACHE_ENTRIES; i++) {
                ent = &cache->ent[i];
                INIT_LIST_HEAD(&ent->head);
index cedc665364cd6e872ee8a86795b0de19913b8a28..73862a836062ed48b16def4f8ca31930a2227d26 100644 (file)
@@ -202,9 +202,9 @@ void gameport_stop_polling(struct gameport *gameport)
 }
 EXPORT_SYMBOL(gameport_stop_polling);
 
-static void gameport_run_poll_handler(unsigned long d)
+static void gameport_run_poll_handler(struct timer_list *t)
 {
-       struct gameport *gameport = (struct gameport *)d;
+       struct gameport *gameport = from_timer(gameport, t, poll_timer);
 
        gameport->poll_handler(gameport);
        if (gameport->poll_cnt)
@@ -542,8 +542,7 @@ static void gameport_init_port(struct gameport *gameport)
 
        INIT_LIST_HEAD(&gameport->node);
        spin_lock_init(&gameport->timer_lock);
-       setup_timer(&gameport->poll_timer, gameport_run_poll_handler,
-                   (unsigned long)gameport);
+       timer_setup(&gameport->poll_timer, gameport_run_poll_handler, 0);
 }
 
 /*
index f4ad83eab67f66c7a6ebfa956976e02668e9e32a..de0dd4756c8408c7ee877c68b74a64e109bf5a39 100644 (file)
@@ -364,9 +364,9 @@ static int db9_saturn(int mode, struct parport *port, struct input_dev *devs[])
        return 0;
 }
 
-static void db9_timer(unsigned long private)
+static void db9_timer(struct timer_list *t)
 {
-       struct db9 *db9 = (void *) private;
+       struct db9 *db9 = from_timer(db9, t, timer);
        struct parport *port = db9->pd->port;
        struct input_dev *dev = db9->dev[0];
        struct input_dev *dev2 = db9->dev[1];
@@ -609,7 +609,7 @@ static void db9_attach(struct parport *pp)
        db9->pd = pd;
        db9->mode = mode;
        db9->parportno = pp->number;
-       setup_timer(&db9->timer, db9_timer, (long)db9);
+       timer_setup(&db9->timer, db9_timer, 0);
 
        for (i = 0; i < (min(db9_mode->n_pads, DB9_MAX_DEVICES)); i++) {
 
index ca734ea97e53e9fed5dca03f53a59e20607fe569..2ffb2e8bdc3bf456692754a7e6a625e2b572d671 100644 (file)
@@ -743,9 +743,9 @@ static void gc_psx_process_packet(struct gc *gc)
  * gc_timer() initiates reads of console pads data.
  */
 
-static void gc_timer(unsigned long private)
+static void gc_timer(struct timer_list *t)
 {
-       struct gc *gc = (void *) private;
+       struct gc *gc = from_timer(gc, t, timer);
 
 /*
  * N64 pads - must be read first, any read confuses them for 200 us
@@ -974,7 +974,7 @@ static void gc_attach(struct parport *pp)
        mutex_init(&gc->mutex);
        gc->pd = pd;
        gc->parportno = pp->number;
-       setup_timer(&gc->timer, gc_timer, (long) gc);
+       timer_setup(&gc->timer, gc_timer, 0);
 
        for (i = 0; i < n_pads && i < GC_MAX_DEVICES; i++) {
                if (!pads[i])
index a1fdc75a438d10f2d5a7cd9a0edcc75b2403190c..e2685753e460e252a6645ccc479f3f4b2cd4ec02 100644 (file)
@@ -89,9 +89,9 @@ static struct tgfx {
  * tgfx_timer() reads and analyzes TurboGraFX joystick data.
  */
 
-static void tgfx_timer(unsigned long private)
+static void tgfx_timer(struct timer_list *t)
 {
-       struct tgfx *tgfx = (void *) private;
+       struct tgfx *tgfx = from_timer(tgfx, t, timer);
        struct input_dev *dev;
        int data1, data2, i;
 
@@ -200,7 +200,7 @@ static void tgfx_attach(struct parport *pp)
        mutex_init(&tgfx->sem);
        tgfx->pd = pd;
        tgfx->parportno = pp->number;
-       setup_timer(&tgfx->timer, tgfx_timer, (long)tgfx);
+       timer_setup(&tgfx->timer, tgfx_timer, 0);
 
        for (i = 0; i < n_devs; i++) {
                if (n_buttons[i] < 1)
index 466aaa8ba841c3253226543adfecc030b4e5d6f6..83fe2621effe72bc1cbeecd80df4030235d87328 100644 (file)
@@ -36,7 +36,7 @@ static unsigned long iova_rcache_get(struct iova_domain *iovad,
 static void init_iova_rcaches(struct iova_domain *iovad);
 static void free_iova_rcaches(struct iova_domain *iovad);
 static void fq_destroy_all_entries(struct iova_domain *iovad);
-static void fq_flush_timeout(unsigned long data);
+static void fq_flush_timeout(struct timer_list *t);
 
 void
 init_iova_domain(struct iova_domain *iovad, unsigned long granule,
@@ -107,7 +107,7 @@ int init_iova_flush_queue(struct iova_domain *iovad,
                spin_lock_init(&fq->lock);
        }
 
-       setup_timer(&iovad->fq_timer, fq_flush_timeout, (unsigned long)iovad);
+       timer_setup(&iovad->fq_timer, fq_flush_timeout, 0);
        atomic_set(&iovad->fq_timer_on, 0);
 
        return 0;
@@ -519,9 +519,9 @@ static void fq_destroy_all_entries(struct iova_domain *iovad)
        }
 }
 
-static void fq_flush_timeout(unsigned long data)
+static void fq_flush_timeout(struct timer_list *t)
 {
-       struct iova_domain *iovad = (struct iova_domain *)data;
+       struct iova_domain *iovad = from_timer(iovad, t, fq_timer);
        int cpu;
 
        atomic_set(&iovad->fq_timer_on, 0);
index 89dd1303a98a13925c90a09d2089a2870c3ea928..49fef08858c5370e9a0ed67872a8f9ff9aca6cff 100644 (file)
@@ -2235,9 +2235,9 @@ static void send_listen(capidrv_contr *card)
        send_message(card, &cmdcmsg);
 }
 
-static void listentimerfunc(unsigned long x)
+static void listentimerfunc(struct timer_list *t)
 {
-       capidrv_contr *card = (capidrv_contr *)x;
+       capidrv_contr *card = from_timer(card, t, listentimer);
        if (card->state != ST_LISTEN_NONE && card->state != ST_LISTEN_ACTIVE)
                printk(KERN_ERR "%s: controller dead ??\n", card->name);
        send_listen(card);
@@ -2264,7 +2264,7 @@ static int capidrv_addcontr(u16 contr, struct capi_profile *profp)
                return -1;
        }
        card->owner = THIS_MODULE;
-       setup_timer(&card->listentimer, listentimerfunc, (unsigned long)card);
+       timer_setup(&card->listentimer, listentimerfunc, 0);
        strcpy(card->name, id);
        card->contrnr = contr;
        card->nbchan = profp->nbchannel;
index 6f423bc49d0dcfa0a0bd4ef9321213dbd14de07e..5620fd2c6009dfb4e24664e17fad9ca2db3079d5 100644 (file)
@@ -55,10 +55,10 @@ DEFINE_SPINLOCK(divert_lock);
 /***************************/
 /* timer callback function */
 /***************************/
-static void deflect_timer_expire(ulong arg)
+static void deflect_timer_expire(struct timer_list *t)
 {
        unsigned long flags;
-       struct call_struc *cs = (struct call_struc *) arg;
+       struct call_struc *cs = from_timer(cs, t, timer);
 
        spin_lock_irqsave(&divert_lock, flags);
        del_timer(&cs->timer); /* delete active timer */
@@ -157,7 +157,7 @@ int cf_command(int drvid, int mode,
        /* allocate mem for information struct */
        if (!(cs = kmalloc(sizeof(struct call_struc), GFP_ATOMIC)))
                return (-ENOMEM); /* no memory */
-       setup_timer(&cs->timer, deflect_timer_expire, (ulong)cs);
+       timer_setup(&cs->timer, deflect_timer_expire, 0);
        cs->info[0] = '\0';
        cs->ics.driver = drvid;
        cs->ics.command = ISDN_CMD_PROT_IO; /* protocol specific io */
@@ -450,8 +450,7 @@ static int isdn_divert_icall(isdn_ctrl *ic)
                                        return (0); /* no external deflection needed */
                        if (!(cs = kmalloc(sizeof(struct call_struc), GFP_ATOMIC)))
                                return (0); /* no memory */
-                       setup_timer(&cs->timer, deflect_timer_expire,
-                                   (ulong)cs);
+                       timer_setup(&cs->timer, deflect_timer_expire, 0);
                        cs->info[0] = '\0';
 
                        cs->ics = *ic; /* copy incoming data */
index c61049585cbd7b67f24e057238244b8938500a9e..0033d74a72917e18dd58be87fa99f312ad7b9a70 100644 (file)
@@ -78,7 +78,7 @@ static unsigned int um_idi_poll(struct file *file, poll_table *wait);
 static int um_idi_open(struct inode *inode, struct file *file);
 static int um_idi_release(struct inode *inode, struct file *file);
 static int remove_entity(void *entity);
-static void diva_um_timer_function(unsigned long data);
+static void diva_um_timer_function(struct timer_list *t);
 
 /*
  * proc entry
@@ -300,8 +300,7 @@ static int um_idi_open_adapter(struct file *file, int adapter_nr)
        p_os = (diva_um_idi_os_context_t *) diva_um_id_get_os_context(e);
        init_waitqueue_head(&p_os->read_wait);
        init_waitqueue_head(&p_os->close_wait);
-       setup_timer(&p_os->diva_timer_id, (void *)diva_um_timer_function,
-                   (unsigned long)p_os);
+       timer_setup(&p_os->diva_timer_id, diva_um_timer_function, 0);
        p_os->aborted = 0;
        p_os->adapter_nr = adapter_nr;
        return (1);
@@ -457,9 +456,9 @@ void diva_os_wakeup_close(void *os_context)
 }
 
 static
-void diva_um_timer_function(unsigned long data)
+void diva_um_timer_function(struct timer_list *t)
 {
-       diva_um_idi_os_context_t *p_os = (diva_um_idi_os_context_t *) data;
+       diva_um_idi_os_context_t *p_os = from_timer(p_os, t, diva_timer_id);
 
        p_os->aborted = 1;
        wake_up_interruptible(&p_os->read_wait);
index 3cf07b8ced1c067c43c3aeae463e306ae1b22c99..4d85645c87f78721a83fcef94be1feb3bce8c094 100644 (file)
@@ -2855,7 +2855,7 @@ irq_notforus:
  */
 
 static void
-hfcmulti_dbusy_timer(struct hfc_multi *hc)
+hfcmulti_dbusy_timer(struct timer_list *t)
 {
 }
 
@@ -3877,8 +3877,7 @@ hfcmulti_initmode(struct dchannel *dch)
                if (hc->dnum[pt]) {
                        mode_hfcmulti(hc, dch->slot, dch->dev.D.protocol,
                                      -1, 0, -1, 0);
-                       setup_timer(&dch->timer, (void *)hfcmulti_dbusy_timer,
-                                   (long)dch);
+                       timer_setup(&dch->timer, hfcmulti_dbusy_timer, 0);
                }
                for (i = 1; i <= 31; i++) {
                        if (!((1 << i) & hc->bmask[pt])) /* skip unused chan */
@@ -3984,8 +3983,7 @@ hfcmulti_initmode(struct dchannel *dch)
                hc->chan[i].slot_rx = -1;
                hc->chan[i].conf = -1;
                mode_hfcmulti(hc, i, dch->dev.D.protocol, -1, 0, -1, 0);
-               setup_timer(&dch->timer, (void *)hfcmulti_dbusy_timer,
-                           (long)dch);
+               timer_setup(&dch->timer, hfcmulti_dbusy_timer, 0);
                hc->chan[i - 2].slot_tx = -1;
                hc->chan[i - 2].slot_rx = -1;
                hc->chan[i - 2].conf = -1;
index e4ebbee863a17442e96cd6e3e5bb3c9041e5d6da..ba3fe14bbe0091d21134079f7efc245add7f8f02 100644 (file)
@@ -1241,7 +1241,7 @@ hfcpci_int(int intno, void *dev_id)
  * timer callback for D-chan busy resolution. Currently no function
  */
 static void
-hfcpci_dbusy_timer(struct hfc_pci *hc)
+hfcpci_dbusy_timer(struct timer_list *t)
 {
 }
 
@@ -1717,8 +1717,7 @@ static void
 inithfcpci(struct hfc_pci *hc)
 {
        printk(KERN_DEBUG "inithfcpci: entered\n");
-       setup_timer(&hc->dch.timer, (void *)hfcpci_dbusy_timer,
-                   (long)&hc->dch);
+       timer_setup(&hc->dch.timer, hfcpci_dbusy_timer, 0);
        hc->chanlimit = 2;
        mode_hfcpci(&hc->bch[0], 1, -1);
        mode_hfcpci(&hc->bch[1], 2, -1);
index 5b078591b6ee846455ac25642c25c8d932bde99d..b791688d0228ccb8921b57775bf6330adb8a96ea 100644 (file)
@@ -1146,9 +1146,9 @@ mISDNisar_irq(struct isar_hw *isar)
 EXPORT_SYMBOL(mISDNisar_irq);
 
 static void
-ftimer_handler(unsigned long data)
+ftimer_handler(struct timer_list *t)
 {
-       struct isar_ch *ch = (struct isar_ch *)data;
+       struct isar_ch *ch = from_timer(ch, t, ftimer);
 
        pr_debug("%s: ftimer flags %lx\n", ch->is->name, ch->bch.Flags);
        test_and_clear_bit(FLG_FTI_RUN, &ch->bch.Flags);
@@ -1635,11 +1635,9 @@ init_isar(struct isar_hw *isar)
        }
        if (isar->version != 1)
                return -EINVAL;
-       setup_timer(&isar->ch[0].ftimer, &ftimer_handler,
-                   (long)&isar->ch[0]);
+       timer_setup(&isar->ch[0].ftimer, ftimer_handler, 0);
        test_and_set_bit(FLG_INITIALIZED, &isar->ch[0].bch.Flags);
-       setup_timer(&isar->ch[1].ftimer, &ftimer_handler,
-                   (long)&isar->ch[1]);
+       timer_setup(&isar->ch[1].ftimer, ftimer_handler, 0);
        test_and_set_bit(FLG_INITIALIZED, &isar->ch[1].bch.Flags);
        return 0;
 }
index 3fa2f7b31131a8a2e70dd3f2b92c47232b22eb6d..8b03d618185e3c7c0c74c7dc8bad6fe1169f7e19 100644 (file)
@@ -231,7 +231,7 @@ static int isdn_timer_cnt2 = 0;
 static int isdn_timer_cnt3 = 0;
 
 static void
-isdn_timer_funct(ulong dummy)
+isdn_timer_funct(struct timer_list *unused)
 {
        int tf = dev->tflags;
        if (tf & ISDN_TIMER_FAST) {
@@ -2294,7 +2294,7 @@ static int __init isdn_init(void)
                printk(KERN_WARNING "isdn: Could not allocate device-struct.\n");
                return -EIO;
        }
-       setup_timer(&dev->timer, isdn_timer_funct, 0UL);
+       timer_setup(&dev->timer, isdn_timer_funct, 0);
        spin_lock_init(&dev->lock);
        spin_lock_init(&dev->timerlock);
 #ifdef MODULE
index 59d40160cab20393ed4b0ec219632290f43c6e7c..c138f66f26595bcfe714f1b3e1f0838ef4ab6c3f 100644 (file)
@@ -1509,9 +1509,9 @@ static int isdn_net_ioctl(struct net_device *dev,
 
 /* called via cisco_timer.function */
 static void
-isdn_net_ciscohdlck_slarp_send_keepalive(unsigned long data)
+isdn_net_ciscohdlck_slarp_send_keepalive(struct timer_list *t)
 {
-       isdn_net_local *lp = (isdn_net_local *) data;
+       isdn_net_local *lp = from_timer(lp, t, cisco_timer);
        struct sk_buff *skb;
        unsigned char *p;
        unsigned long last_cisco_myseq = lp->cisco_myseq;
@@ -1615,9 +1615,8 @@ isdn_net_ciscohdlck_connected(isdn_net_local *lp)
        /* send slarp request because interface/seq.no.s reset */
        isdn_net_ciscohdlck_slarp_send_request(lp);
 
-       setup_timer(&lp->cisco_timer,
-                   isdn_net_ciscohdlck_slarp_send_keepalive,
-                   (unsigned long)lp);
+       timer_setup(&lp->cisco_timer,
+                   isdn_net_ciscohdlck_slarp_send_keepalive, 0);
        lp->cisco_timer.expires = jiffies + lp->cisco_keepalive_period * HZ;
        add_timer(&lp->cisco_timer);
 }
index cd2b3c69771a24b62a7952a8e7c626fde5459c6b..e07aefb9151ded8b057715ec689286d35ef09733 100644 (file)
@@ -50,7 +50,7 @@ static struct ippp_ccp_reset *isdn_ppp_ccp_reset_alloc(struct ippp_struct *is);
 static void isdn_ppp_ccp_reset_free(struct ippp_struct *is);
 static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is,
                                          unsigned char id);
-static void isdn_ppp_ccp_timer_callback(unsigned long closure);
+static void isdn_ppp_ccp_timer_callback(struct timer_list *t);
 static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_struct *is,
                                                                   unsigned char id);
 static void isdn_ppp_ccp_reset_trans(struct ippp_struct *is,
@@ -2327,10 +2327,10 @@ static void isdn_ppp_ccp_reset_free_state(struct ippp_struct *is,
 
 /* The timer callback function which is called when a ResetReq has timed out,
    aka has never been answered by a ResetAck */
-static void isdn_ppp_ccp_timer_callback(unsigned long closure)
+static void isdn_ppp_ccp_timer_callback(struct timer_list *t)
 {
        struct ippp_ccp_reset_state *rs =
-               (struct ippp_ccp_reset_state *)closure;
+               from_timer(rs, t, timer);
 
        if (!rs) {
                printk(KERN_ERR "ippp_ccp: timer cb with zero closure.\n");
@@ -2376,8 +2376,7 @@ static struct ippp_ccp_reset_state *isdn_ppp_ccp_reset_alloc_state(struct ippp_s
                rs->state = CCPResetIdle;
                rs->is = is;
                rs->id = id;
-               setup_timer(&rs->timer, isdn_ppp_ccp_timer_callback,
-                           (unsigned long)rs);
+               timer_setup(&rs->timer, isdn_ppp_ccp_timer_callback, 0);
                is->reset->rs[id] = rs;
        }
        return rs;
index d30130c8d0f3d356b25aad643fc4c5736e24692e..960f26348bb58e00f81166444a53d7544f8e7f68 100644 (file)
@@ -541,9 +541,9 @@ isdn_tty_senddown(modem_info *info)
  * into the tty's buffer.
  */
 static void
-isdn_tty_modem_do_ncarrier(unsigned long data)
+isdn_tty_modem_do_ncarrier(struct timer_list *t)
 {
-       modem_info *info = (modem_info *) data;
+       modem_info *info = from_timer(info, t, nc_timer);
        isdn_tty_modem_result(RESULT_NO_CARRIER, info);
 }
 
@@ -1812,8 +1812,7 @@ isdn_tty_modem_init(void)
                info->isdn_channel = -1;
                info->drv_index = -1;
                info->xmit_size = ISDN_SERIAL_XMIT_SIZE;
-               setup_timer(&info->nc_timer, isdn_tty_modem_do_ncarrier,
-                           (unsigned long)info);
+               timer_setup(&info->nc_timer, isdn_tty_modem_do_ncarrier, 0);
                skb_queue_head_init(&info->xmit_queue);
 #ifdef CONFIG_ISDN_AUDIO
                skb_queue_head_init(&info->dtmf_queue);
index e179b33d3775a76818f4effbec1eb9140f57186c..bc68dbbcaec1667e29088ecb35f17944ec1ba85f 100644 (file)
@@ -145,9 +145,9 @@ void s5p_mfc_cleanup_queue(struct list_head *lh, struct vb2_queue *vq)
        }
 }
 
-static void s5p_mfc_watchdog(unsigned long arg)
+static void s5p_mfc_watchdog(struct timer_list *t)
 {
-       struct s5p_mfc_dev *dev = (struct s5p_mfc_dev *)arg;
+       struct s5p_mfc_dev *dev = from_timer(dev, t, watchdog_timer);
 
        if (test_bit(0, &dev->hw_lock))
                atomic_inc(&dev->watchdog_cnt);
@@ -1314,8 +1314,7 @@ static int s5p_mfc_probe(struct platform_device *pdev)
        dev->hw_lock = 0;
        INIT_WORK(&dev->watchdog_work, s5p_mfc_watchdog_worker);
        atomic_set(&dev->watchdog_cnt, 0);
-       setup_timer(&dev->watchdog_timer, s5p_mfc_watchdog,
-                   (unsigned long)dev);
+       timer_setup(&dev->watchdog_timer, s5p_mfc_watchdog, 0);
 
        ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
        if (ret)
index 59280ac319374c11103a30ec6123a8f3192a1577..a0acee7671b16170ab9f19f430349d1aec00aeba 100644 (file)
@@ -61,9 +61,9 @@ static int load_c8sectpfe_fw(struct c8sectpfei *fei);
 
 #define FIFO_LEN 1024
 
-static void c8sectpfe_timer_interrupt(unsigned long ac8sectpfei)
+static void c8sectpfe_timer_interrupt(struct timer_list *t)
 {
-       struct c8sectpfei *fei = (struct c8sectpfei *)ac8sectpfei;
+       struct c8sectpfei *fei = from_timer(fei, t, timer);
        struct channel_info *channel;
        int chan_num;
 
@@ -865,8 +865,7 @@ static int c8sectpfe_probe(struct platform_device *pdev)
        }
 
        /* Setup timer interrupt */
-       setup_timer(&fei->timer, c8sectpfe_timer_interrupt,
-                   (unsigned long)fei);
+       timer_setup(&fei->timer, c8sectpfe_timer_interrupt, 0);
 
        mutex_init(&fei->lock);
 
index b01fba020d5f7dba97a6e23bda9763b411976a8d..7bf9fa2f8534bf456e0f1992f014247cc119fbc1 100644 (file)
@@ -388,9 +388,9 @@ static void device_run(void *priv)
        schedule_irq(dev, ctx->transtime);
 }
 
-static void device_isr(unsigned long priv)
+static void device_isr(struct timer_list *t)
 {
-       struct vim2m_dev *vim2m_dev = (struct vim2m_dev *)priv;
+       struct vim2m_dev *vim2m_dev = from_timer(vim2m_dev, t, timer);
        struct vim2m_ctx *curr_ctx;
        struct vb2_v4l2_buffer *src_vb, *dst_vb;
        unsigned long flags;
@@ -1024,7 +1024,7 @@ static int vim2m_probe(struct platform_device *pdev)
        v4l2_info(&dev->v4l2_dev,
                        "Device registered as /dev/video%d\n", vfd->num);
 
-       setup_timer(&dev->timer, device_isr, (long)dev);
+       timer_setup(&dev->timer, device_isr, 0);
        platform_set_drvdata(pdev, dev);
 
        dev->m2m_dev = v4l2_m2m_init(&m2m_ops);
index d701c04b3783ff5783dd85687d77eaff5b0ead69..d9093a3c57c5b275ad4e0956c17832f31e023e64 100644 (file)
@@ -105,9 +105,9 @@ static struct tda18271_config hauppauge_woodbury_tunerconfig = {
 
 static void au0828_restart_dvb_streaming(struct work_struct *work);
 
-static void au0828_bulk_timeout(unsigned long data)
+static void au0828_bulk_timeout(struct timer_list *t)
 {
-       struct au0828_dev *dev = (struct au0828_dev *) data;
+       struct au0828_dev *dev = from_timer(dev, t, bulk_timeout);
 
        dprintk(1, "%s called\n", __func__);
        dev->bulk_timeout_running = 0;
@@ -648,8 +648,7 @@ int au0828_dvb_register(struct au0828_dev *dev)
                return ret;
        }
 
-       setup_timer(&dev->bulk_timeout, au0828_bulk_timeout,
-                   (unsigned long)dev);
+       timer_setup(&dev->bulk_timeout, au0828_bulk_timeout, 0);
 
        return 0;
 }
index 654f67c258635152cf4d4ca7f6f12228f52cdc8e..a240153821e0cd803652804a25f0e998c207305a 100644 (file)
@@ -954,9 +954,9 @@ int au0828_analog_unregister(struct au0828_dev *dev)
 /* This function ensures that video frames continue to be delivered even if
    the ITU-656 input isn't receiving any data (thereby preventing applications
    such as tvtime from hanging) */
-static void au0828_vid_buffer_timeout(unsigned long data)
+static void au0828_vid_buffer_timeout(struct timer_list *t)
 {
-       struct au0828_dev *dev = (struct au0828_dev *) data;
+       struct au0828_dev *dev = from_timer(dev, t, vid_timeout);
        struct au0828_dmaqueue *dma_q = &dev->vidq;
        struct au0828_buffer *buf;
        unsigned char *vid_data;
@@ -978,9 +978,9 @@ static void au0828_vid_buffer_timeout(unsigned long data)
        spin_unlock_irqrestore(&dev->slock, flags);
 }
 
-static void au0828_vbi_buffer_timeout(unsigned long data)
+static void au0828_vbi_buffer_timeout(struct timer_list *t)
 {
-       struct au0828_dev *dev = (struct au0828_dev *) data;
+       struct au0828_dev *dev = from_timer(dev, t, vbi_timeout);
        struct au0828_dmaqueue *dma_q = &dev->vbiq;
        struct au0828_buffer *buf;
        unsigned char *vbi_data;
@@ -1953,10 +1953,8 @@ int au0828_analog_register(struct au0828_dev *dev,
        INIT_LIST_HEAD(&dev->vidq.active);
        INIT_LIST_HEAD(&dev->vbiq.active);
 
-       setup_timer(&dev->vid_timeout, au0828_vid_buffer_timeout,
-                   (unsigned long)dev);
-       setup_timer(&dev->vbi_timeout, au0828_vbi_buffer_timeout,
-                   (unsigned long)dev);
+       timer_setup(&dev->vid_timeout, au0828_vid_buffer_timeout, 0);
+       timer_setup(&dev->vbi_timeout, au0828_vbi_buffer_timeout, 0);
 
        dev->width = NTSC_STD_W;
        dev->height = NTSC_STD_H;
index 22de7f5ed03236cda482dc8e994471522b6b39b5..57b13dfbd21e2d3ba14d46b6d7288fc12ca23898 100644 (file)
@@ -1492,9 +1492,9 @@ static int msb_ftl_scan(struct msb_data *msb)
        return 0;
 }
 
-static void msb_cache_flush_timer(unsigned long data)
+static void msb_cache_flush_timer(struct timer_list *t)
 {
-       struct msb_data *msb = (struct msb_data *)data;
+       struct msb_data *msb = from_timer(msb, t, cache_flush_timer);
        msb->need_flush_cache = true;
        queue_work(msb->io_queue, &msb->io_work);
 }
@@ -1514,8 +1514,7 @@ static void msb_cache_discard(struct msb_data *msb)
 
 static int msb_cache_init(struct msb_data *msb)
 {
-       setup_timer(&msb->cache_flush_timer, msb_cache_flush_timer,
-               (unsigned long)msb);
+       timer_setup(&msb->cache_flush_timer, msb_cache_flush_timer, 0);
 
        if (!msb->cache)
                msb->cache = kzalloc(msb->block_size, GFP_KERNEL);
index 691dab791f7af81d91ed3892a945c74c1f0d3fa1..59d61b04c197b64e1735c8641a673a19fefc0c7e 100644 (file)
@@ -40,9 +40,9 @@ static const struct mfd_cell rtsx_usb_cells[] = {
        },
 };
 
-static void rtsx_usb_sg_timed_out(unsigned long data)
+static void rtsx_usb_sg_timed_out(struct timer_list *t)
 {
-       struct rtsx_ucr *ucr = (struct rtsx_ucr *)data;
+       struct rtsx_ucr *ucr = from_timer(ucr, t, sg_timer);
 
        dev_dbg(&ucr->pusb_intf->dev, "%s: sg transfer timed out", __func__);
        usb_sg_cancel(&ucr->current_sg);
@@ -663,7 +663,7 @@ static int rtsx_usb_probe(struct usb_interface *intf,
                goto out_init_fail;
 
        /* initialize USB SG transfer timer */
-       setup_timer(&ucr->sg_timer, rtsx_usb_sg_timed_out, (unsigned long) ucr);
+       timer_setup(&ucr->sg_timer, rtsx_usb_sg_timed_out, 0);
 
        ret = mfd_add_hotplug_devices(&intf->dev, rtsx_usb_cells,
                                      ARRAY_SIZE(rtsx_usb_cells));
index 35a9e4fd1a9f514ae61e4ec77455915e4870009e..64b03d6eaf184a30c133440299f5820943c8b2bf 100644 (file)
@@ -160,9 +160,9 @@ out:
        return err;
 }
 
-static void mmc_retune_timer(unsigned long data)
+static void mmc_retune_timer(struct timer_list *t)
 {
-       struct mmc_host *host = (struct mmc_host *)data;
+       struct mmc_host *host = from_timer(host, t, retune_timer);
 
        mmc_retune_needed(host);
 }
@@ -389,7 +389,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
        init_waitqueue_head(&host->wq);
        INIT_DELAYED_WORK(&host->detect, mmc_rescan);
        INIT_DELAYED_WORK(&host->sdio_irq_work, sdio_irq_work);
-       setup_timer(&host->retune_timer, mmc_retune_timer, (unsigned long)host);
+       timer_setup(&host->retune_timer, mmc_retune_timer, 0);
 
        /*
         * By default, hosts do not support SGIO or large requests.
index 3692dd5478799f044bbf56895e467b144074b00a..4237c7cebf0210dfe2d2b0684b5fc9b8fbea56d6 100644 (file)
@@ -989,9 +989,9 @@ restart:
 
 
 /* flush timer, runs a second after last write */
-static void sm_cache_flush_timer(unsigned long data)
+static void sm_cache_flush_timer(struct timer_list *t)
 {
-       struct sm_ftl *ftl = (struct sm_ftl *)data;
+       struct sm_ftl *ftl = from_timer(ftl, t, timer);
        queue_work(cache_flush_workqueue, &ftl->flush_work);
 }
 
@@ -1139,7 +1139,7 @@ static void sm_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
 
 
        mutex_init(&ftl->mutex);
-       setup_timer(&ftl->timer, sm_cache_flush_timer, (unsigned long)ftl);
+       timer_setup(&ftl->timer, sm_cache_flush_timer, 0);
        INIT_WORK(&ftl->flush_work, sm_cache_flush_work);
        init_completion(&ftl->erase_completion);
 
index fed75e75207a2472c341695b227e3daad738ada2..b8029ea03307f75322647be894bae56176da3aef 100644 (file)
@@ -66,9 +66,9 @@ static const struct cfhsi_config  hsi_default_config = {
 
 static LIST_HEAD(cfhsi_list);
 
-static void cfhsi_inactivity_tout(unsigned long arg)
+static void cfhsi_inactivity_tout(struct timer_list *t)
 {
-       struct cfhsi *cfhsi = (struct cfhsi *)arg;
+       struct cfhsi *cfhsi = from_timer(cfhsi, t, inactivity_timer);
 
        netdev_dbg(cfhsi->ndev, "%s.\n",
                __func__);
@@ -737,9 +737,9 @@ out_of_sync:
        schedule_work(&cfhsi->out_of_sync_work);
 }
 
-static void cfhsi_rx_slowpath(unsigned long arg)
+static void cfhsi_rx_slowpath(struct timer_list *t)
 {
-       struct cfhsi *cfhsi = (struct cfhsi *)arg;
+       struct cfhsi *cfhsi = from_timer(cfhsi, t, rx_slowpath_timer);
 
        netdev_dbg(cfhsi->ndev, "%s.\n",
                __func__);
@@ -997,9 +997,9 @@ static void cfhsi_wake_down_cb(struct cfhsi_cb_ops *cb_ops)
        wake_up_interruptible(&cfhsi->wake_down_wait);
 }
 
-static void cfhsi_aggregation_tout(unsigned long arg)
+static void cfhsi_aggregation_tout(struct timer_list *t)
 {
-       struct cfhsi *cfhsi = (struct cfhsi *)arg;
+       struct cfhsi *cfhsi = from_timer(cfhsi, t, aggregation_timer);
 
        netdev_dbg(cfhsi->ndev, "%s.\n",
                __func__);
@@ -1211,14 +1211,11 @@ static int cfhsi_open(struct net_device *ndev)
        init_waitqueue_head(&cfhsi->flush_fifo_wait);
 
        /* Setup the inactivity timer. */
-       setup_timer(&cfhsi->inactivity_timer, cfhsi_inactivity_tout,
-                   (unsigned long)cfhsi);
+       timer_setup(&cfhsi->inactivity_timer, cfhsi_inactivity_tout, 0);
        /* Setup the slowpath RX timer. */
-       setup_timer(&cfhsi->rx_slowpath_timer, cfhsi_rx_slowpath,
-                   (unsigned long)cfhsi);
+       timer_setup(&cfhsi->rx_slowpath_timer, cfhsi_rx_slowpath, 0);
        /* Setup the aggregation timer. */
-       setup_timer(&cfhsi->aggregation_timer, cfhsi_aggregation_tout,
-                   (unsigned long)cfhsi);
+       timer_setup(&cfhsi->aggregation_timer, cfhsi_aggregation_tout, 0);
 
        /* Activate HSI interface. */
        res = cfhsi->ops->cfhsi_up(cfhsi->ops);
index 436668bd50dc84dc72f587402348224fe2d9021e..46af8052e535361e7d73ce62f4e6a017c1352bbc 100644 (file)
@@ -149,9 +149,9 @@ static void mv88e6xxx_phy_ppu_reenable_work(struct work_struct *ugly)
        mutex_unlock(&chip->reg_lock);
 }
 
-static void mv88e6xxx_phy_ppu_reenable_timer(unsigned long _ps)
+static void mv88e6xxx_phy_ppu_reenable_timer(struct timer_list *t)
 {
-       struct mv88e6xxx_chip *chip = (void *)_ps;
+       struct mv88e6xxx_chip *chip = from_timer(chip, t, ppu_timer);
 
        schedule_work(&chip->ppu_work);
 }
@@ -193,8 +193,7 @@ static void mv88e6xxx_phy_ppu_state_init(struct mv88e6xxx_chip *chip)
 {
        mutex_init(&chip->ppu_mutex);
        INIT_WORK(&chip->ppu_work, mv88e6xxx_phy_ppu_reenable_work);
-       setup_timer(&chip->ppu_timer, mv88e6xxx_phy_ppu_reenable_timer,
-                   (unsigned long)chip);
+       timer_setup(&chip->ppu_timer, mv88e6xxx_phy_ppu_reenable_timer, 0);
 }
 
 static void mv88e6xxx_phy_ppu_state_destroy(struct mv88e6xxx_chip *chip)
index fccce4b477782ae7d41b927e9a51bf7d79a74774..74263f8efe1a622d86af9a9b79f8d965a5870b17 100644 (file)
@@ -139,9 +139,9 @@ static netdev_tx_t eql_slave_xmit(struct sk_buff *skb, struct net_device *dev);
 
 static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave);
 
-static void eql_timer(unsigned long param)
+static void eql_timer(struct timer_list *t)
 {
-       equalizer_t *eql = (equalizer_t *) param;
+       equalizer_t *eql = from_timer(eql, t, timer);
        struct list_head *this, *tmp, *head;
 
        spin_lock(&eql->queue.lock);
@@ -178,7 +178,7 @@ static void __init eql_setup(struct net_device *dev)
 {
        equalizer_t *eql = netdev_priv(dev);
 
-       setup_timer(&eql->timer, eql_timer, (unsigned long)eql);
+       timer_setup(&eql->timer, eql_timer, 0);
        eql->timer.expires      = jiffies + EQL_DEFAULT_RESCHED_IVAL;
 
        spin_lock_init(&eql->queue.lock);
index 0658cde1586a3fe50a7f0cb22439bd9a5a659d40..7120f2b9c6efa486040ceebf89ed4adeda6fa28e 100644 (file)
@@ -1092,9 +1092,11 @@ static void tx_reclaim_skb(struct bfin_mac_local *lp)
        return;
 }
 
-static void tx_reclaim_skb_timeout(unsigned long lp)
+static void tx_reclaim_skb_timeout(struct timer_list *t)
 {
-       tx_reclaim_skb((struct bfin_mac_local *)lp);
+       struct bfin_mac_local *lp = from_timer(lp, t, tx_reclaim_timer);
+
+       tx_reclaim_skb(lp);
 }
 
 static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
@@ -1650,8 +1652,7 @@ static int bfin_mac_probe(struct platform_device *pdev)
        ndev->netdev_ops = &bfin_mac_netdev_ops;
        ndev->ethtool_ops = &bfin_mac_ethtool_ops;
 
-       setup_timer(&lp->tx_reclaim_timer, tx_reclaim_skb_timeout,
-                   (unsigned long)lp);
+       timer_setup(&lp->tx_reclaim_timer, tx_reclaim_skb_timeout, 0);
 
        lp->flags = 0;
        netif_napi_add(ndev, &lp->napi, bfin_mac_poll, CONFIG_BFIN_RX_DESC_NUM);
index 658e92f79d36b1adb7cc192f5d9fe129ae7ec8cd..48220b6c600d38cd0d84b68d73ffb75b8ad10b01 100644 (file)
@@ -3080,9 +3080,9 @@ err_out:
  * The routine called when the error timer expires, to track the number of
  * recurring errors.
  */
-static void et131x_error_timer_handler(unsigned long data)
+static void et131x_error_timer_handler(struct timer_list *t)
 {
-       struct et131x_adapter *adapter = (struct et131x_adapter *)data;
+       struct et131x_adapter *adapter = from_timer(adapter, t, error_timer);
        struct phy_device *phydev = adapter->netdev->phydev;
 
        if (et1310_in_phy_coma(adapter)) {
@@ -3624,8 +3624,7 @@ static int et131x_open(struct net_device *netdev)
        int result;
 
        /* Start the timer to track NIC errors */
-       setup_timer(&adapter->error_timer, et131x_error_timer_handler,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->error_timer, et131x_error_timer_handler, 0);
        adapter->error_timer.expires = jiffies +
                msecs_to_jiffies(TX_ERROR_PERIOD);
        add_timer(&adapter->error_timer);
index 1c1ddd891ca3ef1acc3e93d9ba5ffefe7e64add7..97c5a89a9cf7a4f1a65dbef70d889efd7d661c20 100644 (file)
@@ -2859,9 +2859,9 @@ static void ena_update_host_info(struct ena_admin_host_info *host_info,
                (netdev->features & GENMASK_ULL(63, 32)) >> 32;
 }
 
-static void ena_timer_service(unsigned long data)
+static void ena_timer_service(struct timer_list *t)
 {
-       struct ena_adapter *adapter = (struct ena_adapter *)data;
+       struct ena_adapter *adapter = from_timer(adapter, t, timer_service);
        u8 *debug_area = adapter->ena_dev->host_attr.debug_area_virt_addr;
        struct ena_admin_host_info *host_info =
                adapter->ena_dev->host_attr.host_info;
@@ -3278,8 +3278,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        ena_update_hints(adapter, &get_feat_ctx.hw_hints);
 
-       setup_timer(&adapter->timer_service, ena_timer_service,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->timer_service, ena_timer_service, 0);
        mod_timer(&adapter->timer_service, round_jiffies(jiffies + HZ));
 
        dev_info(&pdev->dev, "%s found at mem %lx, mac addr %pM Queues %d\n",
index 483e97691eeae2de4604e49cdb8fd8d60fb0dda4..78dfb2ab78cefa0586168a0d043348c3488f0f20 100644 (file)
@@ -163,9 +163,9 @@ static int aq_nic_update_link_status(struct aq_nic_s *self)
        return 0;
 }
 
-static void aq_nic_service_timer_cb(unsigned long param)
+static void aq_nic_service_timer_cb(struct timer_list *t)
 {
-       struct aq_nic_s *self = (struct aq_nic_s *)param;
+       struct aq_nic_s *self = from_timer(self, t, service_timer);
        struct net_device *ndev = aq_nic_get_ndev(self);
        int err = 0;
        unsigned int i = 0U;
@@ -201,9 +201,9 @@ err_exit:
                  jiffies + AQ_CFG_SERVICE_TIMER_INTERVAL);
 }
 
-static void aq_nic_polling_timer_cb(unsigned long param)
+static void aq_nic_polling_timer_cb(struct timer_list *t)
 {
-       struct aq_nic_s *self = (struct aq_nic_s *)param;
+       struct aq_nic_s *self = from_timer(self, t, polling_timer);
        struct aq_vec_s *aq_vec = NULL;
        unsigned int i = 0U;
 
@@ -440,14 +440,12 @@ int aq_nic_start(struct aq_nic_s *self)
        err = aq_nic_update_interrupt_moderation_settings(self);
        if (err)
                goto err_exit;
-       setup_timer(&self->service_timer, &aq_nic_service_timer_cb,
-                   (unsigned long)self);
+       timer_setup(&self->service_timer, aq_nic_service_timer_cb, 0);
        mod_timer(&self->service_timer, jiffies +
                        AQ_CFG_SERVICE_TIMER_INTERVAL);
 
        if (self->aq_nic_cfg.is_polling) {
-               setup_timer(&self->polling_timer, &aq_nic_polling_timer_cb,
-                           (unsigned long)self);
+               timer_setup(&self->polling_timer, aq_nic_polling_timer_cb, 0);
                mod_timer(&self->polling_timer, jiffies +
                          AQ_CFG_POLLING_TIMER_INTERVAL);
        } else {
index 8c9986f3fc0186701bd9ae81f27cbb1519e9f25f..94270f654b3b534b88ed3296f7556de0186de123 100644 (file)
@@ -222,9 +222,10 @@ static u32 atl1c_wait_until_idle(struct atl1c_hw *hw, u32 modu_ctrl)
  * atl1c_phy_config - Timer Call-back
  * @data: pointer to netdev cast into an unsigned long
  */
-static void atl1c_phy_config(unsigned long data)
+static void atl1c_phy_config(struct timer_list *t)
 {
-       struct atl1c_adapter *adapter = (struct atl1c_adapter *) data;
+       struct atl1c_adapter *adapter = from_timer(adapter, t,
+                                                  phy_config_timer);
        struct atl1c_hw *hw = &adapter->hw;
        unsigned long flags;
 
@@ -2613,8 +2614,7 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        adapter->mii.phy_id_mask = 0x1f;
        adapter->mii.reg_num_mask = MDIO_CTRL_REG_MASK;
        netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64);
-       setup_timer(&adapter->phy_config_timer, atl1c_phy_config,
-                       (unsigned long)adapter);
+       timer_setup(&adapter->phy_config_timer, atl1c_phy_config, 0);
        /* setup the private structure */
        err = atl1c_sw_init(adapter);
        if (err) {
index 4f7e195af0bc6dff79687547b9979375b35a17d6..9dc6da039a6d90ac4137a70e94b2c3213c2a4741 100644 (file)
@@ -130,9 +130,10 @@ static inline void atl1e_irq_reset(struct atl1e_adapter *adapter)
  * atl1e_phy_config - Timer Call-back
  * @data: pointer to netdev cast into an unsigned long
  */
-static void atl1e_phy_config(unsigned long data)
+static void atl1e_phy_config(struct timer_list *t)
 {
-       struct atl1e_adapter *adapter = (struct atl1e_adapter *) data;
+       struct atl1e_adapter *adapter = from_timer(adapter, t,
+                                                  phy_config_timer);
        struct atl1e_hw *hw = &adapter->hw;
        unsigned long flags;
 
@@ -2361,8 +2362,7 @@ static int atl1e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        netif_napi_add(netdev, &adapter->napi, atl1e_clean, 64);
 
-       setup_timer(&adapter->phy_config_timer, atl1e_phy_config,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->phy_config_timer, atl1e_phy_config, 0);
 
        /* get user settings */
        atl1e_check_options(adapter);
index 83d2db2abb45535c43f5921ab75791f9869ed4c0..b81fbf119bce314a9e2f282672dccd9712139eaa 100644 (file)
@@ -2575,9 +2575,10 @@ static irqreturn_t atl1_intr(int irq, void *data)
  * atl1_phy_config - Timer Call-back
  * @data: pointer to netdev cast into an unsigned long
  */
-static void atl1_phy_config(unsigned long data)
+static void atl1_phy_config(struct timer_list *t)
 {
-       struct atl1_adapter *adapter = (struct atl1_adapter *)data;
+       struct atl1_adapter *adapter = from_timer(adapter, t,
+                                                 phy_config_timer);
        struct atl1_hw *hw = &adapter->hw;
        unsigned long flags;
 
@@ -3071,8 +3072,7 @@ static int atl1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* assume we have no link for now */
        netif_carrier_off(netdev);
 
-       setup_timer(&adapter->phy_config_timer, atl1_phy_config,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->phy_config_timer, atl1_phy_config, 0);
        adapter->phy_timer_pending = false;
 
        INIT_WORK(&adapter->reset_dev_task, atl1_reset_dev_task);
index 77a1c03255defa77f2c662650d41a1ffc68eb7bb..db4bcc51023adf546ed0e8a9c8d075beec048faf 100644 (file)
@@ -1028,9 +1028,9 @@ static void atl2_tx_timeout(struct net_device *netdev)
  * atl2_watchdog - Timer Call-back
  * @data: pointer to netdev cast into an unsigned long
  */
-static void atl2_watchdog(unsigned long data)
+static void atl2_watchdog(struct timer_list *t)
 {
-       struct atl2_adapter *adapter = (struct atl2_adapter *) data;
+       struct atl2_adapter *adapter = from_timer(adapter, t, watchdog_timer);
 
        if (!test_bit(__ATL2_DOWN, &adapter->flags)) {
                u32 drop_rxd, drop_rxs;
@@ -1053,9 +1053,10 @@ static void atl2_watchdog(unsigned long data)
  * atl2_phy_config - Timer Call-back
  * @data: pointer to netdev cast into an unsigned long
  */
-static void atl2_phy_config(unsigned long data)
+static void atl2_phy_config(struct timer_list *t)
 {
-       struct atl2_adapter *adapter = (struct atl2_adapter *) data;
+       struct atl2_adapter *adapter = from_timer(adapter, t,
+                                                 phy_config_timer);
        struct atl2_hw *hw = &adapter->hw;
        unsigned long flags;
 
@@ -1434,11 +1435,9 @@ static int atl2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        atl2_check_options(adapter);
 
-       setup_timer(&adapter->watchdog_timer, atl2_watchdog,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->watchdog_timer, atl2_watchdog, 0);
 
-       setup_timer(&adapter->phy_config_timer, atl2_phy_config,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->phy_config_timer, atl2_phy_config, 0);
 
        INIT_WORK(&adapter->reset_task, atl2_reset_task);
        INIT_WORK(&adapter->link_chg_task, atl2_link_chg_task);
index 42e44fc03a181b7564f1ff16ce05a545e135208d..e445ab724827f8d3c7c3770748902c08b76f8e13 100644 (file)
@@ -599,9 +599,9 @@ static void b44_check_phy(struct b44 *bp)
        }
 }
 
-static void b44_timer(unsigned long __opaque)
+static void b44_timer(struct timer_list *t)
 {
-       struct b44 *bp = (struct b44 *) __opaque;
+       struct b44 *bp = from_timer(bp, t, timer);
 
        spin_lock_irq(&bp->lock);
 
@@ -1474,7 +1474,7 @@ static int b44_open(struct net_device *dev)
                goto out;
        }
 
-       setup_timer(&bp->timer, b44_timer, (unsigned long)bp);
+       timer_setup(&bp->timer, b44_timer, 0);
        bp->timer.expires = jiffies + HZ;
        add_timer(&bp->timer);
 
index b3055a76dfbf5275a2b4dc6b864e5aa9704f913d..7919f6112ecf95786e9f9a180fa248ef258428a5 100644 (file)
@@ -6183,9 +6183,9 @@ bnx2_5708_serdes_timer(struct bnx2 *bp)
 }
 
 static void
-bnx2_timer(unsigned long data)
+bnx2_timer(struct timer_list *t)
 {
-       struct bnx2 *bp = (struct bnx2 *) data;
+       struct bnx2 *bp = from_timer(bp, t, timer);
 
        if (!netif_running(bp->dev))
                return;
@@ -8462,7 +8462,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
        bnx2_set_default_link(bp);
        bp->req_flow_ctrl = FLOW_CTRL_RX | FLOW_CTRL_TX;
 
-       setup_timer(&bp->timer, bnx2_timer, (unsigned long)bp);
+       timer_setup(&bp->timer, bnx2_timer, 0);
        bp->timer.expires = RUN_AT(BNX2_TIMER_INTERVAL);
 
 #ifdef BCM_CNIC
index be9fd7d184d0a00acfcc3a2e5b4d06a52d2a761d..91e2a7560b48d572d26e8566c9a3b0667083d45d 100644 (file)
@@ -5761,9 +5761,9 @@ void bnx2x_drv_pulse(struct bnx2x *bp)
                 bp->fw_drv_pulse_wr_seq);
 }
 
-static void bnx2x_timer(unsigned long data)
+static void bnx2x_timer(struct timer_list *t)
 {
-       struct bnx2x *bp = (struct bnx2x *) data;
+       struct bnx2x *bp = from_timer(bp, t, timer);
 
        if (!netif_running(bp->dev))
                return;
@@ -12421,7 +12421,7 @@ static int bnx2x_init_bp(struct bnx2x *bp)
 
        bp->current_interval = CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ;
 
-       setup_timer(&bp->timer, bnx2x_timer, (unsigned long)bp);
+       timer_setup(&bp->timer, bnx2x_timer, 0);
        bp->timer.expires = jiffies + bp->current_interval;
 
        if (SHMEM2_HAS(bp, dcbx_lldp_params_offset) &&
index 33c49ad697e47360a83abcfeb1a7c1dae008da5f..c5c38d4b7d1ccd04044f972777c5d3844e755a02 100644 (file)
@@ -6962,9 +6962,9 @@ static void bnxt_poll_controller(struct net_device *dev)
 }
 #endif
 
-static void bnxt_timer(unsigned long data)
+static void bnxt_timer(struct timer_list *t)
 {
-       struct bnxt *bp = (struct bnxt *)data;
+       struct bnxt *bp = from_timer(bp, t, timer);
        struct net_device *dev = bp->dev;
 
        if (!netif_running(dev))
@@ -7236,7 +7236,7 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
 
        bnxt_init_dflt_coal(bp);
 
-       setup_timer(&bp->timer, bnxt_timer, (unsigned long)bp);
+       timer_setup(&bp->timer, bnxt_timer, 0);
        bp->current_interval = BNXT_TIMER_INTERVAL;
 
        clear_bit(BNXT_STATE_OPEN, &bp->state);
index d8d5f207c759fb51b970359cb52fba32dcbda638..de51c2177d03b3cf9e4653226bd8901b1d29834e 100644 (file)
@@ -10931,9 +10931,9 @@ static void tg3_chk_missed_msi(struct tg3 *tp)
        }
 }
 
-static void tg3_timer(unsigned long __opaque)
+static void tg3_timer(struct timer_list *t)
 {
-       struct tg3 *tp = (struct tg3 *) __opaque;
+       struct tg3 *tp = from_timer(tp, t, timer);
 
        spin_lock(&tp->lock);
 
@@ -11087,7 +11087,7 @@ static void tg3_timer_init(struct tg3 *tp)
        tp->asf_multiplier = (HZ / tp->timer_offset) *
                             TG3_FW_UPDATE_FREQ_SEC;
 
-       setup_timer(&tp->timer, tg3_timer, (unsigned long)tp);
+       timer_setup(&tp->timer, tg3_timer, 0);
 }
 
 static void tg3_timer_start(struct tg3 *tp)
index 4a11baffe02d931fc54a9b9a0bc8d56e20dd800a..e130fb757e7bbeffeb78ac8139d84f1f1c688440 100644 (file)
@@ -1676,9 +1676,9 @@ static int enic_poll_msix_rq(struct napi_struct *napi, int budget)
        return work_done;
 }
 
-static void enic_notify_timer(unsigned long data)
+static void enic_notify_timer(struct timer_list *t)
 {
-       struct enic *enic = (struct enic *)data;
+       struct enic *enic = from_timer(enic, t, notify_timer);
 
        enic_notify_check(enic);
 
@@ -2846,8 +2846,7 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* Setup notification timer, HW reset task, and wq locks
         */
 
-       setup_timer(&enic->notify_timer, enic_notify_timer,
-                   (unsigned long)enic);
+       timer_setup(&enic->notify_timer, enic_notify_timer, 0);
 
        enic_set_rx_coal_setting(enic);
        INIT_WORK(&enic->reset, enic_reset);
index 81c1fac00d330e1fc2e16cb9f7756f954339af62..62f204f3231693807231c269183a49961020c7c8 100644 (file)
@@ -1346,9 +1346,9 @@ static void mib_counters_update(struct mv643xx_eth_private *mp)
        spin_unlock_bh(&mp->mib_counters_lock);
 }
 
-static void mib_counters_timer_wrapper(unsigned long _mp)
+static void mib_counters_timer_wrapper(struct timer_list *t)
 {
-       struct mv643xx_eth_private *mp = (void *)_mp;
+       struct mv643xx_eth_private *mp = from_timer(mp, t, mib_counters_timer);
        mib_counters_update(mp);
        mod_timer(&mp->mib_counters_timer, jiffies + 30 * HZ);
 }
@@ -2321,9 +2321,9 @@ static int mv643xx_eth_poll(struct napi_struct *napi, int budget)
        return work_done;
 }
 
-static inline void oom_timer_wrapper(unsigned long data)
+static inline void oom_timer_wrapper(struct timer_list *t)
 {
-       struct mv643xx_eth_private *mp = (void *)data;
+       struct mv643xx_eth_private *mp = from_timer(mp, t, rx_oom);
 
        napi_schedule(&mp->napi);
 }
@@ -3178,8 +3178,7 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
 
        mib_counters_clear(mp);
 
-       setup_timer(&mp->mib_counters_timer, mib_counters_timer_wrapper,
-                   (unsigned long)mp);
+       timer_setup(&mp->mib_counters_timer, mib_counters_timer_wrapper, 0);
        mp->mib_counters_timer.expires = jiffies + 30 * HZ;
 
        spin_lock_init(&mp->mib_counters_lock);
@@ -3188,7 +3187,7 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
 
        netif_napi_add(dev, &mp->napi, mv643xx_eth_poll, NAPI_POLL_WEIGHT);
 
-       setup_timer(&mp->rx_oom, oom_timer_wrapper, (unsigned long)mp);
+       timer_setup(&mp->rx_oom, oom_timer_wrapper, 0);
 
 
        res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
index 91b1c154fd29e68157fea64b30c25186d903a047..7bbd86f08e5ff369f43af9b22818add8745cfe80 100644 (file)
@@ -362,9 +362,9 @@ static void rxq_refill(struct net_device *dev)
        }
 }
 
-static inline void rxq_refill_timer_wrapper(unsigned long data)
+static inline void rxq_refill_timer_wrapper(struct timer_list *t)
 {
-       struct pxa168_eth_private *pep = (void *)data;
+       struct pxa168_eth_private *pep = from_timer(pep, t, timeout);
        napi_schedule(&pep->napi);
 }
 
@@ -1496,8 +1496,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
        netif_napi_add(dev, &pep->napi, pxa168_rx_poll, pep->rx_ring_size);
 
        memset(&pep->timeout, 0, sizeof(struct timer_list));
-       setup_timer(&pep->timeout, rxq_refill_timer_wrapper,
-                   (unsigned long)pep);
+       timer_setup(&pep->timeout, rxq_refill_timer_wrapper, 0);
 
        pep->smi_bus = mdiobus_alloc();
        if (!pep->smi_bus) {
index eef35bf3e8490f3832e62270d129d12bf098fae3..6e423f098a60d33f96678ef5c08b1b52cbe3287f 100644 (file)
@@ -1495,9 +1495,9 @@ static int xm_check_link(struct net_device *dev)
  * get an interrupt when carrier is detected, need to poll for
  * link coming up.
  */
-static void xm_link_timer(unsigned long arg)
+static void xm_link_timer(struct timer_list *t)
 {
-       struct skge_port *skge = (struct skge_port *) arg;
+       struct skge_port *skge = from_timer(skge, t, link_timer);
        struct net_device *dev = skge->netdev;
        struct skge_hw *hw = skge->hw;
        int port = skge->port;
@@ -3897,7 +3897,7 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
 
        /* Only used for Genesis XMAC */
        if (is_genesis(hw))
-           setup_timer(&skge->link_timer, xm_link_timer, (unsigned long) skge);
+           timer_setup(&skge->link_timer, xm_link_timer, 0);
        else {
                dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG |
                                   NETIF_F_RXCSUM;
index 1145cde2274a4cb778ba816716c3c55a5850d71e..9efe1771423cdde9b7832042b61f3ac60b347123 100644 (file)
@@ -2974,9 +2974,9 @@ static int sky2_rx_hung(struct net_device *dev)
        }
 }
 
-static void sky2_watchdog(unsigned long arg)
+static void sky2_watchdog(struct timer_list *t)
 {
-       struct sky2_hw *hw = (struct sky2_hw *) arg;
+       struct sky2_hw *hw = from_timer(hw, t, watchdog_timer);
 
        /* Check for lost IRQ once a second */
        if (sky2_read32(hw, B0_ISRC)) {
@@ -5083,7 +5083,7 @@ static int sky2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                sky2_show_addr(dev1);
        }
 
-       setup_timer(&hw->watchdog_timer, sky2_watchdog, (unsigned long) hw);
+       timer_setup(&hw->watchdog_timer, sky2_watchdog, 0);
        INIT_WORK(&hw->restart_work, sky2_restart);
 
        pci_set_drvdata(pdev, hw);
index b171ed2015fe479b6d7d099f14e188a3dd8cda00..2521c8c40015de32abbb3f30dbf8f9d527126b6f 100644 (file)
@@ -3501,7 +3501,7 @@ static void myri10ge_watchdog(struct work_struct *work)
  * cannot detect a NIC with a parity error in a timely fashion if the
  * NIC is lightly loaded.
  */
-static void myri10ge_watchdog_timer(unsigned long arg)
+static void myri10ge_watchdog_timer(struct timer_list *t)
 {
        struct myri10ge_priv *mgp;
        struct myri10ge_slice_state *ss;
@@ -3509,7 +3509,7 @@ static void myri10ge_watchdog_timer(unsigned long arg)
        u32 rx_pause_cnt;
        u16 cmd;
 
-       mgp = (struct myri10ge_priv *)arg;
+       mgp = from_timer(mgp, t, watchdog_timer);
 
        rx_pause_cnt = ntohl(mgp->ss[0].fw_stats->dropped_pause);
        busy_slice_cnt = 0;
@@ -3930,8 +3930,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        pci_save_state(pdev);
 
        /* Setup the watchdog timer */
-       setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer,
-                   (unsigned long)mgp);
+       timer_setup(&mgp->watchdog_timer, myri10ge_watchdog_timer, 0);
 
        netdev->ethtool_ops = &myri10ge_ethtool_ops;
        INIT_WORK(&mgp->watchdog_work, myri10ge_watchdog);
index 457ee80307ea6612a8a085c981d5897f1dbd9901..40e52ffb732f4fc9f9a10b9444e8c4b2d2722e87 100644 (file)
@@ -1089,9 +1089,10 @@ static void pch_gbe_set_mode(struct pch_gbe_adapter *adapter, u16 speed,
  * pch_gbe_watchdog - Watchdog process
  * @data:  Board private structure
  */
-static void pch_gbe_watchdog(unsigned long data)
+static void pch_gbe_watchdog(struct timer_list *t)
 {
-       struct pch_gbe_adapter *adapter = (struct pch_gbe_adapter *)data;
+       struct pch_gbe_adapter *adapter = from_timer(adapter, t,
+                                                    watchdog_timer);
        struct net_device *netdev = adapter->netdev;
        struct pch_gbe_hw *hw = &adapter->hw;
 
@@ -2644,8 +2645,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,
                dev_err(&pdev->dev, "Invalid MAC address, "
                                    "interface disabled.\n");
        }
-       setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
-                   (unsigned long)adapter);
+       timer_setup(&adapter->watchdog_timer, pch_gbe_watchdog, 0);
 
        INIT_WORK(&adapter->reset_task, pch_gbe_reset_task);
 
index 49591d9c2e1b9f4bde7217e750396d99f032f302..c9a55b774935cd8900435e308c441d2283e5cb39 100644 (file)
@@ -943,9 +943,9 @@ static irqreturn_t pasemi_mac_rx_intr(int irq, void *data)
 
 #define TX_CLEAN_INTERVAL HZ
 
-static void pasemi_mac_tx_timer(unsigned long data)
+static void pasemi_mac_tx_timer(struct timer_list *t)
 {
-       struct pasemi_mac_txring *txring = (struct pasemi_mac_txring *)data;
+       struct pasemi_mac_txring *txring = from_timer(txring, t, clean_timer);
        struct pasemi_mac *mac = txring->mac;
 
        pasemi_mac_clean_tx(txring);
@@ -1199,8 +1199,7 @@ static int pasemi_mac_open(struct net_device *dev)
        if (dev->phydev)
                phy_start(dev->phydev);
 
-       setup_timer(&mac->tx->clean_timer, pasemi_mac_tx_timer,
-                   (unsigned long)mac->tx);
+       timer_setup(&mac->tx->clean_timer, pasemi_mac_tx_timer, 0);
        mod_timer(&mac->tx->clean_timer, jiffies + HZ);
 
        return 0;
index 05479d4354696d0a34a573e4cbbe72a41bbfd7c1..9e5264d8773b09a3cdda77a8cec066a44d3359a3 100644 (file)
@@ -3749,9 +3749,9 @@ static void ql_get_board_info(struct ql3_adapter *qdev)
        qdev->pci_slot = (u8) PCI_SLOT(qdev->pdev->devfn);
 }
 
-static void ql3xxx_timer(unsigned long ptr)
+static void ql3xxx_timer(struct timer_list *t)
 {
-       struct ql3_adapter *qdev = (struct ql3_adapter *)ptr;
+       struct ql3_adapter *qdev = from_timer(qdev, t, adapter_timer);
        queue_delayed_work(qdev->workqueue, &qdev->link_state_work, 0);
 }
 
@@ -3891,7 +3891,7 @@ static int ql3xxx_probe(struct pci_dev *pdev,
        INIT_DELAYED_WORK(&qdev->tx_timeout_work, ql_tx_timeout_work);
        INIT_DELAYED_WORK(&qdev->link_state_work, ql_link_state_machine_work);
 
-       setup_timer(&qdev->adapter_timer, ql3xxx_timer, (unsigned long)qdev);
+       timer_setup(&qdev->adapter_timer, ql3xxx_timer, 0);
        qdev->adapter_timer.expires = jiffies + HZ * 2; /* two second delay */
 
        if (!cards_found) {
index 0653b70723a34f973d825d991b83009e7ccab78b..6d6fb8cf3e7c84a28b2de68fd25bc5b575df7659 100644 (file)
@@ -1983,9 +1983,9 @@ err_out:
        return err;
 }
 
-static void ofdpa_fdb_cleanup(unsigned long data)
+static void ofdpa_fdb_cleanup(struct timer_list *t)
 {
-       struct ofdpa *ofdpa = (struct ofdpa *)data;
+       struct ofdpa *ofdpa = from_timer(ofdpa, t, fdb_cleanup_timer);
        struct ofdpa_port *ofdpa_port;
        struct ofdpa_fdb_tbl_entry *entry;
        struct hlist_node *tmp;
@@ -2368,8 +2368,7 @@ static int ofdpa_init(struct rocker *rocker)
        hash_init(ofdpa->neigh_tbl);
        spin_lock_init(&ofdpa->neigh_tbl_lock);
 
-       setup_timer(&ofdpa->fdb_cleanup_timer, ofdpa_fdb_cleanup,
-                   (unsigned long) ofdpa);
+       timer_setup(&ofdpa->fdb_cleanup_timer, ofdpa_fdb_cleanup, 0);
        mod_timer(&ofdpa->fdb_cleanup_timer, jiffies);
 
        ofdpa->ageing_time = BR_DEFAULT_AGEING_TIME;
index ff4fb5eae1af3f0c7f3dcb61492a530a12f19bce..f63c2ddced3c9a1e90f4425b28be95d202379a71 100644 (file)
@@ -345,9 +345,9 @@ void stmmac_disable_eee_mode(struct stmmac_priv *priv)
  *  if there is no data transfer and if we are not in LPI state,
  *  then MAC Transmitter can be moved to LPI state.
  */
-static void stmmac_eee_ctrl_timer(unsigned long arg)
+static void stmmac_eee_ctrl_timer(struct timer_list *t)
 {
-       struct stmmac_priv *priv = (struct stmmac_priv *)arg;
+       struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);
 
        stmmac_enable_eee_mode(priv);
        mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
@@ -401,9 +401,8 @@ bool stmmac_eee_init(struct stmmac_priv *priv)
                spin_lock_irqsave(&priv->lock, flags);
                if (!priv->eee_active) {
                        priv->eee_active = 1;
-                       setup_timer(&priv->eee_ctrl_timer,
-                                   stmmac_eee_ctrl_timer,
-                                   (unsigned long)priv);
+                       timer_setup(&priv->eee_ctrl_timer,
+                                   stmmac_eee_ctrl_timer, 0);
                        mod_timer(&priv->eee_ctrl_timer,
                                  STMMAC_LPI_T(eee_timer));
 
@@ -2221,9 +2220,9 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv)
  * Description:
  * This is the timer handler to directly invoke the stmmac_tx_clean.
  */
-static void stmmac_tx_timer(unsigned long data)
+static void stmmac_tx_timer(struct timer_list *t)
 {
-       struct stmmac_priv *priv = (struct stmmac_priv *)data;
+       struct stmmac_priv *priv = from_timer(priv, t, txtimer);
        u32 tx_queues_count = priv->plat->tx_queues_to_use;
        u32 queue;
 
@@ -2244,7 +2243,7 @@ static void stmmac_init_tx_coalesce(struct stmmac_priv *priv)
 {
        priv->tx_coal_frames = STMMAC_TX_FRAMES;
        priv->tx_coal_timer = STMMAC_COAL_TX_TIMER;
-       setup_timer(&priv->txtimer, stmmac_tx_timer, (unsigned long)priv);
+       timer_setup(&priv->txtimer, stmmac_tx_timer, 0);
        priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer);
        add_timer(&priv->txtimer);
 }
index e1b55b8fb8e0917d6fa8537ff029e52d29371ca1..1f8e9601592a679025cc1451b9c686c38ac3176f 100644 (file)
@@ -358,9 +358,9 @@ static irqreturn_t xlgmac_dma_isr(int irq, void *data)
        return IRQ_HANDLED;
 }
 
-static void xlgmac_tx_timer(unsigned long data)
+static void xlgmac_tx_timer(struct timer_list *t)
 {
-       struct xlgmac_channel *channel = (struct xlgmac_channel *)data;
+       struct xlgmac_channel *channel = from_timer(channel, t, tx_timer);
        struct xlgmac_pdata *pdata = channel->pdata;
        struct napi_struct *napi;
 
@@ -391,8 +391,7 @@ static void xlgmac_init_timers(struct xlgmac_pdata *pdata)
                if (!channel->tx_ring)
                        break;
 
-               setup_timer(&channel->tx_timer, xlgmac_tx_timer,
-                           (unsigned long)channel);
+               timer_setup(&channel->tx_timer, xlgmac_tx_timer, 0);
        }
 }
 
index cd1185e6613387e60b74bdd0a75f8f21b230dcf8..b432a75fb874cec3acc680827e4310b495e65111 100644 (file)
@@ -765,9 +765,9 @@ int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)
 }
 EXPORT_SYMBOL_GPL(cpsw_ale_control_get);
 
-static void cpsw_ale_timer(unsigned long arg)
+static void cpsw_ale_timer(struct timer_list *t)
 {
-       struct cpsw_ale *ale = (struct cpsw_ale *)arg;
+       struct cpsw_ale *ale = from_timer(ale, t, timer);
 
        cpsw_ale_control_set(ale, 0, ALE_AGEOUT, 1);
 
@@ -859,7 +859,7 @@ void cpsw_ale_start(struct cpsw_ale *ale)
        cpsw_ale_control_set(ale, 0, ALE_ENABLE, 1);
        cpsw_ale_control_set(ale, 0, ALE_CLEAR, 1);
 
-       setup_timer(&ale->timer, cpsw_ale_timer, (unsigned long)ale);
+       timer_setup(&ale->timer, cpsw_ale_timer, 0);
        if (ale->ageout) {
                ale->timer.expires = jiffies + ale->ageout;
                add_timer(&ale->timer);
index 4ad821655e51cdd467fd614530ea8fe8dd4dfb78..e831c49713eecca836746c076c8bb30b70ca381c 100644 (file)
@@ -2745,9 +2745,9 @@ static int gbe_ioctl(void *intf_priv, struct ifreq *req, int cmd)
        return -EOPNOTSUPP;
 }
 
-static void netcp_ethss_timer(unsigned long arg)
+static void netcp_ethss_timer(struct timer_list *t)
 {
-       struct gbe_priv *gbe_dev = (struct gbe_priv *)arg;
+       struct gbe_priv *gbe_dev = from_timer(gbe_dev, t, timer);
        struct gbe_intf *gbe_intf;
        struct gbe_slave *slave;
 
@@ -3616,8 +3616,7 @@ static int gbe_probe(struct netcp_device *netcp_device, struct device *dev,
        }
        spin_unlock_bh(&gbe_dev->hw_stats_lock);
 
-       setup_timer(&gbe_dev->timer, netcp_ethss_timer,
-                   (unsigned long)gbe_dev);
+       timer_setup(&gbe_dev->timer, netcp_ethss_timer, 0);
        gbe_dev->timer.expires   = jiffies + GBE_TIMER_INTERVAL;
        add_timer(&gbe_dev->timer);
        *inst_priv = gbe_dev;
index a913538d32131d81dc7f92b253ae0184e31b474a..d925b8203996691f1c380d70ff28de9f9c0b0a49 100644 (file)
@@ -912,8 +912,9 @@ spider_net_xmit(struct sk_buff *skb, struct net_device *netdev)
  * packets, including updating the queue tail pointer.
  */
 static void
-spider_net_cleanup_tx_ring(struct spider_net_card *card)
+spider_net_cleanup_tx_ring(struct timer_list *t)
 {
+       struct spider_net_card *card = from_timer(card, t, tx_timer);
        if ((spider_net_release_tx_chain(card, 0) != 0) &&
            (card->netdev->flags & IFF_UP)) {
                spider_net_kick_tx_dma(card);
@@ -1265,7 +1266,7 @@ static int spider_net_poll(struct napi_struct *napi, int budget)
        spider_net_refill_rx_chain(card);
        spider_net_enable_rxdmac(card);
 
-       spider_net_cleanup_tx_ring(card);
+       spider_net_cleanup_tx_ring(&card->tx_timer);
 
        /* if all packets are in the stack, enable interrupts and return 0 */
        /* if not, return 1 */
@@ -1977,9 +1978,9 @@ init_firmware_failed:
  * @data: used for pointer to card structure
  *
  */
-static void spider_net_link_phy(unsigned long data)
+static void spider_net_link_phy(struct timer_list *t)
 {
-       struct spider_net_card *card = (struct spider_net_card *)data;
+       struct spider_net_card *card = from_timer(card, t, aneg_timer);
        struct mii_phy *phy = &card->phy;
 
        /* if link didn't come up after SPIDER_NET_ANEG_TIMEOUT tries, setup phy again */
@@ -2256,14 +2257,11 @@ spider_net_setup_netdev(struct spider_net_card *card)
 
        pci_set_drvdata(card->pdev, netdev);
 
-       setup_timer(&card->tx_timer,
-                   (void(*)(unsigned long))spider_net_cleanup_tx_ring,
-                   (unsigned long)card);
+       timer_setup(&card->tx_timer, spider_net_cleanup_tx_ring, 0);
        netdev->irq = card->pdev->irq;
 
        card->aneg_count = 0;
-       setup_timer(&card->aneg_timer, spider_net_link_phy,
-                   (unsigned long)card);
+       timer_setup(&card->aneg_timer, spider_net_link_phy, 0);
 
        netif_napi_add(netdev, &card->napi,
                       spider_net_poll, SPIDER_NET_NAPI_WEIGHT);
index eb8a18991d8c7c78c45ba828b79479263acbf1a9..cc63102ca96e0056ac8f1755c5b43b7bd878ccf0 100644 (file)
@@ -106,8 +106,8 @@ static int slip_esc6(unsigned char *p, unsigned char *d, int len);
 static void slip_unesc6(struct slip *sl, unsigned char c);
 #endif
 #ifdef CONFIG_SLIP_SMART
-static void sl_keepalive(unsigned long sls);
-static void sl_outfill(unsigned long sls);
+static void sl_keepalive(struct timer_list *t);
+static void sl_outfill(struct timer_list *t);
 static int sl_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 #endif
 
@@ -763,8 +763,8 @@ static struct slip *sl_alloc(dev_t line)
        sl->mode        = SL_MODE_DEFAULT;
 #ifdef CONFIG_SLIP_SMART
        /* initialize timer_list struct */
-       setup_timer(&sl->keepalive_timer, sl_keepalive, (unsigned long)sl);
-       setup_timer(&sl->outfill_timer, sl_outfill, (unsigned long)sl);
+       timer_setup(&sl->keepalive_timer, sl_keepalive, 0);
+       timer_setup(&sl->outfill_timer, sl_outfill, 0);
 #endif
        slip_devs[i] = dev;
        return sl;
@@ -1388,9 +1388,9 @@ module_exit(slip_exit);
  * added by Stanislav Voronyi. All changes before marked VSV
  */
 
-static void sl_outfill(unsigned long sls)
+static void sl_outfill(struct timer_list *t)
 {
-       struct slip *sl = (struct slip *)sls;
+       struct slip *sl = from_timer(sl, t, outfill_timer);
 
        spin_lock(&sl->lock);
 
@@ -1419,9 +1419,9 @@ out:
        spin_unlock(&sl->lock);
 }
 
-static void sl_keepalive(unsigned long sls)
+static void sl_keepalive(struct timer_list *t)
 {
-       struct slip *sl = (struct slip *)sls;
+       struct slip *sl = from_timer(sl, t, keepalive_timer);
 
        spin_lock(&sl->lock);
 
index 5a2ea78a008f9d22440452e014ca5f4a1dd5968a..c3af08f24679bea4eb09ffdb8bcb0c7e457f22e2 100644 (file)
@@ -444,9 +444,9 @@ static void tun_flow_delete_by_queue(struct tun_struct *tun, u16 queue_index)
        spin_unlock_bh(&tun->lock);
 }
 
-static void tun_flow_cleanup(unsigned long data)
+static void tun_flow_cleanup(struct timer_list *t)
 {
-       struct tun_struct *tun = (struct tun_struct *)data;
+       struct tun_struct *tun = from_timer(tun, t, flow_gc_timer);
        unsigned long delay = tun->ageing_time;
        unsigned long next_timer = jiffies + delay;
        unsigned long count = 0;
@@ -1196,7 +1196,9 @@ static void tun_flow_init(struct tun_struct *tun)
                INIT_HLIST_HEAD(&tun->flows[i]);
 
        tun->ageing_time = TUN_FLOW_EXPIRE;
-       setup_timer(&tun->flow_gc_timer, tun_flow_cleanup, (unsigned long)tun);
+       timer_setup(&tun->flow_gc_timer, tun_flow_cleanup, 0);
+       mod_timer(&tun->flow_gc_timer,
+                 round_jiffies_up(jiffies + tun->ageing_time));
 }
 
 static void tun_flow_uninit(struct tun_struct *tun)
index c7721c729541ea2d5d9d439bb4176b0950e3c16c..afeca6bcdade60a45fb6588cb69e69e32014cc7f 100644 (file)
@@ -558,9 +558,9 @@ out:
        return NET_RX_DROP;
 }
 
-static void ppp_timer(unsigned long arg)
+static void ppp_timer(struct timer_list *t)
 {
-       struct proto *proto = (struct proto *)arg;
+       struct proto *proto = from_timer(proto, t, timer);
        struct ppp *ppp = get_ppp(proto->dev);
        unsigned long flags;
 
@@ -610,7 +610,7 @@ static void ppp_start(struct net_device *dev)
        for (i = 0; i < IDX_COUNT; i++) {
                struct proto *proto = &ppp->protos[i];
                proto->dev = dev;
-               setup_timer(&proto->timer, ppp_timer, (unsigned long)proto);
+               timer_setup(&proto->timer, ppp_timer, 0);
                proto->state = CLOSED;
        }
        ppp->protos[IDX_LCP].pid = PID_LCP;
index 3559fb5b8fb03a964461be8815f12a4dad3cba3a..03aae6bc18388a529f3a64cd5501ac8d5ed38deb 100644 (file)
@@ -280,9 +280,9 @@ static void brcmf_btcoex_restore_part1(struct brcmf_btcoex_info *btci)
 /**
  * brcmf_btcoex_timerfunc() - BT coex timer callback
  */
-static void brcmf_btcoex_timerfunc(ulong data)
+static void brcmf_btcoex_timerfunc(struct timer_list *t)
 {
-       struct brcmf_btcoex_info *bt_local = (struct brcmf_btcoex_info *)data;
+       struct brcmf_btcoex_info *bt_local = from_timer(bt_local, t, timer);
        brcmf_dbg(TRACE, "enter\n");
 
        bt_local->timer_on = false;
@@ -380,7 +380,7 @@ int brcmf_btcoex_attach(struct brcmf_cfg80211_info *cfg)
        /* Set up timer for BT  */
        btci->timer_on = false;
        btci->timeout = BRCMF_BTCOEX_OPPR_WIN_TIME;
-       setup_timer(&btci->timer, brcmf_btcoex_timerfunc, (ulong)btci);
+       timer_setup(&btci->timer, brcmf_btcoex_timerfunc, 0);
        btci->cfg = cfg;
        btci->saved_regs_part1 = false;
        btci->saved_regs_part2 = false;
index 6e70df97815944cb3868c7bed7b68689f695cbc8..15fa00d79fc66bb7eb7d7c770c6980ee45333355 100644 (file)
@@ -2983,10 +2983,10 @@ static void brcmf_cfg80211_escan_timeout_worker(struct work_struct *work)
        brcmf_notify_escan_complete(cfg, cfg->escan_info.ifp, true, true);
 }
 
-static void brcmf_escan_timeout(unsigned long data)
+static void brcmf_escan_timeout(struct timer_list *t)
 {
        struct brcmf_cfg80211_info *cfg =
-                       (struct brcmf_cfg80211_info *)data;
+                       from_timer(cfg, t, escan_timeout);
 
        if (cfg->int_escan_map || cfg->scan_request) {
                brcmf_err("timer expired\n");
@@ -3150,8 +3150,7 @@ static void brcmf_init_escan(struct brcmf_cfg80211_info *cfg)
                            brcmf_cfg80211_escan_handler);
        cfg->escan_info.escan_state = WL_ESCAN_STATE_IDLE;
        /* Init scan_timeout timer */
-       setup_timer(&cfg->escan_timeout, brcmf_escan_timeout,
-                   (unsigned long)cfg);
+       timer_setup(&cfg->escan_timeout, brcmf_escan_timeout, 0);
        INIT_WORK(&cfg->escan_timeout_work,
                  brcmf_cfg80211_escan_timeout_worker);
 }
index e3495ea95553fb2d2056421d5ff0845b8f26e83a..310c4e2746aab1da08d62e58812219b5271507e9 100644 (file)
@@ -3972,9 +3972,9 @@ brcmf_sdio_watchdog_thread(void *data)
 }
 
 static void
-brcmf_sdio_watchdog(unsigned long data)
+brcmf_sdio_watchdog(struct timer_list *t)
 {
-       struct brcmf_sdio *bus = (struct brcmf_sdio *)data;
+       struct brcmf_sdio *bus = from_timer(bus, t, timer);
 
        if (bus->watchdog_tsk) {
                complete(&bus->watchdog_wait);
@@ -4169,8 +4169,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
        init_waitqueue_head(&bus->dcmd_resp_wait);
 
        /* Set up the watchdog timer */
-       setup_timer(&bus->timer, brcmf_sdio_watchdog,
-                   (unsigned long)bus);
+       timer_setup(&bus->timer, brcmf_sdio_watchdog, 0);
        /* Initialize watchdog thread */
        init_completion(&bus->watchdog_wait);
        bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
index 2acd94da9efeb48a65304a43032d3be8fd684660..d11d72615de220f2e776f0b0762c8cc7806212d0 100644 (file)
@@ -399,9 +399,9 @@ int iwl_send_statistics_request(struct iwl_priv *priv, u8 flags, bool clear)
  * was received.  We need to ensure we receive the statistics in order
  * to update the temperature used for calibrating the TXPOWER.
  */
-static void iwl_bg_statistics_periodic(unsigned long data)
+static void iwl_bg_statistics_periodic(struct timer_list *t)
 {
-       struct iwl_priv *priv = (struct iwl_priv *)data;
+       struct iwl_priv *priv = from_timer(priv, t, statistics_periodic);
 
        if (test_bit(STATUS_EXIT_PENDING, &priv->status))
                return;
@@ -556,9 +556,9 @@ static void iwl_continuous_event_trace(struct iwl_priv *priv)
  * this function is to perform continuous uCode event logging operation
  * if enabled
  */
-static void iwl_bg_ucode_trace(unsigned long data)
+static void iwl_bg_ucode_trace(struct timer_list *t)
 {
-       struct iwl_priv *priv = (struct iwl_priv *)data;
+       struct iwl_priv *priv = from_timer(priv, t, ucode_trace);
 
        if (test_bit(STATUS_EXIT_PENDING, &priv->status))
                return;
@@ -1085,11 +1085,9 @@ static void iwl_setup_deferred_work(struct iwl_priv *priv)
        if (priv->lib->bt_params)
                iwlagn_bt_setup_deferred_work(priv);
 
-       setup_timer(&priv->statistics_periodic, iwl_bg_statistics_periodic,
-                   (unsigned long)priv);
+       timer_setup(&priv->statistics_periodic, iwl_bg_statistics_periodic, 0);
 
-       setup_timer(&priv->ucode_trace, iwl_bg_ucode_trace,
-                   (unsigned long)priv);
+       timer_setup(&priv->ucode_trace, iwl_bg_ucode_trace, 0);
 }
 
 void iwl_cancel_deferred_work(struct iwl_priv *priv)
index b5c459cd70cecab890111b302f09b5e5a55c9e29..fed6d842a5e1dc444fe58ad203cb8fb5e3ab1c6f 100644 (file)
@@ -147,9 +147,9 @@ void iwl_pcie_free_dma_ptr(struct iwl_trans *trans, struct iwl_dma_ptr *ptr)
        memset(ptr, 0, sizeof(*ptr));
 }
 
-static void iwl_pcie_txq_stuck_timer(unsigned long data)
+static void iwl_pcie_txq_stuck_timer(struct timer_list *t)
 {
-       struct iwl_txq *txq = (void *)data;
+       struct iwl_txq *txq = from_timer(txq, t, stuck_timer);
        struct iwl_trans_pcie *trans_pcie = txq->trans_pcie;
        struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie);
 
@@ -495,8 +495,7 @@ int iwl_pcie_txq_alloc(struct iwl_trans *trans, struct iwl_txq *txq,
        if (WARN_ON(txq->entries || txq->tfds))
                return -EINVAL;
 
-       setup_timer(&txq->stuck_timer, iwl_pcie_txq_stuck_timer,
-                   (unsigned long)txq);
+       timer_setup(&txq->stuck_timer, iwl_pcie_txq_stuck_timer, 0);
        txq->trans_pcie = trans_pcie;
 
        txq->n_window = slots_num;
index f9d04731469214bc3b20ad58fcc82954091c8828..b4dfe1893d18445373e7b812931d376ebc17c65f 100644 (file)
@@ -185,9 +185,9 @@ static void hostap_event_expired_sta(struct net_device *dev,
 
 #ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT
 
-static void ap_handle_timer(unsigned long data)
+static void ap_handle_timer(struct timer_list *t)
 {
-       struct sta_info *sta = (struct sta_info *) data;
+       struct sta_info *sta = from_timer(sta, t, timer);
        local_info_t *local;
        struct ap_data *ap;
        unsigned long next_time = 0;
@@ -1189,7 +1189,7 @@ static struct sta_info * ap_add_sta(struct ap_data *ap, u8 *addr)
        }
 
 #ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT
-       setup_timer(&sta->timer, ap_handle_timer, (unsigned long)sta);
+       timer_setup(&sta->timer, ap_handle_timer, 0);
        sta->timer.expires = jiffies + ap->max_inactivity;
        if (!ap->local->hostapd)
                add_timer(&sta->timer);
index 8177fd6f65c142cfdbdbc67049e7379f718fa1ed..5c4a17a18968bf0b0f0235b42fa577de6f9ed9d4 100644 (file)
@@ -2794,9 +2794,9 @@ static void prism2_check_sta_fw_version(local_info_t *local)
 }
 
 
-static void hostap_passive_scan(unsigned long data)
+static void hostap_passive_scan(struct timer_list *t)
 {
-       local_info_t *local = (local_info_t *) data;
+       local_info_t *local = from_timer(local, t, passive_scan_timer);
        struct net_device *dev = local->dev;
        u16 chan;
 
@@ -2869,10 +2869,10 @@ static void handle_comms_qual_update(struct work_struct *work)
  * used to monitor that local->last_tick_timer is being updated. If not,
  * interrupt busy-loop is assumed and driver tries to recover by masking out
  * some events. */
-static void hostap_tick_timer(unsigned long data)
+static void hostap_tick_timer(struct timer_list *t)
 {
        static unsigned long last_inquire = 0;
-       local_info_t *local = (local_info_t *) data;
+       local_info_t *local = from_timer(local, t, tick_timer);
        local->last_tick_timer = jiffies;
 
        /* Inquire CommTallies every 10 seconds to keep the statistics updated
@@ -3225,10 +3225,8 @@ while (0)
 
        lib80211_crypt_info_init(&local->crypt_info, dev->name, &local->lock);
 
-       setup_timer(&local->passive_scan_timer, hostap_passive_scan,
-                   (unsigned long)local);
-       setup_timer(&local->tick_timer, hostap_tick_timer,
-                   (unsigned long)local);
+       timer_setup(&local->passive_scan_timer, hostap_passive_scan, 0);
+       timer_setup(&local->tick_timer, hostap_tick_timer, 0);
        local->tick_timer.expires = jiffies + 2 * HZ;
        add_timer(&local->tick_timer);
 
index 501180584b4b197b84aa486a85cb1e8b993d0e80..94ad6fe29e69bdf199157e78023e15595e22daa9 100644 (file)
@@ -319,9 +319,9 @@ static inline void ezusb_mod_timer(struct ezusb_priv *upriv,
        mod_timer(timer, expire);
 }
 
-static void ezusb_request_timerfn(u_long _ctx)
+static void ezusb_request_timerfn(struct timer_list *t)
 {
-       struct request_context *ctx = (void *) _ctx;
+       struct request_context *ctx = from_timer(ctx, t, timer);
 
        ctx->outurb->transfer_flags |= URB_ASYNC_UNLINK;
        if (usb_unlink_urb(ctx->outurb) == -EINPROGRESS) {
@@ -365,7 +365,7 @@ static struct request_context *ezusb_alloc_ctx(struct ezusb_priv *upriv,
        refcount_set(&ctx->refcount, 1);
        init_completion(&ctx->done);
 
-       setup_timer(&ctx->timer, ezusb_request_timerfn, (u_long)ctx);
+       timer_setup(&ctx->timer, ezusb_request_timerfn, 0);
        return ctx;
 }
 
index 2d2c1ea65cb26440dc81efb2ae0e2c6851d8d6d6..3423dc51198b574cd863c72685c9d220a997f258 100644 (file)
@@ -288,7 +288,7 @@ static struct qtnf_wmac *qtnf_core_mac_alloc(struct qtnf_bus *bus,
                mac->iflist[i].vifid = i;
                qtnf_sta_list_init(&mac->iflist[i].sta_list);
                mutex_init(&mac->mac_lock);
-               setup_timer(&mac->scan_timeout, NULL, 0);
+               timer_setup(&mac->scan_timeout, NULL, 0);
        }
 
        qtnf_mac_init_primary_intf(mac);
index c346c021b99939f715c80250580d6f1775eb8953..d47921a845098815652a46f7fc16cdf8bccf3488 100644 (file)
@@ -196,9 +196,9 @@ out:
        mutex_unlock(&wl->mutex);
 }
 
-static void wl1271_rx_streaming_timer(unsigned long data)
+static void wl1271_rx_streaming_timer(struct timer_list *t)
 {
-       struct wl12xx_vif *wlvif = (struct wl12xx_vif *)data;
+       struct wl12xx_vif *wlvif = from_timer(wlvif, t, rx_streaming_timer);
        struct wl1271 *wl = wlvif->wl;
        ieee80211_queue_work(wl->hw, &wlvif->rx_streaming_disable_work);
 }
@@ -2279,8 +2279,7 @@ static int wl12xx_init_vif_data(struct wl1271 *wl, struct ieee80211_vif *vif)
                          wlcore_pending_auth_complete_work);
        INIT_LIST_HEAD(&wlvif->list);
 
-       setup_timer(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer,
-                   (unsigned long) wlvif);
+       timer_setup(&wlvif->rx_streaming_timer, wl1271_rx_streaming_timer, 0);
        return 0;
 }
 
index 8b8689c6d8877863dddad9f9c10215d311f5fa6f..18c85e55e76a8b4ed609d770823fd8ff23cd77da 100644 (file)
@@ -228,9 +228,9 @@ static bool xennet_can_sg(struct net_device *dev)
 }
 
 
-static void rx_refill_timeout(unsigned long data)
+static void rx_refill_timeout(struct timer_list *t)
 {
-       struct netfront_queue *queue = (struct netfront_queue *)data;
+       struct netfront_queue *queue = from_timer(queue, t, rx_refill_timer);
        napi_schedule(&queue->napi);
 }
 
@@ -1605,8 +1605,7 @@ static int xennet_init_queue(struct netfront_queue *queue)
        spin_lock_init(&queue->tx_lock);
        spin_lock_init(&queue->rx_lock);
 
-       setup_timer(&queue->rx_refill_timer, rx_refill_timeout,
-                   (unsigned long)queue);
+       timer_setup(&queue->rx_refill_timer, rx_refill_timeout, 0);
 
        snprintf(queue->name, sizeof(queue->name), "%s-q%u",
                 queue->info->netdev->name, queue->id);
index 2effa5ff70822449b40ab028c2c2d6bd3ff4b0ed..a0cc1cc452927b54e84d749d053fe99e63463ca2 100644 (file)
@@ -1232,9 +1232,9 @@ static int pn533_init_target_complete(struct pn533 *dev, struct sk_buff *resp)
        return 0;
 }
 
-static void pn533_listen_mode_timer(unsigned long data)
+static void pn533_listen_mode_timer(struct timer_list *t)
 {
-       struct pn533 *dev = (struct pn533 *)data;
+       struct pn533 *dev = from_timer(dev, t, listen_timer);
 
        dev_dbg(dev->dev, "Listen mode timeout\n");
 
@@ -2632,8 +2632,7 @@ struct pn533 *pn533_register_device(u32 device_type,
        if (priv->wq == NULL)
                goto error;
 
-       setup_timer(&priv->listen_timer, pn533_listen_mode_timer,
-                   (unsigned long)priv);
+       timer_setup(&priv->listen_timer, pn533_listen_mode_timer, 0);
 
        skb_queue_head_init(&priv->resp_q);
        skb_queue_head_init(&priv->fragment_skb);
index 93a7536a9af9978a891483c1fc02d4e65f95b2a5..f26d938d240f03dbb27889fc101d552511ea9d92 100644 (file)
@@ -246,18 +246,18 @@ void ndlc_recv(struct llt_ndlc *ndlc, struct sk_buff *skb)
 }
 EXPORT_SYMBOL(ndlc_recv);
 
-static void ndlc_t1_timeout(unsigned long data)
+static void ndlc_t1_timeout(struct timer_list *t)
 {
-       struct llt_ndlc *ndlc = (struct llt_ndlc *)data;
+       struct llt_ndlc *ndlc = from_timer(ndlc, t, t1_timer);
 
        pr_debug("\n");
 
        schedule_work(&ndlc->sm_work);
 }
 
-static void ndlc_t2_timeout(unsigned long data)
+static void ndlc_t2_timeout(struct timer_list *t)
 {
-       struct llt_ndlc *ndlc = (struct llt_ndlc *)data;
+       struct llt_ndlc *ndlc = from_timer(ndlc, t, t2_timer);
 
        pr_debug("\n");
 
@@ -282,8 +282,8 @@ int ndlc_probe(void *phy_id, struct nfc_phy_ops *phy_ops, struct device *dev,
        *ndlc_id = ndlc;
 
        /* initialize timers */
-       setup_timer(&ndlc->t1_timer, ndlc_t1_timeout, (unsigned long)ndlc);
-       setup_timer(&ndlc->t2_timer, ndlc_t2_timeout, (unsigned long)ndlc);
+       timer_setup(&ndlc->t1_timer, ndlc_t1_timeout, 0);
+       timer_setup(&ndlc->t2_timer, ndlc_t2_timeout, 0);
 
        skb_queue_head_init(&ndlc->rcv_q);
        skb_queue_head_init(&ndlc->send_q);
index 938a18bcfc3f85b5b1acd0d66b54f20dbaf96c78..3f5a92bae6f8e4ecea11a865cbee43b5473ac052 100644 (file)
@@ -107,9 +107,9 @@ struct pp_ctx {
 
 static struct dentry *pp_debugfs_dir;
 
-static void pp_ping(unsigned long ctx)
+static void pp_ping(struct timer_list *t)
 {
-       struct pp_ctx *pp = (void *)ctx;
+       struct pp_ctx *pp = from_timer(pp, t, db_timer);
        unsigned long irqflags;
        u64 db_bits, db_mask;
        u32 spad_rd, spad_wr;
@@ -153,7 +153,7 @@ static void pp_link_event(void *ctx)
 
        if (ntb_link_is_up(pp->ntb, NULL, NULL) == 1) {
                dev_dbg(&pp->ntb->dev, "link is up\n");
-               pp_ping((unsigned long)pp);
+               pp_ping(&pp->db_timer);
        } else {
                dev_dbg(&pp->ntb->dev, "link is down\n");
                del_timer(&pp->db_timer);
@@ -252,7 +252,7 @@ static int pp_probe(struct ntb_client *client,
        pp->db_bits = 0;
        atomic_set(&pp->count, 0);
        spin_lock_init(&pp->db_lock);
-       setup_timer(&pp->db_timer, pp_ping, (unsigned long)pp);
+       timer_setup(&pp->db_timer, pp_ping, 0);
        pp->db_delay = msecs_to_jiffies(delay_ms);
 
        rc = ntb_set_ctx(ntb, pp, &pp_ops);
index 62aa2c37b8d2821450008fb820cbd7be9552f6a7..935121814c97711a4d8879c36c80361ab5462967 100644 (file)
@@ -363,7 +363,7 @@ static int sony_laptop_input_keycode_map[] = {
 };
 
 /* release buttons after a short delay if pressed */
-static void do_sony_laptop_release_key(unsigned long unused)
+static void do_sony_laptop_release_key(struct timer_list *unused)
 {
        struct sony_laptop_keypress kp;
        unsigned long flags;
@@ -470,7 +470,7 @@ static int sony_laptop_setup_input(struct acpi_device *acpi_device)
                goto err_dec_users;
        }
 
-       setup_timer(&sony_laptop_input.release_key_timer,
+       timer_setup(&sony_laptop_input.release_key_timer,
                    do_sony_laptop_release_key, 0);
 
        /* input keys */
index 436b4e4e71a149384c1246baa2a508e4dce21f72..04735649052ab3652d38c8ce775d033fb8cde7ac 100644 (file)
@@ -39,7 +39,7 @@ static struct timer_list ktimer;
  * The kernel timer
  */
 
-static void pps_ktimer_event(unsigned long ptr)
+static void pps_ktimer_event(struct timer_list *unused)
 {
        struct pps_event_time ts;
 
@@ -85,7 +85,7 @@ static int __init pps_ktimer_init(void)
                return -ENOMEM;
        }
 
-       setup_timer(&ktimer, pps_ktimer_event, 0);
+       timer_setup(&ktimer, pps_ktimer_event, 0);
        mod_timer(&ktimer, jiffies + HZ);
 
        dev_info(pps->dev, "ktimer PPS source registered\n");
index 00efe24a60633527aa1e9847234612ebbdb3edb4..215eac68ae2d72afda8c0e114755485ce2f10185 100644 (file)
@@ -71,9 +71,9 @@ static void rtc_uie_task(struct work_struct *work)
        if (num)
                rtc_handle_legacy_irq(rtc, num, RTC_UF);
 }
-static void rtc_uie_timer(unsigned long data)
+static void rtc_uie_timer(struct timer_list *t)
 {
-       struct rtc_device *rtc = (struct rtc_device *)data;
+       struct rtc_device *rtc = from_timer(rtc, t, uie_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&rtc->irq_lock, flags);
@@ -460,7 +460,7 @@ void rtc_dev_prepare(struct rtc_device *rtc)
 
 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
        INIT_WORK(&rtc->uie_task, rtc_uie_task);
-       setup_timer(&rtc->uie_timer, rtc_uie_timer, (unsigned long)rtc);
+       timer_setup(&rtc->uie_timer, rtc_uie_timer, 0);
 #endif
 
        cdev_init(&rtc->char_dev, &rtc_dev_fops);
index adba91318768e62317e95615f509b46da299df83..0f1ff081349395bfadec0e8034c9acad7e7b4846 100644 (file)
@@ -70,8 +70,8 @@ static void do_restore_device(struct work_struct *);
 static void do_reload_device(struct work_struct *);
 static void do_requeue_requests(struct work_struct *);
 static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *);
-static void dasd_device_timeout(unsigned long);
-static void dasd_block_timeout(unsigned long);
+static void dasd_device_timeout(struct timer_list *);
+static void dasd_block_timeout(struct timer_list *);
 static void __dasd_process_erp(struct dasd_device *, struct dasd_ccw_req *);
 static void dasd_profile_init(struct dasd_profile *, struct dentry *);
 static void dasd_profile_exit(struct dasd_profile *);
@@ -119,8 +119,7 @@ struct dasd_device *dasd_alloc_device(void)
                     (void (*)(unsigned long)) dasd_device_tasklet,
                     (unsigned long) device);
        INIT_LIST_HEAD(&device->ccw_queue);
-       setup_timer(&device->timer, dasd_device_timeout,
-                   (unsigned long)device);
+       timer_setup(&device->timer, dasd_device_timeout, 0);
        INIT_WORK(&device->kick_work, do_kick_device);
        INIT_WORK(&device->restore_device, do_restore_device);
        INIT_WORK(&device->reload_device, do_reload_device);
@@ -162,7 +161,7 @@ struct dasd_block *dasd_alloc_block(void)
                     (unsigned long) block);
        INIT_LIST_HEAD(&block->ccw_queue);
        spin_lock_init(&block->queue_lock);
-       setup_timer(&block->timer, dasd_block_timeout, (unsigned long)block);
+       timer_setup(&block->timer, dasd_block_timeout, 0);
        spin_lock_init(&block->profile.lock);
 
        return block;
@@ -1557,12 +1556,12 @@ EXPORT_SYMBOL(dasd_start_IO);
  * The head of the ccw queue will have status DASD_CQR_IN_IO for 1),
  * DASD_CQR_QUEUED for 2) and 3).
  */
-static void dasd_device_timeout(unsigned long ptr)
+static void dasd_device_timeout(struct timer_list *t)
 {
        unsigned long flags;
        struct dasd_device *device;
 
-       device = (struct dasd_device *) ptr;
+       device = from_timer(device, t, timer);
        spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);
        /* re-activate request queue */
        dasd_device_remove_stop_bits(device, DASD_STOPPED_PENDING);
@@ -2625,12 +2624,12 @@ EXPORT_SYMBOL(dasd_cancel_req);
  * is waiting for something that may not come reliably, (e.g. a state
  * change interrupt)
  */
-static void dasd_block_timeout(unsigned long ptr)
+static void dasd_block_timeout(struct timer_list *t)
 {
        unsigned long flags;
        struct dasd_block *block;
 
-       block = (struct dasd_block *) ptr;
+       block = from_timer(block, t, timer);
        spin_lock_irqsave(get_ccwdev_lock(block->base->cdev), flags);
        /* re-activate request queue */
        dasd_device_remove_stop_bits(block->base, DASD_STOPPED_PENDING);
index 16b81be1f07a58c96779d74d66595ee625757944..c81adf8042d780a5a19b8a10e4e2a6e2e05f6de6 100644 (file)
@@ -129,8 +129,9 @@ fsm_getstate_str(fsm_instance *fi)
 }
 
 static void
-fsm_expire_timer(fsm_timer *this)
+fsm_expire_timer(struct timer_list *t)
 {
+       fsm_timer *this = from_timer(this, t, tl);
 #if FSM_TIMER_DEBUG
        printk(KERN_DEBUG "fsm(%s): Timer %p expired\n",
               this->fi->name, this);
@@ -146,7 +147,7 @@ fsm_settimer(fsm_instance *fi, fsm_timer *this)
        printk(KERN_DEBUG "fsm(%s): Create timer %p\n", fi->name,
               this);
 #endif
-       setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this);
+       timer_setup(&this->tl, fsm_expire_timer, 0);
 }
 
 void
@@ -168,7 +169,7 @@ fsm_addtimer(fsm_timer *this, int millisec, int event, void *arg)
               this->fi->name, this, millisec);
 #endif
 
-       setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this);
+       timer_setup(&this->tl, fsm_expire_timer, 0);
        this->expire_event = event;
        this->event_arg = arg;
        this->tl.expires = jiffies + (millisec * HZ) / 1000;
@@ -187,7 +188,7 @@ fsm_modtimer(fsm_timer *this, int millisec, int event, void *arg)
 #endif
 
        del_timer(&this->tl);
-       setup_timer(&this->tl, (void *)fsm_expire_timer, (long)this);
+       timer_setup(&this->tl, fsm_expire_timer, 0);
        this->expire_event = event;
        this->event_arg = arg;
        this->tl.expires = jiffies + (millisec * HZ) / 1000;
index a54b6c11b505a8ab51d0b455e0ec7b333b1298ca..21f6421536a05f5c20c72277733bc9aecd6b5b4e 100644 (file)
@@ -101,7 +101,7 @@ static void arcmsr_enable_outbound_ints(struct AdapterControlBlock *acb,
 static void arcmsr_stop_adapter_bgrb(struct AdapterControlBlock *acb);
 static void arcmsr_hbaA_flush_cache(struct AdapterControlBlock *acb);
 static void arcmsr_hbaB_flush_cache(struct AdapterControlBlock *acb);
-static void arcmsr_request_device_map(unsigned long pacb);
+static void arcmsr_request_device_map(struct timer_list *t);
 static void arcmsr_hbaA_request_device_map(struct AdapterControlBlock *acb);
 static void arcmsr_hbaB_request_device_map(struct AdapterControlBlock *acb);
 static void arcmsr_hbaC_request_device_map(struct AdapterControlBlock *acb);
@@ -837,8 +837,7 @@ static int arcmsr_probe(struct pci_dev *pdev, const struct pci_device_id *id)
        atomic_set(&acb->rq_map_token, 16);
        atomic_set(&acb->ante_token_value, 16);
        acb->fw_flag = FW_NORMAL;
-       setup_timer(&acb->eternal_timer, &arcmsr_request_device_map,
-                   (unsigned long)acb);
+       timer_setup(&acb->eternal_timer, arcmsr_request_device_map, 0);
        acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);
        add_timer(&acb->eternal_timer);
        if(arcmsr_alloc_sysfs_attr(acb))
@@ -929,8 +928,7 @@ static int arcmsr_resume(struct pci_dev *pdev)
        atomic_set(&acb->rq_map_token, 16);
        atomic_set(&acb->ante_token_value, 16);
        acb->fw_flag = FW_NORMAL;
-       setup_timer(&acb->eternal_timer, &arcmsr_request_device_map,
-                   (unsigned long)acb);
+       timer_setup(&acb->eternal_timer, arcmsr_request_device_map, 0);
        acb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);
        add_timer(&acb->eternal_timer);
        return 0;
@@ -3457,9 +3455,9 @@ static void arcmsr_hbaD_request_device_map(struct AdapterControlBlock *acb)
        }
 }
 
-static void arcmsr_request_device_map(unsigned long pacb)
+static void arcmsr_request_device_map(struct timer_list *t)
 {
-       struct AdapterControlBlock *acb = (struct AdapterControlBlock *)pacb;
+       struct AdapterControlBlock *acb = from_timer(acb, t, eternal_timer);
        switch (acb->adapter_type) {
                case ACB_ADAPTER_TYPE_A: {
                        arcmsr_hbaA_request_device_map(acb);
index 7304d5a4fc4f411b1ca79048f5b5386ed63e5322..f4775ca70babac8e1b9bec3dba86220ee59937fb 100644 (file)
@@ -2318,9 +2318,9 @@ DEF_SCSI_QCMD(fas216_noqueue_command)
  * Error handler timeout function.  Indicate that we timed out,
  * and wake up any error handler process so it can continue.
  */
-static void fas216_eh_timer(unsigned long data)
+static void fas216_eh_timer(struct timer_list *t)
 {
-       FAS216_Info *info = (FAS216_Info *)data;
+       FAS216_Info *info = from_timer(info, t, eh_timer);
 
        fas216_log(info, LOG_ERROR, "error handling timed out\n");
 
@@ -2849,7 +2849,7 @@ int fas216_init(struct Scsi_Host *host)
        info->rst_dev_status = -1;
        info->rst_bus_status = -1;
        init_waitqueue_head(&info->eh_wait);
-       setup_timer(&info->eh_timer, fas216_eh_timer, (unsigned long)info);
+       timer_setup(&info->eh_timer, fas216_eh_timer, 0);
        
        spin_lock_init(&info->host_lock);
 
index d10826a6972502920a8ba8aa24633626a066c39d..cf04666868045d6e632dfda9a6fff39c4e8d88b1 100644 (file)
@@ -692,9 +692,9 @@ ext:
 }
 
 void
-bfad_bfa_tmo(unsigned long data)
+bfad_bfa_tmo(struct timer_list *t)
 {
-       struct bfad_s         *bfad = (struct bfad_s *) data;
+       struct bfad_s         *bfad = from_timer(bfad, t, hal_tmo);
        unsigned long   flags;
        struct list_head               doneq;
 
@@ -719,7 +719,7 @@ bfad_bfa_tmo(unsigned long data)
 void
 bfad_init_timer(struct bfad_s *bfad)
 {
-       setup_timer(&bfad->hal_tmo, bfad_bfa_tmo, (unsigned long)bfad);
+       timer_setup(&bfad->hal_tmo, bfad_bfa_tmo, 0);
 
        mod_timer(&bfad->hal_tmo,
                  jiffies + msecs_to_jiffies(BFA_TIMER_FREQ));
index cfcfff48e8e16e3fb2b66c0d491c0d612a8cdd38..4fe980a6441f5bbed6bda0892237a8c342653460 100644 (file)
@@ -314,7 +314,7 @@ int         bfad_setup_intr(struct bfad_s *bfad);
 void           bfad_remove_intr(struct bfad_s *bfad);
 void           bfad_update_hal_cfg(struct bfa_iocfc_cfg_s *bfa_cfg);
 bfa_status_t   bfad_hal_mem_alloc(struct bfad_s *bfad);
-void           bfad_bfa_tmo(unsigned long data);
+void           bfad_bfa_tmo(struct timer_list *t);
 void           bfad_init_timer(struct bfad_s *bfad);
 int            bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad);
 void           bfad_pci_uninit(struct pci_dev *pdev, struct bfad_s *bfad);
index 59a2dfbcbc6991efb8ff2860b17cef4e198a7b46..a8ae1a019eea55eaef72823d9ed58eb376a11976 100644 (file)
@@ -14,8 +14,8 @@
  */
 
 #include "bnx2fc.h"
-static void bnx2fc_upld_timer(unsigned long data);
-static void bnx2fc_ofld_timer(unsigned long data);
+static void bnx2fc_upld_timer(struct timer_list *t);
+static void bnx2fc_ofld_timer(struct timer_list *t);
 static int bnx2fc_init_tgt(struct bnx2fc_rport *tgt,
                           struct fcoe_port *port,
                           struct fc_rport_priv *rdata);
@@ -27,10 +27,10 @@ static void bnx2fc_free_session_resc(struct bnx2fc_hba *hba,
                              struct bnx2fc_rport *tgt);
 static void bnx2fc_free_conn_id(struct bnx2fc_hba *hba, u32 conn_id);
 
-static void bnx2fc_upld_timer(unsigned long data)
+static void bnx2fc_upld_timer(struct timer_list *t)
 {
 
-       struct bnx2fc_rport *tgt = (struct bnx2fc_rport *)data;
+       struct bnx2fc_rport *tgt = from_timer(tgt, t, upld_timer);
 
        BNX2FC_TGT_DBG(tgt, "upld_timer - Upload compl not received!!\n");
        /* fake upload completion */
@@ -40,10 +40,10 @@ static void bnx2fc_upld_timer(unsigned long data)
        wake_up_interruptible(&tgt->upld_wait);
 }
 
-static void bnx2fc_ofld_timer(unsigned long data)
+static void bnx2fc_ofld_timer(struct timer_list *t)
 {
 
-       struct bnx2fc_rport *tgt = (struct bnx2fc_rport *)data;
+       struct bnx2fc_rport *tgt = from_timer(tgt, t, ofld_timer);
 
        BNX2FC_TGT_DBG(tgt, "entered bnx2fc_ofld_timer\n");
        /* NOTE: This function should never be called, as
@@ -65,7 +65,7 @@ static void bnx2fc_ofld_timer(unsigned long data)
 
 static void bnx2fc_ofld_wait(struct bnx2fc_rport *tgt)
 {
-       setup_timer(&tgt->ofld_timer, bnx2fc_ofld_timer, (unsigned long)tgt);
+       timer_setup(&tgt->ofld_timer, bnx2fc_ofld_timer, 0);
        mod_timer(&tgt->ofld_timer, jiffies + BNX2FC_FW_TIMEOUT);
 
        wait_event_interruptible(tgt->ofld_wait,
@@ -277,7 +277,7 @@ void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt)
 
 static void bnx2fc_upld_wait(struct bnx2fc_rport *tgt)
 {
-       setup_timer(&tgt->upld_timer, bnx2fc_upld_timer, (unsigned long)tgt);
+       timer_setup(&tgt->upld_timer, bnx2fc_upld_timer, 0);
        mod_timer(&tgt->upld_timer, jiffies + BNX2FC_FW_TIMEOUT);
        wait_event_interruptible(tgt->upld_wait,
                                 (test_bit(
index af4af504a97f1fb1ad70ae3ef090b13f7a828826..4eb14301a497bdd7371aed487ccee2f210ac3f81 100644 (file)
@@ -1631,11 +1631,11 @@ void esas2r_adapter_tasklet(unsigned long context)
        }
 }
 
-static void esas2r_timer_callback(unsigned long context);
+static void esas2r_timer_callback(struct timer_list *t);
 
 void esas2r_kickoff_timer(struct esas2r_adapter *a)
 {
-       setup_timer(&a->timer, esas2r_timer_callback, (unsigned long)a);
+       timer_setup(&a->timer, esas2r_timer_callback, 0);
 
        a->timer.expires = jiffies +
                           msecs_to_jiffies(100);
@@ -1643,9 +1643,9 @@ void esas2r_kickoff_timer(struct esas2r_adapter *a)
        add_timer(&a->timer);
 }
 
-static void esas2r_timer_callback(unsigned long context)
+static void esas2r_timer_callback(struct timer_list *t)
 {
-       struct esas2r_adapter *a = (struct esas2r_adapter *)context;
+       struct esas2r_adapter *a = from_timer(a, t, timer);
 
        set_bit(AF2_TIMER_TICK, &a->flags2);
 
index fff6f1851dc1e56779acff511c5b6c3625a9f51c..097f37de6ce91231082353f327485d8f189d68ba 100644 (file)
@@ -49,7 +49,7 @@
 #define        FCOE_CTLR_MIN_FKA       500             /* min keep alive (mS) */
 #define        FCOE_CTLR_DEF_FKA       FIP_DEF_FKA     /* default keep alive (mS) */
 
-static void fcoe_ctlr_timeout(unsigned long);
+static void fcoe_ctlr_timeout(struct timer_list *);
 static void fcoe_ctlr_timer_work(struct work_struct *);
 static void fcoe_ctlr_recv_work(struct work_struct *);
 static int fcoe_ctlr_flogi_retry(struct fcoe_ctlr *);
@@ -156,7 +156,7 @@ void fcoe_ctlr_init(struct fcoe_ctlr *fip, enum fip_state mode)
        mutex_init(&fip->ctlr_mutex);
        spin_lock_init(&fip->ctlr_lock);
        fip->flogi_oxid = FC_XID_UNKNOWN;
-       setup_timer(&fip->timer, fcoe_ctlr_timeout, (unsigned long)fip);
+       timer_setup(&fip->timer, fcoe_ctlr_timeout, 0);
        INIT_WORK(&fip->timer_work, fcoe_ctlr_timer_work);
        INIT_WORK(&fip->recv_work, fcoe_ctlr_recv_work);
        skb_queue_head_init(&fip->fip_recv_list);
@@ -1786,9 +1786,9 @@ unlock:
  * fcoe_ctlr_timeout() - FIP timeout handler
  * @arg: The FCoE controller that timed out
  */
-static void fcoe_ctlr_timeout(unsigned long arg)
+static void fcoe_ctlr_timeout(struct timer_list *t)
 {
-       struct fcoe_ctlr *fip = (struct fcoe_ctlr *)arg;
+       struct fcoe_ctlr *fip = from_timer(fip, t, timer);
 
        schedule_work(&fip->timer_work);
 }
index aacadbf20b6954c28990d5dd592182a95cbaeba4..e52599f441707adc00df3bbb8d972f2e3a9ffe96 100644 (file)
@@ -407,18 +407,18 @@ static int fnic_notify_set(struct fnic *fnic)
        return err;
 }
 
-static void fnic_notify_timer(unsigned long data)
+static void fnic_notify_timer(struct timer_list *t)
 {
-       struct fnic *fnic = (struct fnic *)data;
+       struct fnic *fnic = from_timer(fnic, t, notify_timer);
 
        fnic_handle_link_event(fnic);
        mod_timer(&fnic->notify_timer,
                  round_jiffies(jiffies + FNIC_NOTIFY_TIMER_PERIOD));
 }
 
-static void fnic_fip_notify_timer(unsigned long data)
+static void fnic_fip_notify_timer(struct timer_list *t)
 {
-       struct fnic *fnic = (struct fnic *)data;
+       struct fnic *fnic = from_timer(fnic, t, fip_timer);
 
        fnic_handle_fip_timer(fnic);
 }
@@ -777,8 +777,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
                vnic_dev_add_addr(fnic->vdev, fnic->ctlr.ctl_src_addr);
                fnic->set_vlan = fnic_set_vlan;
                fcoe_ctlr_init(&fnic->ctlr, FIP_MODE_AUTO);
-               setup_timer(&fnic->fip_timer, fnic_fip_notify_timer,
-                                                       (unsigned long)fnic);
+               timer_setup(&fnic->fip_timer, fnic_fip_notify_timer, 0);
                spin_lock_init(&fnic->vlans_lock);
                INIT_WORK(&fnic->fip_frame_work, fnic_handle_fip_frame);
                INIT_WORK(&fnic->event_work, fnic_handle_event);
@@ -809,8 +808,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        /* Setup notify timer when using MSI interrupts */
        if (vnic_dev_get_intr_mode(fnic->vdev) == VNIC_DEV_INTR_MODE_MSI)
-               setup_timer(&fnic->notify_timer,
-                           fnic_notify_timer, (unsigned long)fnic);
+               timer_setup(&fnic->notify_timer, fnic_notify_timer, 0);
 
        /* allocate RQ buffers and post them to RQ*/
        for (i = 0; i < fnic->rq_count; i++) {
index 017216f5e919e1d088e41fb29b692ee3e6681e0e..dc4e801b2cefef35822ea70cace8b6cdf806f33d 100644 (file)
@@ -8093,9 +8093,9 @@ irqreturn_t ncr53c8xx_intr(int irq, void *dev_id)
      return IRQ_HANDLED;
 }
 
-static void ncr53c8xx_timeout(unsigned long npref)
+static void ncr53c8xx_timeout(struct timer_list *t)
 {
-       struct ncb *np = (struct ncb *) npref;
+       struct ncb *np = from_timer(np, t, timer);
        unsigned long flags;
        struct scsi_cmnd *done_list;
 
@@ -8357,7 +8357,7 @@ struct Scsi_Host * __init ncr_attach(struct scsi_host_template *tpnt,
        if (!np->scripth0)
                goto attach_error;
 
-       setup_timer(&np->timer, ncr53c8xx_timeout, (unsigned long)np);
+       timer_setup(&np->timer, ncr53c8xx_timeout, 0);
 
        /* Try to map the controller chip to virtual and physical memory. */
 
index 609332b3e15b5415b589eb099620d4961f189dc0..c462b1c046cd4709bdf5b4b6d93081966c197490 100644 (file)
@@ -293,9 +293,9 @@ static void gb_operation_work(struct work_struct *work)
        gb_operation_put(operation);
 }
 
-static void gb_operation_timeout(unsigned long arg)
+static void gb_operation_timeout(struct timer_list *t)
 {
-       struct gb_operation *operation = (void *)arg;
+       struct gb_operation *operation = from_timer(operation, t, timer);
 
        if (gb_operation_result_set(operation, -ETIMEDOUT)) {
                /*
@@ -540,8 +540,7 @@ gb_operation_create_common(struct gb_connection *connection, u8 type,
                        goto err_request;
                }
 
-               setup_timer(&operation->timer, gb_operation_timeout,
-                           (unsigned long)operation);
+               timer_setup(&operation->timer, gb_operation_timeout, 0);
        }
 
        operation->flags = op_flags;
index 3c83aa31e2c208426e3396ba9d02a2ac3f273f3f..5a5d1811ffbeac436dd02fd8fc5700569ae5ef25 100644 (file)
@@ -700,9 +700,9 @@ lnet_delay_rule_daemon(void *arg)
 }
 
 static void
-delay_timer_cb(unsigned long arg)
+delay_timer_cb(struct timer_list *t)
 {
-       struct lnet_delay_rule *rule = (struct lnet_delay_rule *)arg;
+       struct lnet_delay_rule *rule = from_timer(rule, t, dl_timer);
 
        spin_lock_bh(&delay_dd.dd_lock);
        if (list_empty(&rule->dl_sched_link) && delay_dd.dd_running) {
@@ -762,7 +762,7 @@ lnet_delay_rule_add(struct lnet_fault_attr *attr)
                wait_event(delay_dd.dd_ctl_waitq, delay_dd.dd_running);
        }
 
-       setup_timer(&rule->dl_timer, delay_timer_cb, (unsigned long)rule);
+       timer_setup(&rule->dl_timer, delay_timer_cb, 0);
 
        spin_lock_init(&rule->dl_lock);
        INIT_LIST_HEAD(&rule->dl_msg_list);
index 23cdb7c4476c9480b37e30a1ea2549724b51d319..63be6e7273f3548343c4b30991172a152599e90d 100644 (file)
@@ -329,11 +329,11 @@ ptlrpc_server_post_idle_rqbds(struct ptlrpc_service_part *svcpt)
        return -1;
 }
 
-static void ptlrpc_at_timer(unsigned long castmeharder)
+static void ptlrpc_at_timer(struct timer_list *t)
 {
        struct ptlrpc_service_part *svcpt;
 
-       svcpt = (struct ptlrpc_service_part *)castmeharder;
+       svcpt = from_timer(svcpt, t, scp_at_timer);
 
        svcpt->scp_at_check = 1;
        svcpt->scp_at_checktime = cfs_time_current();
@@ -506,8 +506,7 @@ ptlrpc_service_part_init(struct ptlrpc_service *svc,
        if (!array->paa_reqs_count)
                goto free_reqs_array;
 
-       setup_timer(&svcpt->scp_at_timer, ptlrpc_at_timer,
-                   (unsigned long)svcpt);
+       timer_setup(&svcpt->scp_at_timer, ptlrpc_at_timer, 0);
 
        /* At SOW, service time should be quick; 10s seems generous. If client
         * timeout is less than this, we'll be sending an early reply.
@@ -926,7 +925,7 @@ static void ptlrpc_at_set_timer(struct ptlrpc_service_part *svcpt)
        next = (__s32)(array->paa_deadline - ktime_get_real_seconds() -
                       at_early_margin);
        if (next <= 0) {
-               ptlrpc_at_timer((unsigned long)svcpt);
+               ptlrpc_at_timer(&svcpt->scp_at_timer);
        } else {
                mod_timer(&svcpt->scp_at_timer, cfs_time_shift(next));
                CDEBUG(D_INFO, "armed %s at %+ds\n",
index 0790b3d9e25560366a48633ddce37beeea21e762..143038c6c403f0085fd7a8327a6682a67e559858 100644 (file)
@@ -293,9 +293,9 @@ static irqreturn_t prp_nfb4eof_interrupt(int irq, void *dev_id)
  * EOF timeout timer function. This is an unrecoverable condition
  * without a stream restart.
  */
-static void prp_eof_timeout(unsigned long data)
+static void prp_eof_timeout(struct timer_list *t)
 {
-       struct prp_priv *priv = (struct prp_priv *)data;
+       struct prp_priv *priv = from_timer(priv, t, eof_timeout_timer);
        struct imx_media_video_dev *vdev = priv->vdev;
        struct imx_ic_priv *ic_priv = priv->ic_priv;
 
@@ -1292,8 +1292,7 @@ static int prp_init(struct imx_ic_priv *ic_priv)
        priv->ic_priv = ic_priv;
 
        spin_lock_init(&priv->irqlock);
-       setup_timer(&priv->eof_timeout_timer, prp_eof_timeout,
-                   (unsigned long)priv);
+       timer_setup(&priv->eof_timeout_timer, prp_eof_timeout, 0);
 
        priv->vdev = imx_media_capture_device_init(&ic_priv->sd,
                                                   PRPENCVF_SRC_PAD);
index 6d856118c223285702913468b29200e26c448a7c..bb1d6dafca83473eea250ff24be74b1505c9b533 100644 (file)
@@ -254,9 +254,9 @@ static irqreturn_t csi_idmac_nfb4eof_interrupt(int irq, void *dev_id)
  * EOF timeout timer function. This is an unrecoverable condition
  * without a stream restart.
  */
-static void csi_idmac_eof_timeout(unsigned long data)
+static void csi_idmac_eof_timeout(struct timer_list *t)
 {
-       struct csi_priv *priv = (struct csi_priv *)data;
+       struct csi_priv *priv = from_timer(priv, t, eof_timeout_timer);
        struct imx_media_video_dev *vdev = priv->vdev;
 
        v4l2_err(&priv->sd, "EOF timeout\n");
@@ -1739,8 +1739,7 @@ static int imx_csi_probe(struct platform_device *pdev)
        priv->csi_id = pdata->csi;
        priv->smfc_id = (priv->csi_id == 0) ? 0 : 2;
 
-       setup_timer(&priv->eof_timeout_timer, csi_idmac_eof_timeout,
-                   (unsigned long)priv);
+       timer_setup(&priv->eof_timeout_timer, csi_idmac_eof_timeout, 0);
        spin_lock_init(&priv->irqlock);
 
        v4l2_subdev_init(&priv->sd, &csi_subdev_ops);
index 85775da293fb10d067d7956af1268eabd5727893..667dacac81f03ed7902807790f26f7316b08e34b 100644 (file)
@@ -744,9 +744,9 @@ static void hdm_request_netinfo(struct most_interface *iface, int channel,
  * The handler runs in interrupt context. That's why we need to defer the
  * tasks to a work queue.
  */
-static void link_stat_timer_handler(unsigned long data)
+static void link_stat_timer_handler(struct timer_list *t)
 {
-       struct most_dev *mdev = (struct most_dev *)data;
+       struct most_dev *mdev = from_timer(mdev, t, link_stat_timer);
 
        schedule_work(&mdev->poll_work_obj);
        mdev->link_stat_timer.expires = jiffies + (2 * HZ);
@@ -1138,8 +1138,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
        num_endpoints = usb_iface_desc->desc.bNumEndpoints;
        mutex_init(&mdev->io_mutex);
        INIT_WORK(&mdev->poll_work_obj, wq_netinfo);
-       setup_timer(&mdev->link_stat_timer, link_stat_timer_handler,
-                   (unsigned long)mdev);
+       timer_setup(&mdev->link_stat_timer, link_stat_timer_handler, 0);
 
        mdev->usb_device = usb_dev;
        mdev->link_stat_timer.expires = jiffies + (2 * HZ);
index 4e7908322d77d1985989a0688096d975e0d41c6f..f56fdc7a4b614bd5732bfe9fac96017a43d49346 100644 (file)
@@ -391,10 +391,10 @@ static void ieee80211_send_beacon(struct ieee80211_device *ieee)
 }
 
 
-static void ieee80211_send_beacon_cb(unsigned long _ieee)
+static void ieee80211_send_beacon_cb(struct timer_list *t)
 {
        struct ieee80211_device *ieee =
-               (struct ieee80211_device *) _ieee;
+               from_timer(ieee, t, beacon_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&ieee->beacon_lock, flags);
@@ -1251,9 +1251,11 @@ void ieee80211_associate_abort(struct ieee80211_device *ieee)
        spin_unlock_irqrestore(&ieee->lock, flags);
 }
 
-static void ieee80211_associate_abort_cb(unsigned long dev)
+static void ieee80211_associate_abort_cb(struct timer_list *t)
 {
-       ieee80211_associate_abort((struct ieee80211_device *) dev);
+       struct ieee80211_device *dev = from_timer(dev, t, associate_timer);
+
+       ieee80211_associate_abort(dev);
 }
 
 
@@ -2718,11 +2720,9 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee)
        ieee->enable_rx_imm_BA = true;
        ieee->tx_pending.txb = NULL;
 
-       setup_timer(&ieee->associate_timer, ieee80211_associate_abort_cb,
-                   (unsigned long)ieee);
+       timer_setup(&ieee->associate_timer, ieee80211_associate_abort_cb, 0);
 
-       setup_timer(&ieee->beacon_timer, ieee80211_send_beacon_cb,
-                   (unsigned long)ieee);
+       timer_setup(&ieee->beacon_timer, ieee80211_send_beacon_cb, 0);
 
 
        INIT_DELAYED_WORK(&ieee->start_ibss_wq, ieee80211_start_ibss_wq);
index 576c15d25a0f80a53c0891f40331400d8f0b4c47..986a55bb9877e161d02209a04fb19e9eaea27dce 100644 (file)
@@ -138,17 +138,16 @@ _recv_indicatepkt_drop:
        precvpriv->rx_drop++;
 }
 
-static void _r8712_reordering_ctrl_timeout_handler (unsigned long data)
+static void _r8712_reordering_ctrl_timeout_handler (struct timer_list *t)
 {
        struct recv_reorder_ctrl *preorder_ctrl =
-                        (struct recv_reorder_ctrl *)data;
+                        from_timer(preorder_ctrl, t, reordering_ctrl_timer);
 
        r8712_reordering_ctrl_timeout_handler(preorder_ctrl);
 }
 
 void r8712_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl)
 {
-       setup_timer(&preorder_ctrl->reordering_ctrl_timer,
-                    _r8712_reordering_ctrl_timeout_handler,
-                    (unsigned long)preorder_ctrl);
+       timer_setup(&preorder_ctrl->reordering_ctrl_timer,
+                   _r8712_reordering_ctrl_timeout_handler, 0);
 }
index da1d4a641dcd2cd33935532c470dc6db6a373777..455fba721135a8bad731abd399712144b84307da 100644 (file)
@@ -74,7 +74,7 @@ enum _LED_STATE_871x {
  *     Prototype of protected function.
  *===========================================================================
  */
-static void BlinkTimerCallback(unsigned long data);
+static void BlinkTimerCallback(struct timer_list *t);
 
 static void BlinkWorkItemCallback(struct work_struct *work);
 /*===========================================================================
@@ -99,8 +99,7 @@ static void InitLed871x(struct _adapter *padapter, struct LED_871x *pLed,
        pLed->bLedBlinkInProgress = false;
        pLed->BlinkTimes = 0;
        pLed->BlinkingLedState = LED_UNKNOWN;
-       setup_timer(&pLed->BlinkTimer, BlinkTimerCallback,
-                   (unsigned long)pLed);
+       timer_setup(&pLed->BlinkTimer, BlinkTimerCallback, 0);
        INIT_WORK(&pLed->BlinkWorkItem, BlinkWorkItemCallback);
 }
 
@@ -825,9 +824,9 @@ static void SwLedBlink6(struct LED_871x *pLed)
  *             Callback function of LED BlinkTimer,
  *             it just schedules to corresponding BlinkWorkItem.
  */
-static void BlinkTimerCallback(unsigned long data)
+static void BlinkTimerCallback(struct timer_list *t)
 {
-       struct LED_871x  *pLed = (struct LED_871x *)data;
+       struct LED_871x  *pLed = from_timer(pLed, t, BlinkTimer);
 
        /* This fixed the crash problem on Fedora 12 when trying to do the
         * insmod;ifconfig up;rmmod commands.
index b604d0cccef12f2bf70b130c7f32d4d356fd3baf..6cb6eb0673c6da0a2f03473e02bde28196a74a9c 100644 (file)
@@ -493,9 +493,9 @@ static const struct file_operations bus_info_debugfs_fops = {
        .release = single_release,
 };
 
-static void dev_periodic_work(unsigned long __opaque)
+static void dev_periodic_work(struct timer_list *t)
 {
-       struct visor_device *dev = (struct visor_device *)__opaque;
+       struct visor_device *dev = from_timer(dev, t, timer);
        struct visor_driver *drv = to_visor_driver(dev->device.driver);
 
        drv->channel_interrupt(dev);
@@ -667,7 +667,7 @@ int create_visor_device(struct visor_device *dev)
        dev->device.release = visorbus_release_device;
        /* keep a reference just for us (now 2) */
        get_device(&dev->device);
-       setup_timer(&dev->timer, dev_periodic_work, (unsigned long)dev);
+       timer_setup(&dev->timer, dev_periodic_work, 0);
        /*
         * bus_id must be a unique name with respect to this bus TYPE (NOT bus
         * instance).  That's why we need to include the bus number within the
index 735d7e5fa86b0143a9d88e42fcb20f33048d49f1..6d8239163ba55452e0e7a4708b14bd7ebec5c785 100644 (file)
@@ -1766,9 +1766,10 @@ static int visornic_poll(struct napi_struct *napi, int budget)
  * Main function of the vnic_incoming thread. Periodically check the response
  * queue and drain it if needed.
  */
-static void poll_for_irq(unsigned long v)
+static void poll_for_irq(struct timer_list *t)
 {
-       struct visornic_devdata *devdata = (struct visornic_devdata *)v;
+       struct visornic_devdata *devdata = from_timer(devdata, t,
+                                                     irq_poll_timer);
 
        if (!visorchannel_signalempty(
                                   devdata->dev->visorchannel,
@@ -1899,8 +1900,7 @@ static int visornic_probe(struct visor_device *dev)
        /* Let's start our threads to get responses */
        netif_napi_add(netdev, &devdata->napi, visornic_poll, NAPI_WEIGHT);
 
-       setup_timer(&devdata->irq_poll_timer, poll_for_irq,
-                   (unsigned long)devdata);
+       timer_setup(&devdata->irq_poll_timer, poll_for_irq, 0);
        /* Note: This time has to start running before the while
         * loop below because the napi routine is responsible for
         * setting enab_dis_acked
index 8a275996d4e63a6eddccc6df30a152d72aab2813..028da1dc1b818380bd36c71b4cf403cce5523b45 100644 (file)
@@ -267,7 +267,7 @@ static void update_scan_time(void)
                last_scanned_shadow[i].time_scan = jiffies;
 }
 
-static void remove_network_from_shadow(unsigned long unused)
+static void remove_network_from_shadow(struct timer_list *unused)
 {
        unsigned long now = jiffies;
        int i, j;
@@ -292,7 +292,7 @@ static void remove_network_from_shadow(unsigned long unused)
        }
 }
 
-static void clear_duringIP(unsigned long arg)
+static void clear_duringIP(struct timer_list *unused)
 {
        wilc_optaining_ip = false;
 }
@@ -2278,8 +2278,8 @@ int wilc_init_host_int(struct net_device *net)
 
        priv = wdev_priv(net->ieee80211_ptr);
        if (op_ifcs == 0) {
-               setup_timer(&hAgingTimer, remove_network_from_shadow, 0);
-               setup_timer(&wilc_during_ip_timer, clear_duringIP, 0);
+               timer_setup(&hAgingTimer, remove_network_from_shadow, 0);
+               timer_setup(&wilc_during_ip_timer, clear_duringIP, 0);
        }
        op_ifcs++;
 
index 9469695f5871aea064bea2e4b4f65e32742c3cb4..a8eaed2c211a38dc1ef94043a77f8160e94ab4a9 100644 (file)
@@ -1044,9 +1044,9 @@ static int tcmu_check_expired_cmd(int id, void *p, void *data)
        return 0;
 }
 
-static void tcmu_device_timedout(unsigned long data)
+static void tcmu_device_timedout(struct timer_list *t)
 {
-       struct tcmu_dev *udev = (struct tcmu_dev *)data;
+       struct tcmu_dev *udev = from_timer(udev, t, timeout);
        unsigned long flags;
 
        spin_lock_irqsave(&udev->commands_lock, flags);
@@ -1106,8 +1106,7 @@ static struct se_device *tcmu_alloc_device(struct se_hba *hba, const char *name)
        idr_init(&udev->commands);
        spin_lock_init(&udev->commands_lock);
 
-       setup_timer(&udev->timeout, tcmu_device_timedout,
-               (unsigned long)udev);
+       timer_setup(&udev->timeout, tcmu_device_timedout, 0);
 
        init_waitqueue_head(&udev->nl_cmd_wq);
        spin_lock_init(&udev->nl_cmd_lock);
index a6b8240af6cdd6dcfb6bbb07e39e39bc13bf4f7b..b0baa4ce10f9897d5f2284c7aa6e50c6dd5bb7de 100644 (file)
@@ -33,7 +33,7 @@ static void handle_received_SETUP_packet(struct ipw_hardware *ipw,
                                         unsigned int address,
                                         const unsigned char *data, int len,
                                         int is_last);
-static void ipwireless_setup_timer(unsigned long data);
+static void ipwireless_setup_timer(struct timer_list *t);
 static void handle_received_CTRL_packet(struct ipw_hardware *hw,
                unsigned int channel_idx, const unsigned char *data, int len);
 
@@ -1635,8 +1635,7 @@ struct ipw_hardware *ipwireless_hardware_create(void)
        spin_lock_init(&hw->lock);
        tasklet_init(&hw->tasklet, ipwireless_do_tasklet, (unsigned long) hw);
        INIT_WORK(&hw->work_rx, ipw_receive_data_work);
-       setup_timer(&hw->setup_timer, ipwireless_setup_timer,
-                       (unsigned long) hw);
+       timer_setup(&hw->setup_timer, ipwireless_setup_timer, 0);
 
        return hw;
 }
@@ -1670,12 +1669,12 @@ void ipwireless_init_hardware_v2_v3(struct ipw_hardware *hw)
        hw->init_loops = 0;
        printk(KERN_INFO IPWIRELESS_PCCARD_NAME
               ": waiting for card to start up...\n");
-       ipwireless_setup_timer((unsigned long) hw);
+       ipwireless_setup_timer(&hw->setup_timer);
 }
 
-static void ipwireless_setup_timer(unsigned long data)
+static void ipwireless_setup_timer(struct timer_list *t)
 {
-       struct ipw_hardware *hw = (struct ipw_hardware *) data;
+       struct ipw_hardware *hw = from_timer(hw, t, setup_timer);
 
        hw->init_loops++;
 
index 3a39eb685c693d4f3a85df528a0a3cded9be442b..5131bdc9e765037f882203f1b9b6afa8bf01656c 100644 (file)
@@ -1310,9 +1310,9 @@ static void gsm_control_transmit(struct gsm_mux *gsm, struct gsm_control *ctrl)
  *     gsm->pending_cmd will be NULL and we just let the timer expire.
  */
 
-static void gsm_control_retransmit(unsigned long data)
+static void gsm_control_retransmit(struct timer_list *t)
 {
-       struct gsm_mux *gsm = (struct gsm_mux *)data;
+       struct gsm_mux *gsm = from_timer(gsm, t, t2_timer);
        struct gsm_control *ctrl;
        unsigned long flags;
        spin_lock_irqsave(&gsm->control_lock, flags);
@@ -1453,9 +1453,9 @@ static void gsm_dlci_open(struct gsm_dlci *dlci)
  *     end will get a DM response)
  */
 
-static void gsm_dlci_t1(unsigned long data)
+static void gsm_dlci_t1(struct timer_list *t)
 {
-       struct gsm_dlci *dlci = (struct gsm_dlci *)data;
+       struct gsm_dlci *dlci = from_timer(dlci, t, t1);
        struct gsm_mux *gsm = dlci->gsm;
 
        switch (dlci->state) {
@@ -1634,7 +1634,7 @@ static struct gsm_dlci *gsm_dlci_alloc(struct gsm_mux *gsm, int addr)
        }
 
        skb_queue_head_init(&dlci->skb_list);
-       setup_timer(&dlci->t1, gsm_dlci_t1, (unsigned long)dlci);
+       timer_setup(&dlci->t1, gsm_dlci_t1, 0);
        tty_port_init(&dlci->port);
        dlci->port.ops = &gsm_port_ops;
        dlci->gsm = gsm;
@@ -2088,7 +2088,7 @@ static int gsm_activate_mux(struct gsm_mux *gsm)
        struct gsm_dlci *dlci;
        int i = 0;
 
-       setup_timer(&gsm->t2_timer, gsm_control_retransmit, (unsigned long)gsm);
+       timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0);
        init_waitqueue_head(&gsm->event);
        spin_lock_init(&gsm->control_lock);
        spin_lock_init(&gsm->tx_lock);
index 9f246d4db3caa605c8811df37c27bf098fd17e6f..30bb0900cd2f5b5c83089202b62af6add9c45e25 100644 (file)
@@ -115,7 +115,7 @@ static void retry_transmit(struct r3964_info *pInfo);
 static void transmit_block(struct r3964_info *pInfo);
 static void receive_char(struct r3964_info *pInfo, const unsigned char c);
 static void receive_error(struct r3964_info *pInfo, const char flag);
-static void on_timeout(unsigned long priv);
+static void on_timeout(struct timer_list *t);
 static int enable_signals(struct r3964_info *pInfo, struct pid *pid, int arg);
 static int read_telegram(struct r3964_info *pInfo, struct pid *pid,
                unsigned char __user * buf);
@@ -688,9 +688,9 @@ static void receive_error(struct r3964_info *pInfo, const char flag)
        }
 }
 
-static void on_timeout(unsigned long priv)
+static void on_timeout(struct timer_list *t)
 {
-       struct r3964_info *pInfo = (void *)priv;
+       struct r3964_info *pInfo = from_timer(pInfo, t, tmr);
 
        switch (pInfo->state) {
        case R3964_TX_REQUEST:
@@ -993,7 +993,7 @@ static int r3964_open(struct tty_struct *tty)
        tty->disc_data = pInfo;
        tty->receive_room = 65536;
 
-       setup_timer(&pInfo->tmr, on_timeout, (unsigned long)pInfo);
+       timer_setup(&pInfo->tmr, on_timeout, 0);
 
        return 0;
 }
index 1421804975e0b08115232b3c0d7d8430fa46bf24..c9458a033e3cc0ca325e84e1c1fe4778086e9d09 100644 (file)
@@ -2059,7 +2059,7 @@ static void flush_timeout_function(unsigned long data)
 static struct timer_list flush_timer;
 
 static void
-timed_flush_handler(unsigned long ptr)
+timed_flush_handler(struct timer_list *unused)
 {
        struct e100_serial *info;
        int i;
@@ -4137,7 +4137,7 @@ static int __init rs_init(void)
        /* Setup the timed flush handler system */
 
 #if !defined(CONFIG_ETRAX_SERIAL_FAST_TIMER)
-       setup_timer(&flush_timer, timed_flush_handler, 0);
+       timer_setup(&flush_timer, timed_flush_handler, 0);
        mod_timer(&flush_timer, jiffies + 5);
 #endif
 
index c84e6f0db54e16662b0a258af90bdad3af280ee9..1c4d3f38713863f2ebc2e5e7f13ff5f38ac0715d 100644 (file)
@@ -966,9 +966,9 @@ static void lpuart_dma_rx_complete(void *arg)
        lpuart_copy_rx_to_tty(sport);
 }
 
-static void lpuart_timer_func(unsigned long data)
+static void lpuart_timer_func(struct timer_list *t)
 {
-       struct lpuart_port *sport = (struct lpuart_port *)data;
+       struct lpuart_port *sport = from_timer(sport, t, lpuart_timer);
 
        lpuart_copy_rx_to_tty(sport);
 }
@@ -1263,8 +1263,7 @@ static void lpuart32_setup_watermark(struct lpuart_port *sport)
 
 static void rx_dma_timer_init(struct lpuart_port *sport)
 {
-               setup_timer(&sport->lpuart_timer, lpuart_timer_func,
-                               (unsigned long)sport);
+               timer_setup(&sport->lpuart_timer, lpuart_timer_func, 0);
                sport->lpuart_timer.expires = jiffies + sport->dma_rx_timeout;
                add_timer(&sport->lpuart_timer);
 }
index 473f4f81d690c6ab21a768c0b0745347fc4d9aa5..ffefd218761e04c633171b3f1b14151e7f05b721 100644 (file)
@@ -263,9 +263,9 @@ static void mrdy_assert(struct ifx_spi_device *ifx_dev)
  *     The SPI has timed out: hang up the tty. Users will then see a hangup
  *     and error events.
  */
-static void ifx_spi_timeout(unsigned long arg)
+static void ifx_spi_timeout(struct timer_list *t)
 {
-       struct ifx_spi_device *ifx_dev = (struct ifx_spi_device *)arg;
+       struct ifx_spi_device *ifx_dev = from_timer(ifx_dev, t, spi_timer);
 
        dev_warn(&ifx_dev->spi_dev->dev, "*** SPI Timeout ***");
        tty_port_tty_hangup(&ifx_dev->tty_port, false);
@@ -1016,8 +1016,7 @@ static int ifx_spi_spi_probe(struct spi_device *spi)
        spin_lock_init(&ifx_dev->write_lock);
        spin_lock_init(&ifx_dev->power_lock);
        ifx_dev->power_status = 0;
-       setup_timer(&ifx_dev->spi_timer, ifx_spi_timeout,
-                   (unsigned long)ifx_dev);
+       timer_setup(&ifx_dev->spi_timer, ifx_spi_timeout, 0);
        ifx_dev->modem = pl_data->modem_type;
        ifx_dev->use_dma = pl_data->use_dma;
        ifx_dev->max_hz = pl_data->max_hz;
index a67a606c38eb0066565c9e1f8fb26ed9cb744980..e4b3d9123a03312b3985e8f1db7840e13e6a38e3 100644 (file)
@@ -906,9 +906,9 @@ static void imx_break_ctl(struct uart_port *port, int break_state)
  * This is our per-port timeout handler, for checking the
  * modem status signals.
  */
-static void imx_timeout(unsigned long data)
+static void imx_timeout(struct timer_list *t)
 {
-       struct imx_port *sport = (struct imx_port *)data;
+       struct imx_port *sport = from_timer(sport, t, timer);
        unsigned long flags;
 
        if (sport->port.state) {
@@ -2082,7 +2082,7 @@ static int serial_imx_probe(struct platform_device *pdev)
        sport->port.rs485_config = imx_rs485_config;
        sport->port.rs485.flags |= SER_RS485_RTS_ON_SEND;
        sport->port.flags = UPF_BOOT_AUTOCONF;
-       setup_timer(&sport->timer, imx_timeout, (unsigned long)sport);
+       timer_setup(&sport->timer, imx_timeout, 0);
 
        sport->gpios = mctrl_gpio_init(&sport->port, 0);
        if (IS_ERR(sport->gpios))
index ed2b0305862727296d5d5f8109a4a43022cda761..4029272891f9d6e4385d01b03dbb73b53d7026e5 100644 (file)
@@ -188,9 +188,9 @@ bool kgdb_nmi_poll_knock(void)
  * The tasklet is cheap, it does not cause wakeups when reschedules itself,
  * instead it waits for the next tick.
  */
-static void kgdb_nmi_tty_receiver(unsigned long data)
+static void kgdb_nmi_tty_receiver(struct timer_list *t)
 {
-       struct kgdb_nmi_tty_priv *priv = (void *)data;
+       struct kgdb_nmi_tty_priv *priv = from_timer(priv, t, timer);
        char ch;
 
        priv->timer.expires = jiffies + (HZ/100);
@@ -241,7 +241,7 @@ static int kgdb_nmi_tty_install(struct tty_driver *drv, struct tty_struct *tty)
                return -ENOMEM;
 
        INIT_KFIFO(priv->fifo);
-       setup_timer(&priv->timer, kgdb_nmi_tty_receiver, (unsigned long)priv);
+       timer_setup(&priv->timer, kgdb_nmi_tty_receiver, 0);
        tty_port_init(&priv->port);
        priv->port.ops = &kgdb_nmi_tty_port_ops;
        tty->driver_data = priv;
index 27d6049eb6a9a210b7317f40ea1a7d92118cab23..371569a0fd00a8161f76ac715a734368e2419e60 100644 (file)
@@ -178,9 +178,9 @@ static void max3100_dowork(struct max3100_port *s)
                queue_work(s->workqueue, &s->work);
 }
 
-static void max3100_timeout(unsigned long data)
+static void max3100_timeout(struct timer_list *t)
 {
-       struct max3100_port *s = (struct max3100_port *)data;
+       struct max3100_port *s = from_timer(s, t, timer);
 
        if (s->port.state) {
                max3100_dowork(s);
@@ -780,8 +780,7 @@ static int max3100_probe(struct spi_device *spi)
                max3100s[i]->poll_time = 1;
        max3100s[i]->max3100_hw_suspend = pdata->max3100_hw_suspend;
        max3100s[i]->minor = i;
-       setup_timer(&max3100s[i]->timer, max3100_timeout,
-                   (unsigned long)max3100s[i]);
+       timer_setup(&max3100s[i]->timer, max3100_timeout, 0);
 
        dev_dbg(&spi->dev, "%s: adding port %d\n", __func__, i);
        max3100s[i]->port.irq = max3100s[i]->irq;
index 3b74369c262f1d19829dc5aceec7bb8b0b76cbae..00ce31e8d19ad852ed025f2928ef22ae603e4ea8 100644 (file)
@@ -371,7 +371,7 @@ static int mux_verify_port(struct uart_port *port, struct serial_struct *ser)
  *
  * This function periodically polls the Serial MUX to check for new data.
  */
-static void mux_poll(unsigned long unused)
+static void mux_poll(struct timer_list *unused)
 {  
        int i;
 
@@ -572,7 +572,7 @@ static int __init mux_init(void)
 
        if(port_cnt > 0) {
                /* Start the Mux timer */
-               setup_timer(&mux_timer, mux_poll, 0UL);
+               timer_setup(&mux_timer, mux_poll, 0);
                mod_timer(&mux_timer, jiffies + MUX_POLL_DELAY);
 
 #ifdef CONFIG_SERIAL_MUX_CONSOLE
index f8812389b8a8bbc7ab95b5d68c7b9a17b99f7596..223a9499104e2ffc49a928aa4a6caa26cd07db8c 100644 (file)
@@ -103,9 +103,9 @@ static void pnx8xxx_mctrl_check(struct pnx8xxx_port *sport)
  * This is our per-port timeout handler, for checking the
  * modem status signals.
  */
-static void pnx8xxx_timeout(unsigned long data)
+static void pnx8xxx_timeout(struct timer_list *t)
 {
-       struct pnx8xxx_port *sport = (struct pnx8xxx_port *)data;
+       struct pnx8xxx_port *sport = from_timer(sport, t, timer);
        unsigned long flags;
 
        if (sport->port.state) {
@@ -662,8 +662,7 @@ static void __init pnx8xxx_init_ports(void)
        first = 0;
 
        for (i = 0; i < NR_PORTS; i++) {
-               setup_timer(&pnx8xxx_ports[i].timer, pnx8xxx_timeout,
-                           (unsigned long)&pnx8xxx_ports[i]);
+               timer_setup(&pnx8xxx_ports[i].timer, pnx8xxx_timeout, 0);
                pnx8xxx_ports[i].port.ops = &pnx8xxx_pops;
        }
 }
index 4e3f169b30cffdee4513848d22e0008eef65d989..a399772be3fc5342de88d3d202a05b32758c1d0c 100644 (file)
@@ -110,9 +110,9 @@ static void sa1100_mctrl_check(struct sa1100_port *sport)
  * This is our per-port timeout handler, for checking the
  * modem status signals.
  */
-static void sa1100_timeout(unsigned long data)
+static void sa1100_timeout(struct timer_list *t)
 {
-       struct sa1100_port *sport = (struct sa1100_port *)data;
+       struct sa1100_port *sport = from_timer(sport, t, timer);
        unsigned long flags;
 
        if (sport->port.state) {
@@ -627,8 +627,7 @@ static void __init sa1100_init_ports(void)
                sa1100_ports[i].port.fifosize  = 8;
                sa1100_ports[i].port.line      = i;
                sa1100_ports[i].port.iotype    = UPIO_MEM;
-               setup_timer(&sa1100_ports[i].timer, sa1100_timeout,
-                           (unsigned long)&sa1100_ports[i]);
+               timer_setup(&sa1100_ports[i].timer, sa1100_timeout, 0);
        }
 
        /*
index 31fcc7072a90d43b7b96d9603ef5e40a680bf61d..d9f399c4e90c0dfa957bb8cbc80b99c8ef27f454 100644 (file)
@@ -1058,9 +1058,9 @@ static int scif_rtrg_enabled(struct uart_port *port)
                        (SCFCR_RTRG0 | SCFCR_RTRG1)) != 0;
 }
 
-static void rx_fifo_timer_fn(unsigned long arg)
+static void rx_fifo_timer_fn(struct timer_list *t)
 {
-       struct sci_port *s = (struct sci_port *)arg;
+       struct sci_port *s = from_timer(s, t, rx_fifo_timer);
        struct uart_port *port = &s->port;
 
        dev_dbg(port->dev, "Rx timed out\n");
@@ -1138,8 +1138,7 @@ static ssize_t rx_fifo_timeout_store(struct device *dev,
                sci->rx_fifo_timeout = r;
                scif_set_rtrg(port, 1);
                if (r > 0)
-                       setup_timer(&sci->rx_fifo_timer, rx_fifo_timer_fn,
-                                   (unsigned long)sci);
+                       timer_setup(&sci->rx_fifo_timer, rx_fifo_timer_fn, 0);
        }
 
        return count;
@@ -1392,9 +1391,9 @@ static void work_fn_tx(struct work_struct *work)
        dma_async_issue_pending(chan);
 }
 
-static void rx_timer_fn(unsigned long arg)
+static void rx_timer_fn(struct timer_list *t)
 {
-       struct sci_port *s = (struct sci_port *)arg;
+       struct sci_port *s = from_timer(s, t, rx_timer);
        struct dma_chan *chan = s->chan_rx;
        struct uart_port *port = &s->port;
        struct dma_tx_state state;
@@ -1572,7 +1571,7 @@ static void sci_request_dma(struct uart_port *port)
                        dma += s->buf_len_rx;
                }
 
-               setup_timer(&s->rx_timer, rx_timer_fn, (unsigned long)s);
+               timer_setup(&s->rx_timer, rx_timer_fn, 0);
 
                if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
                        sci_submit_rx(s);
@@ -2238,8 +2237,7 @@ static void sci_reset(struct uart_port *port)
        if (s->rx_trigger > 1) {
                if (s->rx_fifo_timeout) {
                        scif_set_rtrg(port, 1);
-                       setup_timer(&s->rx_fifo_timer, rx_fifo_timer_fn,
-                                   (unsigned long)s);
+                       timer_setup(&s->rx_fifo_timer, rx_fifo_timer_fn, 0);
                } else {
                        if (port->type == PORT_SCIFA ||
                            port->type == PORT_SCIFB)
index ed78542c4c37a2b509831790a39e36569c71768a..42b9aded4eb1c6d47a9795d743a27af9627fa563 100644 (file)
@@ -612,9 +612,9 @@ static irqreturn_t sn_sal_interrupt(int irq, void *dev_id)
  * Obviously not used in interrupt mode
  *
  */
-static void sn_sal_timer_poll(unsigned long data)
+static void sn_sal_timer_poll(struct timer_list *t)
 {
-       struct sn_cons_port *port = (struct sn_cons_port *)data;
+       struct sn_cons_port *port = from_timer(port, t, sc_timer);
        unsigned long flags;
 
        if (!port)
@@ -668,7 +668,7 @@ static void __init sn_sal_switch_to_asynch(struct sn_cons_port *port)
         * timer to poll for input and push data from the console
         * buffer.
         */
-       setup_timer(&port->sc_timer, sn_sal_timer_poll, (unsigned long)port);
+       timer_setup(&port->sc_timer, sn_sal_timer_poll, 0);
 
        if (IS_RUNNING_ON_SIMULATOR())
                port->sc_interrupt_timeout = 6;
index f2c34d65614462f395627dc981c19928ce77fb7f..3c4ad71f261d67144a489b4b138d8814c4b448ef 100644 (file)
@@ -700,7 +700,7 @@ static void usc_enable_async_clock( struct mgsl_struct *info, u32 DataRate );
 
 static void usc_loopback_frame( struct mgsl_struct *info );
 
-static void mgsl_tx_timeout(unsigned long context);
+static void mgsl_tx_timeout(struct timer_list *t);
 
 
 static void usc_loopmode_cancel_transmit( struct mgsl_struct * info );
@@ -1768,7 +1768,7 @@ static int startup(struct mgsl_struct * info)
        
        memset(&info->icount, 0, sizeof(info->icount));
 
-       setup_timer(&info->tx_timer, mgsl_tx_timeout, (unsigned long)info);
+       timer_setup(&info->tx_timer, mgsl_tx_timeout, 0);
        
        /* Allocate and claim adapter resources */
        retval = mgsl_claim_resources(info);
@@ -7517,9 +7517,9 @@ static void mgsl_trace_block(struct mgsl_struct *info,const char* data, int coun
  * Arguments:  context         pointer to device instance data
  * Return Value:       None
  */
-static void mgsl_tx_timeout(unsigned long context)
+static void mgsl_tx_timeout(struct timer_list *t)
 {
-       struct mgsl_struct *info = (struct mgsl_struct*)context;
+       struct mgsl_struct *info = from_timer(info, t, tx_timer);
        unsigned long flags;
        
        if ( debug_level >= DEBUG_LEVEL_INFO )
index 06a03731bba70a59e437da22c262100dd635ce6f..255c496878778d060067bc7a2b8b79459af73819 100644 (file)
@@ -493,8 +493,8 @@ static void free_bufs(struct slgt_info *info, struct slgt_desc *bufs, int count)
 static int  alloc_tmp_rbuf(struct slgt_info *info);
 static void free_tmp_rbuf(struct slgt_info *info);
 
-static void tx_timeout(unsigned long context);
-static void rx_timeout(unsigned long context);
+static void tx_timeout(struct timer_list *t);
+static void rx_timeout(struct timer_list *t);
 
 /*
  * ioctl handlers
@@ -3597,8 +3597,8 @@ static struct slgt_info *alloc_dev(int adapter_num, int port_num, struct pci_dev
                info->adapter_num = adapter_num;
                info->port_num = port_num;
 
-               setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info);
-               setup_timer(&info->rx_timer, rx_timeout, (unsigned long)info);
+               timer_setup(&info->tx_timer, tx_timeout, 0);
+               timer_setup(&info->rx_timer, rx_timeout, 0);
 
                /* Copy configuration info to device instance data */
                info->pdev = pdev;
@@ -5112,9 +5112,9 @@ static int adapter_test(struct slgt_info *info)
 /*
  * transmit timeout handler
  */
-static void tx_timeout(unsigned long context)
+static void tx_timeout(struct timer_list *t)
 {
-       struct slgt_info *info = (struct slgt_info*)context;
+       struct slgt_info *info = from_timer(info, t, tx_timer);
        unsigned long flags;
 
        DBGINFO(("%s tx_timeout\n", info->device_name));
@@ -5136,9 +5136,9 @@ static void tx_timeout(unsigned long context)
 /*
  * receive buffer polling timer
  */
-static void rx_timeout(unsigned long context)
+static void rx_timeout(struct timer_list *t)
 {
-       struct slgt_info *info = (struct slgt_info*)context;
+       struct slgt_info *info = from_timer(info, t, rx_timer);
        unsigned long flags;
 
        DBGINFO(("%s rx_timeout\n", info->device_name));
index d45f234e1914b81205af50df7419e45f61cf9d51..75f11ce1f0a1ac5fe8754ae2948783c51e24481f 100644 (file)
@@ -615,8 +615,8 @@ static void free_tmp_rx_buf(SLMP_INFO *info);
 
 static void load_pci_memory(SLMP_INFO *info, char* dest, const char* src, unsigned short count);
 static void trace_block(SLMP_INFO *info, const char* data, int count, int xmit);
-static void tx_timeout(unsigned long context);
-static void status_timeout(unsigned long context);
+static void tx_timeout(struct timer_list *t);
+static void status_timeout(struct timer_list *t);
 
 static unsigned char read_reg(SLMP_INFO *info, unsigned char addr);
 static void write_reg(SLMP_INFO *info, unsigned char addr, unsigned char val);
@@ -3782,9 +3782,8 @@ static SLMP_INFO *alloc_dev(int adapter_num, int port_num, struct pci_dev *pdev)
                info->bus_type = MGSL_BUS_TYPE_PCI;
                info->irq_flags = IRQF_SHARED;
 
-               setup_timer(&info->tx_timer, tx_timeout, (unsigned long)info);
-               setup_timer(&info->status_timer, status_timeout,
-                               (unsigned long)info);
+               timer_setup(&info->tx_timer, tx_timeout, 0);
+               timer_setup(&info->status_timer, status_timeout, 0);
 
                /* Store the PCI9050 misc control register value because a flaw
                 * in the PCI9050 prevents LCR registers from being read if
@@ -5468,9 +5467,9 @@ static void trace_block(SLMP_INFO *info,const char* data, int count, int xmit)
 /* called when HDLC frame times out
  * update stats and do tx completion processing
  */
-static void tx_timeout(unsigned long context)
+static void tx_timeout(struct timer_list *t)
 {
-       SLMP_INFO *info = (SLMP_INFO*)context;
+       SLMP_INFO *info = from_timer(info, t, tx_timer);
        unsigned long flags;
 
        if ( debug_level >= DEBUG_LEVEL_INFO )
@@ -5495,10 +5494,10 @@ static void tx_timeout(unsigned long context)
 
 /* called to periodically check the DSR/RI modem signal input status
  */
-static void status_timeout(unsigned long context)
+static void status_timeout(struct timer_list *t)
 {
        u16 status = 0;
-       SLMP_INFO *info = (SLMP_INFO*)context;
+       SLMP_INFO *info = from_timer(info, t, status_timer);
        unsigned long flags;
        unsigned char delta;
 
index 19b5c4afeef205931226f0350680977de25d5f47..fc32391a34d5db0c4951d2f1a50c4be8ccb97f94 100644 (file)
@@ -788,9 +788,11 @@ void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
 EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
 
 /* timer callback */
-static void rh_timer_func (unsigned long _hcd)
+static void rh_timer_func (struct timer_list *t)
 {
-       usb_hcd_poll_rh_status((struct usb_hcd *) _hcd);
+       struct usb_hcd *_hcd = from_timer(_hcd, t, rh_timer);
+
+       usb_hcd_poll_rh_status(_hcd);
 }
 
 /*-------------------------------------------------------------------------*/
@@ -2545,7 +2547,7 @@ struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,
        hcd->self.bus_name = bus_name;
        hcd->self.uses_dma = (sysdev->dma_mask != NULL);
 
-       setup_timer(&hcd->rh_timer, rh_timer_func, (unsigned long)hcd);
+       timer_setup(&hcd->rh_timer, rh_timer_func, 0);
 #ifdef CONFIG_PM
        INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
 #endif
index 69eb40cd1b47ec195cec2f7a195b8a5051ed4f6a..7b6eb0ad513b26b33610c9b08531f8accac4a89f 100644 (file)
@@ -3314,9 +3314,9 @@ host:
        }
 }
 
-static void dwc2_wakeup_detected(unsigned long data)
+static void dwc2_wakeup_detected(struct timer_list *t)
 {
-       struct dwc2_hsotg *hsotg = (struct dwc2_hsotg *)data;
+       struct dwc2_hsotg *hsotg = from_timer(hsotg, t, wkp_timer);
        u32 hprt0;
 
        dev_dbg(hsotg->dev, "%s()\n", __func__);
@@ -5155,8 +5155,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg)
        }
        INIT_WORK(&hsotg->wf_otg, dwc2_conn_id_status_change);
 
-       setup_timer(&hsotg->wkp_timer, dwc2_wakeup_detected,
-                   (unsigned long)hsotg);
+       timer_setup(&hsotg->wkp_timer, dwc2_wakeup_detected, 0);
 
        /* Initialize the non-periodic schedule */
        INIT_LIST_HEAD(&hsotg->non_periodic_sched_inactive);
index f472de238ac26ad9824f0322f0f80fc78c89f3c4..fcd1676c7f0b7eae8b942aa9a50f6bcfb8cdc813 100644 (file)
@@ -1275,9 +1275,9 @@ static void dwc2_do_unreserve(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
  *
  * @work: Pointer to a qh unreserve_work.
  */
-static void dwc2_unreserve_timer_fn(unsigned long data)
+static void dwc2_unreserve_timer_fn(struct timer_list *t)
 {
-       struct dwc2_qh *qh = (struct dwc2_qh *)data;
+       struct dwc2_qh *qh = from_timer(qh, t, unreserve_timer);
        struct dwc2_hsotg *hsotg = qh->hsotg;
        unsigned long flags;
 
@@ -1467,8 +1467,7 @@ static void dwc2_qh_init(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh,
 
        /* Initialize QH */
        qh->hsotg = hsotg;
-       setup_timer(&qh->unreserve_timer, dwc2_unreserve_timer_fn,
-                   (unsigned long)qh);
+       timer_setup(&qh->unreserve_timer, dwc2_unreserve_timer_fn, 0);
        qh->ep_type = ep_type;
        qh->ep_is_in = ep_is_in;
 
index bfe278294e889058aa642077b78dd0b97263f7ff..ad743a8493be2eceabb2031a48a834c702b823b9 100644 (file)
@@ -1550,9 +1550,9 @@ static void at91_vbus_timer_work(struct work_struct *work)
                mod_timer(&udc->vbus_timer, jiffies + VBUS_POLL_TIMEOUT);
 }
 
-static void at91_vbus_timer(unsigned long data)
+static void at91_vbus_timer(struct timer_list *t)
 {
-       struct at91_udc *udc = (struct at91_udc *)data;
+       struct at91_udc *udc = from_timer(udc, t, vbus_timer);
 
        /*
         * If we are polling vbus it is likely that the gpio is on an
@@ -1918,8 +1918,7 @@ static int at91udc_probe(struct platform_device *pdev)
 
                if (udc->board.vbus_polled) {
                        INIT_WORK(&udc->vbus_timer_work, at91_vbus_timer_work);
-                       setup_timer(&udc->vbus_timer, at91_vbus_timer,
-                                   (unsigned long)udc);
+                       timer_setup(&udc->vbus_timer, at91_vbus_timer, 0);
                        mod_timer(&udc->vbus_timer,
                                  jiffies + VBUS_POLL_TIMEOUT);
                } else {
index 4f1b1809472c41446b34904fb857a965f33c1afd..d0128f92ec5af312af880d7822a316587992b1a8 100644 (file)
@@ -1771,9 +1771,9 @@ static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,
 /* drive both sides of the transfers; looks like irq handlers to
  * both drivers except the callbacks aren't in_irq().
  */
-static void dummy_timer(unsigned long _dum_hcd)
+static void dummy_timer(struct timer_list *t)
 {
-       struct dummy_hcd        *dum_hcd = (struct dummy_hcd *) _dum_hcd;
+       struct dummy_hcd        *dum_hcd = from_timer(dum_hcd, t, timer);
        struct dummy            *dum = dum_hcd->dum;
        struct urbp             *urbp, *tmp;
        unsigned long           flags;
@@ -2445,7 +2445,7 @@ static DEVICE_ATTR_RO(urbs);
 
 static int dummy_start_ss(struct dummy_hcd *dum_hcd)
 {
-       setup_timer(&dum_hcd->timer, dummy_timer, (unsigned long)dum_hcd);
+       timer_setup(&dum_hcd->timer, dummy_timer, 0);
        dum_hcd->rh_state = DUMMY_RH_RUNNING;
        dum_hcd->stream_en_ep = 0;
        INIT_LIST_HEAD(&dum_hcd->urbp_list);
@@ -2474,7 +2474,7 @@ static int dummy_start(struct usb_hcd *hcd)
                return dummy_start_ss(dum_hcd);
 
        spin_lock_init(&dum_hcd->dum->lock);
-       setup_timer(&dum_hcd->timer, dummy_timer, (unsigned long)dum_hcd);
+       timer_setup(&dum_hcd->timer, dummy_timer, 0);
        dum_hcd->rh_state = DUMMY_RH_RUNNING;
 
        INIT_LIST_HEAD(&dum_hcd->urbp_list);
index f19e6282a688d030e3304fcb17e227efbd30207a..a8288df6aadf09c5523d1922d6a71f0c646940fb 100644 (file)
@@ -1259,9 +1259,9 @@ static irqreturn_t m66592_irq(int irq, void *_m66592)
        return IRQ_HANDLED;
 }
 
-static void m66592_timer(unsigned long _m66592)
+static void m66592_timer(struct timer_list *t)
 {
-       struct m66592 *m66592 = (struct m66592 *)_m66592;
+       struct m66592 *m66592 = from_timer(m66592, t, timer);
        unsigned long flags;
        u16 tmp;
 
@@ -1589,7 +1589,7 @@ static int m66592_probe(struct platform_device *pdev)
        m66592->gadget.max_speed = USB_SPEED_HIGH;
        m66592->gadget.name = udc_name;
 
-       setup_timer(&m66592->timer, m66592_timer, (unsigned long)m66592);
+       timer_setup(&m66592->timer, m66592_timer, 0);
        m66592->reg = reg;
 
        ret = request_irq(ires->start, m66592_irq, IRQF_SHARED,
index fb8c4bff584cb6f27229f2b074108f7884c6416c..dc35a54bad9088589339539f88c736bb9f63bf7c 100644 (file)
@@ -1854,9 +1854,9 @@ static irqreturn_t omap_udc_irq(int irq, void *_udc)
 #define PIO_OUT_TIMEOUT        (jiffies + HZ/3)
 #define HALF_FULL(f)   (!((f)&(UDC_NON_ISO_FIFO_FULL|UDC_NON_ISO_FIFO_EMPTY)))
 
-static void pio_out_timer(unsigned long _ep)
+static void pio_out_timer(struct timer_list *t)
 {
-       struct omap_ep  *ep = (void *) _ep;
+       struct omap_ep  *ep = from_timer(ep, t, timer);
        unsigned long   flags;
        u16             stat_flg;
 
@@ -2542,7 +2542,7 @@ omap_ep_setup(char *name, u8 addr, u8 type,
                }
                if (dbuf && addr)
                        epn_rxtx |= UDC_EPN_RX_DB;
-               setup_timer(&ep->timer, pio_out_timer, (unsigned long)ep);
+               timer_setup(&ep->timer, pio_out_timer, 0);
        }
        if (addr)
                epn_rxtx |= UDC_EPN_RX_VALID;
index 8f135d9fa245984e5f2a40108eb5bc159cb7d8fc..0e3f5faa000e93cca3349930111ea0072ed7989b 100644 (file)
@@ -1624,9 +1624,9 @@ static inline void clear_ep_state (struct pxa25x_udc *dev)
                nuke(&dev->ep[i], -ECONNABORTED);
 }
 
-static void udc_watchdog(unsigned long _dev)
+static void udc_watchdog(struct timer_list *t)
 {
-       struct pxa25x_udc       *dev = (void *)_dev;
+       struct pxa25x_udc       *dev = from_timer(dev, t, timer);
 
        local_irq_disable();
        if (dev->ep0state == EP0_STALL
@@ -2413,7 +2413,7 @@ static int pxa25x_udc_probe(struct platform_device *pdev)
                gpio_direction_output(dev->mach->gpio_pullup, 0);
        }
 
-       setup_timer(&dev->timer, udc_watchdog, (unsigned long)dev);
+       timer_setup(&dev->timer, udc_watchdog, 0);
 
        the_controller = dev;
        platform_set_drvdata(pdev, dev);
index 143122ed3c6646fdefb439daf1288cf3d4b4297a..a3ecce62662ba6cdc1e0f7ee65e90b2445537b56 100644 (file)
@@ -1514,9 +1514,9 @@ static irqreturn_t r8a66597_irq(int irq, void *_r8a66597)
        return IRQ_HANDLED;
 }
 
-static void r8a66597_timer(unsigned long _r8a66597)
+static void r8a66597_timer(struct timer_list *t)
 {
-       struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
+       struct r8a66597 *r8a66597 = from_timer(r8a66597, t, timer);
        unsigned long flags;
        u16 tmp;
 
@@ -1874,7 +1874,7 @@ static int r8a66597_probe(struct platform_device *pdev)
        r8a66597->gadget.max_speed = USB_SPEED_HIGH;
        r8a66597->gadget.name = udc_name;
 
-       setup_timer(&r8a66597->timer, r8a66597_timer, (unsigned long)r8a66597);
+       timer_setup(&r8a66597->timer, r8a66597_timer, 0);
        r8a66597->reg = reg;
 
        if (r8a66597->pdata->on_chip) {
index 10887e09e9bc0ce916df1eee3fe217421e8199b0..ee96763493332458da2397bc85a24e8dfa5b70e6 100644 (file)
@@ -80,7 +80,7 @@ static const char     hcd_name [] = "ohci_hcd";
 
 static void ohci_dump(struct ohci_hcd *ohci);
 static void ohci_stop(struct usb_hcd *hcd);
-static void io_watchdog_func(unsigned long _ohci);
+static void io_watchdog_func(struct timer_list *t);
 
 #include "ohci-hub.c"
 #include "ohci-dbg.c"
@@ -500,8 +500,7 @@ static int ohci_init (struct ohci_hcd *ohci)
        if (ohci->hcca)
                return 0;
 
-       setup_timer(&ohci->io_watchdog, io_watchdog_func,
-                       (unsigned long) ohci);
+       timer_setup(&ohci->io_watchdog, io_watchdog_func, 0);
 
        ohci->hcca = dma_alloc_coherent (hcd->self.controller,
                        sizeof(*ohci->hcca), &ohci->hcca_dma, GFP_KERNEL);
@@ -723,9 +722,9 @@ static int ohci_start(struct usb_hcd *hcd)
  * the unlink list.  As a result, URBs could never be dequeued and
  * endpoints could never be released.
  */
-static void io_watchdog_func(unsigned long _ohci)
+static void io_watchdog_func(struct timer_list *t)
 {
-       struct ohci_hcd *ohci = (struct ohci_hcd *) _ohci;
+       struct ohci_hcd *ohci = from_timer(ohci, t, io_watchdog);
        bool            takeback_all_pending = false;
        u32             status;
        u32             head;
index 0bf7759aae789e9705cc52e90fbb5dca41d15701..c5e6e8d0b5ef5fe6428c7838df74e015262ddbe0 100644 (file)
@@ -2539,9 +2539,9 @@ static irqreturn_t oxu_irq(struct usb_hcd *hcd)
        return ret;
 }
 
-static void oxu_watchdog(unsigned long param)
+static void oxu_watchdog(struct timer_list *t)
 {
-       struct oxu_hcd  *oxu = (struct oxu_hcd *) param;
+       struct oxu_hcd  *oxu = from_timer(oxu, t, watchdog);
        unsigned long flags;
 
        spin_lock_irqsave(&oxu->lock, flags);
@@ -2577,7 +2577,7 @@ static int oxu_hcd_init(struct usb_hcd *hcd)
 
        spin_lock_init(&oxu->lock);
 
-       setup_timer(&oxu->watchdog, oxu_watchdog, (unsigned long)oxu);
+       timer_setup(&oxu->watchdog, oxu_watchdog, 0);
 
        /*
         * hw default: 1K periodic list heads, one per frame.
index f3d9ba420a97b5a3d932fa51a0952df40d5480be..984892dd72f550a2de7dafac8a2d64ca8a0ab215 100644 (file)
@@ -1798,9 +1798,9 @@ static void r8a66597_td_timer(struct timer_list *t)
        spin_unlock_irqrestore(&r8a66597->lock, flags);
 }
 
-static void r8a66597_timer(unsigned long _r8a66597)
+static void r8a66597_timer(struct timer_list *t)
 {
-       struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
+       struct r8a66597 *r8a66597 = from_timer(r8a66597, t, rh_timer);
        unsigned long flags;
        int port;
 
@@ -2472,8 +2472,7 @@ static int r8a66597_probe(struct platform_device *pdev)
                r8a66597->max_root_hub = 2;
 
        spin_lock_init(&r8a66597->lock);
-       setup_timer(&r8a66597->rh_timer, r8a66597_timer,
-                   (unsigned long)r8a66597);
+       timer_setup(&r8a66597->rh_timer, r8a66597_timer, 0);
        r8a66597->reg = reg;
 
        /* make sure no interrupts are pending */
index 601fb00603cc1d4737f3cd0c3d238544447a4830..fa88a903fa2ea886e8f08e52e825049ae1b3864f 100644 (file)
@@ -1119,9 +1119,9 @@ sl811h_hub_descriptor (
 }
 
 static void
-sl811h_timer(unsigned long _sl811)
+sl811h_timer(struct timer_list *t)
 {
-       struct sl811    *sl811 = (void *) _sl811;
+       struct sl811    *sl811 = from_timer(sl811, t, timer);
        unsigned long   flags;
        u8              irqstat;
        u8              signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE;
@@ -1692,7 +1692,7 @@ sl811h_probe(struct platform_device *dev)
        spin_lock_init(&sl811->lock);
        INIT_LIST_HEAD(&sl811->async);
        sl811->board = dev_get_platdata(&dev->dev);
-       setup_timer(&sl811->timer, sl811h_timer, (unsigned long)sl811);
+       timer_setup(&sl811->timer, sl811h_timer, 0);
        sl811->addr_reg = addr_reg;
        sl811->data_reg = data_reg;
 
index babeefd84ffd06318f724abb835f3e537649d195..f5c90217777acb69aeb7a0623bffadeb264d582a 100644 (file)
@@ -585,8 +585,7 @@ static int uhci_start(struct usb_hcd *hcd)
                hcd->self.sg_tablesize = ~0;
 
        spin_lock_init(&uhci->lock);
-       setup_timer(&uhci->fsbr_timer, uhci_fsbr_timeout,
-                       (unsigned long) uhci);
+       timer_setup(&uhci->fsbr_timer, uhci_fsbr_timeout, 0);
        INIT_LIST_HEAD(&uhci->idle_qh_list);
        init_waitqueue_head(&uhci->waitqh);
 
index 49d4edc03cc28bafef6ed4e20a0427c75148b4e7..d40438238938c0ecc04b58e72493ed426799b53d 100644 (file)
@@ -90,9 +90,9 @@ static void uhci_urbp_wants_fsbr(struct uhci_hcd *uhci, struct urb_priv *urbp)
        }
 }
 
-static void uhci_fsbr_timeout(unsigned long _uhci)
+static void uhci_fsbr_timeout(struct timer_list *t)
 {
-       struct uhci_hcd *uhci = (struct uhci_hcd *) _uhci;
+       struct uhci_hcd *uhci = from_timer(uhci, t, fsbr_timer);
        unsigned long flags;
 
        spin_lock_irqsave(&uhci->lock, flags);
index 327ba8b8a98b8db77252b419d13ff74fcebd7df5..2424d3020ca364b22792376e36c21462af3b2f62 100644 (file)
@@ -395,14 +395,14 @@ static inline void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
 
 #endif
 
-static void compliance_mode_recovery(unsigned long arg)
+static void compliance_mode_recovery(struct timer_list *t)
 {
        struct xhci_hcd *xhci;
        struct usb_hcd *hcd;
        u32 temp;
        int i;
 
-       xhci = (struct xhci_hcd *)arg;
+       xhci = from_timer(xhci, t, comp_mode_recovery_timer);
 
        for (i = 0; i < xhci->num_usb3_ports; i++) {
                temp = readl(xhci->usb3_ports[i]);
@@ -443,8 +443,8 @@ static void compliance_mode_recovery(unsigned long arg)
 static void compliance_mode_recovery_timer_init(struct xhci_hcd *xhci)
 {
        xhci->port_status_u0 = 0;
-       setup_timer(&xhci->comp_mode_recovery_timer,
-                   compliance_mode_recovery, (unsigned long)xhci);
+       timer_setup(&xhci->comp_mode_recovery_timer, compliance_mode_recovery,
+                   0);
        xhci->comp_mode_recovery_timer.expires = jiffies +
                        msecs_to_jiffies(COMP_MODE_RCVRY_MSECS);
 
index a859c2d33c29137fd9c604f75d3f0b03c10d7cc5..fdceb46d9fc61a0c5eea2f113abd494dc4cc693b 100644 (file)
@@ -555,9 +555,9 @@ static void mos7840_set_led_sync(struct usb_serial_port *port, __u16 reg,
                        val, reg, NULL, 0, MOS_WDR_TIMEOUT);
 }
 
-static void mos7840_led_off(unsigned long arg)
+static void mos7840_led_off(struct timer_list *t)
 {
-       struct moschip_port *mcs = (struct moschip_port *) arg;
+       struct moschip_port *mcs = from_timer(mcs, t, led_timer1);
 
        /* Turn off LED */
        mos7840_set_led_async(mcs, 0x0300, MODEM_CONTROL_REGISTER);
@@ -565,9 +565,9 @@ static void mos7840_led_off(unsigned long arg)
                                jiffies + msecs_to_jiffies(LED_OFF_MS));
 }
 
-static void mos7840_led_flag_off(unsigned long arg)
+static void mos7840_led_flag_off(struct timer_list *t)
 {
-       struct moschip_port *mcs = (struct moschip_port *) arg;
+       struct moschip_port *mcs = from_timer(mcs, t, led_timer2);
 
        clear_bit_unlock(MOS7840_FLAG_LED_BUSY, &mcs->flags);
 }
@@ -2289,12 +2289,11 @@ static int mos7840_port_probe(struct usb_serial_port *port)
                        goto error;
                }
 
-               setup_timer(&mos7840_port->led_timer1, mos7840_led_off,
-                           (unsigned long)mos7840_port);
+               timer_setup(&mos7840_port->led_timer1, mos7840_led_off, 0);
                mos7840_port->led_timer1.expires =
                        jiffies + msecs_to_jiffies(LED_ON_MS);
-               setup_timer(&mos7840_port->led_timer2, mos7840_led_flag_off,
-                           (unsigned long)mos7840_port);
+               timer_setup(&mos7840_port->led_timer2, mos7840_led_flag_off,
+                           0);
                mos7840_port->led_timer2.expires =
                        jiffies + msecs_to_jiffies(LED_OFF_MS);
 
index 48e2e32c97e8a3d912ddb594b8c4c45b6b371749..31b0244419387c52ec5dcd13138b4d6a0bd063f7 100644 (file)
@@ -751,9 +751,9 @@ static void rts51x_modi_suspend_timer(struct rts51x_chip *chip)
        mod_timer(&chip->rts51x_suspend_timer, chip->timer_expires);
 }
 
-static void rts51x_suspend_timer_fn(unsigned long data)
+static void rts51x_suspend_timer_fn(struct timer_list *t)
 {
-       struct rts51x_chip *chip = (struct rts51x_chip *)data;
+       struct rts51x_chip *chip = from_timer(chip, t, rts51x_suspend_timer);
        struct us_data *us = chip->us;
 
        switch (rts51x_get_stat(chip)) {
@@ -917,8 +917,7 @@ static int realtek_cr_autosuspend_setup(struct us_data *us)
        us->proto_handler = rts51x_invoke_transport;
 
        chip->timer_expires = 0;
-       setup_timer(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn,
-                       (unsigned long)chip);
+       timer_setup(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn, 0);
        fw5895_init(us);
 
        /* enable autosuspend function of the usb device */
index 38d0504a1bbc50a29a3d639a772648ef385e5692..625f706b8160c27067b106f50704d137c361cf78 100644 (file)
@@ -603,9 +603,9 @@ static void uwb_cnflt_update_work(struct work_struct *work)
        mutex_unlock(&rc->rsvs_mutex);
 }
 
-static void uwb_cnflt_timer(unsigned long arg)
+static void uwb_cnflt_timer(struct timer_list *t)
 {
-       struct uwb_cnflt_alien *cnflt = (struct uwb_cnflt_alien *)arg;
+       struct uwb_cnflt_alien *cnflt = from_timer(cnflt, t, timer);
 
        queue_work(cnflt->rc->rsv_workq, &cnflt->cnflt_update_work);
 }
@@ -642,7 +642,7 @@ static void uwb_drp_handle_alien_drp(struct uwb_rc *rc, struct uwb_ie_drp *drp_i
        }
 
        INIT_LIST_HEAD(&cnflt->rc_node);
-       setup_timer(&cnflt->timer, uwb_cnflt_timer, (unsigned long)cnflt);
+       timer_setup(&cnflt->timer, uwb_cnflt_timer, 0);
 
        cnflt->rc = rc;
        INIT_WORK(&cnflt->cnflt_update_work, uwb_cnflt_update_work);
index 36b5cb62c15dba7b734ffa61460fdeb3a31e79cc..fbdca728bd9f8b947fa9af19103232a0850655c7 100644 (file)
@@ -115,7 +115,7 @@ struct uwb_rc_neh {
        struct list_head list_node;
 };
 
-static void uwb_rc_neh_timer(unsigned long arg);
+static void uwb_rc_neh_timer(struct timer_list *t);
 
 static void uwb_rc_neh_release(struct kref *kref)
 {
@@ -223,7 +223,7 @@ struct uwb_rc_neh *uwb_rc_neh_add(struct uwb_rc *rc, struct uwb_rccb *cmd,
 
        kref_init(&neh->kref);
        INIT_LIST_HEAD(&neh->list_node);
-       setup_timer(&neh->timer, uwb_rc_neh_timer, (unsigned long)neh);
+       timer_setup(&neh->timer, uwb_rc_neh_timer, 0);
 
        neh->rc = rc;
        neh->evt_type = expected_type;
@@ -565,9 +565,9 @@ void uwb_rc_neh_error(struct uwb_rc *rc, int error)
 EXPORT_SYMBOL_GPL(uwb_rc_neh_error);
 
 
-static void uwb_rc_neh_timer(unsigned long arg)
+static void uwb_rc_neh_timer(struct timer_list *t)
 {
-       struct uwb_rc_neh *neh = (struct uwb_rc_neh *)arg;
+       struct uwb_rc_neh *neh = from_timer(neh, t, timer);
        struct uwb_rc *rc = neh->rc;
        unsigned long flags;
 
index f5e27247a38feac0a0294a57fa49ad0a260be637..fe25a8cc6fa10e5ce35ec218c29a16a8f5433658 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "uwb-internal.h"
 
-static void uwb_rsv_timer(unsigned long arg);
+static void uwb_rsv_timer(struct timer_list *t);
 
 static const char *rsv_states[] = {
        [UWB_RSV_STATE_NONE]                 = "none            ",
@@ -198,9 +198,9 @@ static void uwb_rsv_put_stream(struct uwb_rsv *rsv)
        dev_dbg(dev, "put stream %d\n", rsv->stream);
 }
 
-void uwb_rsv_backoff_win_timer(unsigned long arg)
+void uwb_rsv_backoff_win_timer(struct timer_list *t)
 {
-       struct uwb_drp_backoff_win *bow = (struct uwb_drp_backoff_win *)arg;
+       struct uwb_drp_backoff_win *bow = from_timer(bow, t, timer);
        struct uwb_rc *rc = container_of(bow, struct uwb_rc, bow);
        struct device *dev = &rc->uwb_dev.dev;
 
@@ -470,7 +470,7 @@ static struct uwb_rsv *uwb_rsv_alloc(struct uwb_rc *rc)
        INIT_LIST_HEAD(&rsv->rc_node);
        INIT_LIST_HEAD(&rsv->pal_node);
        kref_init(&rsv->kref);
-       setup_timer(&rsv->timer, uwb_rsv_timer, (unsigned long)rsv);
+       timer_setup(&rsv->timer, uwb_rsv_timer, 0);
 
        rsv->rc = rc;
        INIT_WORK(&rsv->handle_timeout_work, uwb_rsv_handle_timeout_work);
@@ -939,9 +939,9 @@ static void uwb_rsv_alien_bp_work(struct work_struct *work)
        mutex_unlock(&rc->rsvs_mutex);
 }
 
-static void uwb_rsv_timer(unsigned long arg)
+static void uwb_rsv_timer(struct timer_list *t)
 {
-       struct uwb_rsv *rsv = (struct uwb_rsv *)arg;
+       struct uwb_rsv *rsv = from_timer(rsv, t, timer);
 
        queue_work(rsv->rc->rsv_workq, &rsv->handle_timeout_work);
 }
@@ -987,8 +987,7 @@ void uwb_rsv_init(struct uwb_rc *rc)
        rc->bow.can_reserve_extra_mases = true;
        rc->bow.total_expired = 0;
        rc->bow.window = UWB_DRP_BACKOFF_WIN_MIN >> 1;
-       setup_timer(&rc->bow.timer, uwb_rsv_backoff_win_timer,
-                       (unsigned long)&rc->bow);
+       timer_setup(&rc->bow.timer, uwb_rsv_backoff_win_timer, 0);
 
        bitmap_complement(rc->uwb_dev.streams, rc->uwb_dev.streams, UWB_NUM_STREAMS);
 }
index 353c0555a1f5dbd6d7e884ca24544ff4226550f4..91326ce093a78fd43572f6c6ad39581c24bb241c 100644 (file)
@@ -329,7 +329,7 @@ void uwb_rsv_put(struct uwb_rsv *rsv);
 bool uwb_rsv_has_two_drp_ies(struct uwb_rsv *rsv);
 void uwb_rsv_dump(char *text, struct uwb_rsv *rsv);
 int uwb_rsv_try_move(struct uwb_rsv *rsv, struct uwb_mas_bm *available);
-void uwb_rsv_backoff_win_timer(unsigned long arg);
+void uwb_rsv_backoff_win_timer(struct timer_list *t);
 void uwb_rsv_backoff_win_increment(struct uwb_rc *rc);
 int uwb_rsv_status(struct uwb_rsv *rsv);
 int uwb_rsv_companion_status(struct uwb_rsv *rsv);
index 7e6acaf3ece495ac9056bcd74532c994feb8ba0f..88c05d0448b2f937494b1c1bd42be6fc3a998192 100644 (file)
@@ -120,9 +120,9 @@ static inline void at91_wdt_reset(struct at91wdt *wdt)
 /*
  * Timer tick
  */
-static void at91_ping(unsigned long data)
+static void at91_ping(struct timer_list *t)
 {
-       struct at91wdt *wdt = (struct at91wdt *)data;
+       struct at91wdt *wdt = from_timer(wdt, t, timer);
        if (time_before(jiffies, wdt->next_heartbeat) ||
            !watchdog_active(&wdt->wdd)) {
                at91_wdt_reset(wdt);
@@ -222,7 +222,7 @@ static int at91_wdt_init(struct platform_device *pdev, struct at91wdt *wdt)
                         "watchdog already configured differently (mr = %x expecting %x)\n",
                         tmp & wdt->mr_mask, wdt->mr & wdt->mr_mask);
 
-       setup_timer(&wdt->timer, at91_ping, (unsigned long)wdt);
+       timer_setup(&wdt->timer, at91_ping, 0);
 
        /*
         * Use min_heartbeat the first time to avoid spurious watchdog reset:
index 236582809336bf7e50eb9269331ec457b41a9e9d..f41b756d6dd552722d0643ab9bd9336da97fd054 100644 (file)
@@ -106,9 +106,9 @@ static const struct watchdog_ops bcm47xx_wdt_hard_ops = {
        .restart        = bcm47xx_wdt_restart,
 };
 
-static void bcm47xx_wdt_soft_timer_tick(unsigned long data)
+static void bcm47xx_wdt_soft_timer_tick(struct timer_list *t)
 {
-       struct bcm47xx_wdt *wdt = (struct bcm47xx_wdt *)data;
+       struct bcm47xx_wdt *wdt = from_timer(wdt, t, soft_timer);
        u32 next_tick = min(wdt->wdd.timeout * 1000, wdt->max_timer_ms);
 
        if (!atomic_dec_and_test(&wdt->soft_ticks)) {
@@ -133,7 +133,7 @@ static int bcm47xx_wdt_soft_start(struct watchdog_device *wdd)
        struct bcm47xx_wdt *wdt = bcm47xx_wdt_get(wdd);
 
        bcm47xx_wdt_soft_keepalive(wdd);
-       bcm47xx_wdt_soft_timer_tick((unsigned long)wdt);
+       bcm47xx_wdt_soft_timer_tick(&wdt->soft_timer);
 
        return 0;
 }
@@ -190,8 +190,7 @@ static int bcm47xx_wdt_probe(struct platform_device *pdev)
 
        if (soft) {
                wdt->wdd.ops = &bcm47xx_wdt_soft_ops;
-               setup_timer(&wdt->soft_timer, bcm47xx_wdt_soft_timer_tick,
-                           (long unsigned int)wdt);
+               timer_setup(&wdt->soft_timer, bcm47xx_wdt_soft_timer_tick, 0);
        } else {
                wdt->wdd.ops = &bcm47xx_wdt_hard_ops;
        }
index ab26fd90729ec664a4fb2caf8a79582ee0108769..8555afc70f9bf37552e8e1c76575edb7f97e93ad 100644 (file)
@@ -77,7 +77,7 @@ static void bcm63xx_wdt_isr(void *data)
        die(PFX " fire", regs);
 }
 
-static void bcm63xx_timer_tick(unsigned long unused)
+static void bcm63xx_timer_tick(struct timer_list *unused)
 {
        if (!atomic_dec_and_test(&bcm63xx_wdt_device.ticks)) {
                bcm63xx_wdt_hw_start();
@@ -240,7 +240,7 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)
        int ret;
        struct resource *r;
 
-       setup_timer(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0L);
+       timer_setup(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0);
 
        r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!r) {
index 6c3f78e45c265da4b6f9cfefdb8af16a96b30874..6cfb102c397c9454697d7e6b301b779e4afdcd37 100644 (file)
@@ -69,7 +69,7 @@ static struct {
 
 /* generic helper functions */
 
-static void cpu5wdt_trigger(unsigned long unused)
+static void cpu5wdt_trigger(struct timer_list *unused)
 {
        if (verbose > 2)
                pr_debug("trigger at %i ticks\n", ticks);
@@ -224,7 +224,7 @@ static int cpu5wdt_init(void)
 
        init_completion(&cpu5wdt_device.stop);
        cpu5wdt_device.queue = 0;
-       setup_timer(&cpu5wdt_device.timer, cpu5wdt_trigger, 0);
+       timer_setup(&cpu5wdt_device.timer, cpu5wdt_trigger, 0);
        cpu5wdt_device.default_ticks = ticks;
 
        if (!request_region(port, CPU5WDT_EXTENT, PFX)) {
index 366e5c7e650bfd4b3da3fddcebd9bc9ab86a23ac..6610e9217dbc237a7e5352df3cb9587a6770be67 100644 (file)
@@ -80,9 +80,9 @@ static void mpc8xxx_wdt_keepalive(struct mpc8xxx_wdt_ddata *ddata)
        spin_unlock(&ddata->lock);
 }
 
-static void mpc8xxx_wdt_timer_ping(unsigned long arg)
+static void mpc8xxx_wdt_timer_ping(struct timer_list *t)
 {
-       struct mpc8xxx_wdt_ddata *ddata = (void *)arg;
+       struct mpc8xxx_wdt_ddata *ddata = from_timer(ddata, t, timer);
 
        mpc8xxx_wdt_keepalive(ddata);
        /* We're pinging it twice faster than needed, just to be sure. */
@@ -173,8 +173,7 @@ static int mpc8xxx_wdt_probe(struct platform_device *ofdev)
        }
 
        spin_lock_init(&ddata->lock);
-       setup_timer(&ddata->timer, mpc8xxx_wdt_timer_ping,
-                   (unsigned long)ddata);
+       timer_setup(&ddata->timer, mpc8xxx_wdt_timer_ping, 0);
 
        ddata->wdd.info = &mpc8xxx_wdt_info,
        ddata->wdd.ops = &mpc8xxx_wdt_ops,
index ff27c4ac96e442dadec4129ecb98931ddc2ca150..ca360d204548fbd1f13a8750a9bbe6d091f9eaf4 100644 (file)
@@ -68,7 +68,7 @@ static struct {
        unsigned int gstate;
 } mtx1_wdt_device;
 
-static void mtx1_wdt_trigger(unsigned long unused)
+static void mtx1_wdt_trigger(struct timer_list *unused)
 {
        spin_lock(&mtx1_wdt_device.lock);
        if (mtx1_wdt_device.running)
@@ -219,7 +219,7 @@ static int mtx1_wdt_probe(struct platform_device *pdev)
        init_completion(&mtx1_wdt_device.stop);
        mtx1_wdt_device.queue = 0;
        clear_bit(0, &mtx1_wdt_device.inuse);
-       setup_timer(&mtx1_wdt_device.timer, mtx1_wdt_trigger, 0L);
+       timer_setup(&mtx1_wdt_device.timer, mtx1_wdt_trigger, 0);
        mtx1_wdt_device.default_ticks = ticks;
 
        ret = misc_register(&mtx1_wdt_misc);
index d5bed78c4d9fbbec03ec2268e391676b1996d8ca..830bd04ff911f4f6ebd00bdadd9ff727405a5eeb 100644 (file)
@@ -216,7 +216,7 @@ static ssize_t nuc900_wdt_write(struct file *file, const char __user *data,
        return len;
 }
 
-static void nuc900_wdt_timer_ping(unsigned long data)
+static void nuc900_wdt_timer_ping(struct timer_list *unused)
 {
        if (time_before(jiffies, nuc900_wdt->next_heartbeat)) {
                nuc900_wdt_keepalive();
@@ -267,7 +267,7 @@ static int nuc900wdt_probe(struct platform_device *pdev)
 
        clk_enable(nuc900_wdt->wdt_clock);
 
-       setup_timer(&nuc900_wdt->timer, nuc900_wdt_timer_ping, 0);
+       timer_setup(&nuc900_wdt->timer, nuc900_wdt_timer_ping, 0);
 
        ret = misc_register(&nuc900wdt_miscdev);
        if (ret) {
index 3ad5206d79357e8862078e16426895811aa3d87c..b72ce68eacd3daa577c4a5fe2156e19e52545290 100644 (file)
@@ -367,7 +367,7 @@ static void pcwd_show_card_info(void)
                pr_info("No previous trip detected - Cold boot or reset\n");
 }
 
-static void pcwd_timer_ping(unsigned long data)
+static void pcwd_timer_ping(struct timer_list *unused)
 {
        int wdrst_stat;
 
@@ -893,7 +893,7 @@ static int pcwd_isa_probe(struct device *dev, unsigned int id)
        /* clear the "card caused reboot" flag */
        pcwd_clear_status();
 
-       setup_timer(&pcwd_private.timer, pcwd_timer_ping, 0);
+       timer_setup(&pcwd_private.timer, pcwd_timer_ping, 0);
 
        /*  Disable the board  */
        pcwd_stop();
index e35cf5e87907c3f98520ab0440d6088e6976f803..e0a6f8c0f03cde84a32e5744a1f3ee24fd7cbd00 100644 (file)
@@ -85,7 +85,7 @@ static inline void pikawdt_reset(void)
 /*
  * Timer tick
  */
-static void pikawdt_ping(unsigned long data)
+static void pikawdt_ping(struct timer_list *unused)
 {
        if (time_before(jiffies, pikawdt_private.next_heartbeat) ||
                        (!nowayout && !pikawdt_private.open)) {
@@ -269,7 +269,7 @@ static int __init pikawdt_init(void)
 
        iounmap(fpga);
 
-       setup_timer(&pikawdt_private.timer, pikawdt_ping, 0);
+       timer_setup(&pikawdt_private.timer, pikawdt_ping, 0);
 
        ret = misc_register(&pikawdt_miscdev);
        if (ret) {
index 47a8f1b1087d4f5a310ee9f01b67bce406251666..a281aa84bfb1402ff2f7567289902a2589ad223f 100644 (file)
@@ -67,7 +67,7 @@ static struct {
 
 /* generic helper functions */
 
-static void rdc321x_wdt_trigger(unsigned long unused)
+static void rdc321x_wdt_trigger(struct timer_list *unused)
 {
        unsigned long flags;
        u32 val;
@@ -262,7 +262,7 @@ static int rdc321x_wdt_probe(struct platform_device *pdev)
 
        clear_bit(0, &rdc321x_wdt_device.inuse);
 
-       setup_timer(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0);
+       timer_setup(&rdc321x_wdt_device.timer, rdc321x_wdt_trigger, 0);
 
        rdc321x_wdt_device.default_ticks = ticks;
 
index 517a733175ef84c8f8a7be3f79d8b97a3b6eed9e..a7d6425db807ff9d95c91aa24be73bbdfa15a9bd 100644 (file)
@@ -175,9 +175,9 @@ static int sh_wdt_set_heartbeat(struct watchdog_device *wdt_dev, unsigned t)
        return 0;
 }
 
-static void sh_wdt_ping(unsigned long data)
+static void sh_wdt_ping(struct timer_list *t)
 {
-       struct sh_wdt *wdt = (struct sh_wdt *)data;
+       struct sh_wdt *wdt = from_timer(wdt, t, timer);
        unsigned long flags;
 
        spin_lock_irqsave(&wdt->lock, flags);
@@ -275,7 +275,7 @@ static int sh_wdt_probe(struct platform_device *pdev)
                return rc;
        }
 
-       setup_timer(&wdt->timer, sh_wdt_ping, (unsigned long)wdt);
+       timer_setup(&wdt->timer, sh_wdt_ping, 0);
        wdt->timer.expires      = next_ping_period(clock_division_ratio);
 
        dev_info(&pdev->dev, "initialized.\n");
index 8d779227370ab1d121fdc2fc6f546f7844e95a5b..bebe59feca5873a766cd28becd269cc576cdfc6d 100644 (file)
@@ -140,7 +140,7 @@ static void o2net_rx_until_empty(struct work_struct *work);
 static void o2net_shutdown_sc(struct work_struct *work);
 static void o2net_listen_data_ready(struct sock *sk);
 static void o2net_sc_send_keep_req(struct work_struct *work);
-static void o2net_idle_timer(unsigned long data);
+static void o2net_idle_timer(struct timer_list *t);
 static void o2net_sc_postpone_idle(struct o2net_sock_container *sc);
 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc);
 
@@ -450,8 +450,7 @@ static struct o2net_sock_container *sc_alloc(struct o2nm_node *node)
        INIT_WORK(&sc->sc_shutdown_work, o2net_shutdown_sc);
        INIT_DELAYED_WORK(&sc->sc_keepalive_work, o2net_sc_send_keep_req);
 
-       setup_timer(&sc->sc_idle_timeout, o2net_idle_timer,
-                   (unsigned long)sc);
+       timer_setup(&sc->sc_idle_timeout, o2net_idle_timer, 0);
 
        sclog(sc, "alloced\n");
 
@@ -1517,9 +1516,9 @@ static void o2net_sc_send_keep_req(struct work_struct *work)
 /* socket shutdown does a del_timer_sync against this as it tears down.
  * we can't start this timer until we've got to the point in sc buildup
  * where shutdown is going to be involved */
-static void o2net_idle_timer(unsigned long data)
+static void o2net_idle_timer(struct timer_list *t)
 {
-       struct o2net_sock_container *sc = (struct o2net_sock_container *)data;
+       struct o2net_sock_container *sc = from_timer(sc, t, sc_idle_timeout);
        struct o2net_node *nn = o2net_nn_from_num(sc->sc_node->nd_num);
 #ifdef CONFIG_DEBUG_FS
        unsigned long msecs = ktime_to_ms(ktime_get()) -
index f262c9a4e70ab76d5ee5e748542845cb99e8eaff..57c0074d50cc485b706579aaa616e4a004775a8e 100644 (file)
@@ -288,9 +288,9 @@ static void invoke_padata_reorder(struct work_struct *work)
        local_bh_enable();
 }
 
-static void padata_reorder_timer(unsigned long arg)
+static void padata_reorder_timer(struct timer_list *t)
 {
-       struct parallel_data *pd = (struct parallel_data *)arg;
+       struct parallel_data *pd = from_timer(pd, t, timer);
        unsigned int weight;
        int target_cpu, cpu;
 
@@ -485,7 +485,7 @@ static struct parallel_data *padata_alloc_pd(struct padata_instance *pinst,
 
        padata_init_pqueues(pd);
        padata_init_squeues(pd);
-       setup_timer(&pd->timer, padata_reorder_timer, (unsigned long)pd);
+       timer_setup(&pd->timer, padata_reorder_timer, 0);
        atomic_set(&pd->seq_nr, -1);
        atomic_set(&pd->reorder_objects, 0);
        atomic_set(&pd->refcnt, 0);
index 5b51d5ba2a857791d55cda2670c27a90086c9b01..65f9e3f24dde8bc8f908f4d68cda2fa4f39843ce 100644 (file)
@@ -171,7 +171,7 @@ void clocksource_mark_unstable(struct clocksource *cs)
        spin_unlock_irqrestore(&watchdog_lock, flags);
 }
 
-static void clocksource_watchdog(unsigned long data)
+static void clocksource_watchdog(struct timer_list *unused)
 {
        struct clocksource *cs;
        u64 csnow, wdnow, cslast, wdlast, delta;
@@ -290,7 +290,7 @@ static inline void clocksource_start_watchdog(void)
 {
        if (watchdog_running || !watchdog || list_empty(&watchdog_list))
                return;
-       setup_timer(&watchdog_timer, clocksource_watchdog, 0UL);
+       timer_setup(&watchdog_timer, clocksource_watchdog, 0);
        watchdog_timer.expires = jiffies + WATCHDOG_INTERVAL;
        add_timer_on(&watchdog_timer, cpumask_first(cpu_online_mask));
        watchdog_running = 1;
index 2dac647ff4201fc1dfcf98d05b398422fea7d6d5..7f50d47470bd450566b448b0a3e6ad6fe6d0a000 100644 (file)
@@ -401,9 +401,9 @@ static void garp_join_timer_arm(struct garp_applicant *app)
        mod_timer(&app->join_timer, jiffies + delay);
 }
 
-static void garp_join_timer(unsigned long data)
+static void garp_join_timer(struct timer_list *t)
 {
-       struct garp_applicant *app = (struct garp_applicant *)data;
+       struct garp_applicant *app = from_timer(app, t, join_timer);
 
        spin_lock(&app->lock);
        garp_gid_event(app, GARP_EVENT_TRANSMIT_PDU);
@@ -584,7 +584,7 @@ int garp_init_applicant(struct net_device *dev, struct garp_application *appl)
        spin_lock_init(&app->lock);
        skb_queue_head_init(&app->queue);
        rcu_assign_pointer(dev->garp_port->applicants[appl->type], app);
-       setup_timer(&app->join_timer, garp_join_timer, (unsigned long)app);
+       timer_setup(&app->join_timer, garp_join_timer, 0);
        garp_join_timer_arm(app);
        return 0;
 
index be4dd31653474fbe806d17458773cc587aa56606..a808dd5bbb27a7ff84a1457315dad7d21e87e3c9 100644 (file)
@@ -586,9 +586,9 @@ static void mrp_join_timer_arm(struct mrp_applicant *app)
        mod_timer(&app->join_timer, jiffies + delay);
 }
 
-static void mrp_join_timer(unsigned long data)
+static void mrp_join_timer(struct timer_list *t)
 {
-       struct mrp_applicant *app = (struct mrp_applicant *)data;
+       struct mrp_applicant *app = from_timer(app, t, join_timer);
 
        spin_lock(&app->lock);
        mrp_mad_event(app, MRP_EVENT_TX);
@@ -605,9 +605,9 @@ static void mrp_periodic_timer_arm(struct mrp_applicant *app)
                  jiffies + msecs_to_jiffies(mrp_periodic_time));
 }
 
-static void mrp_periodic_timer(unsigned long data)
+static void mrp_periodic_timer(struct timer_list *t)
 {
-       struct mrp_applicant *app = (struct mrp_applicant *)data;
+       struct mrp_applicant *app = from_timer(app, t, periodic_timer);
 
        spin_lock(&app->lock);
        mrp_mad_event(app, MRP_EVENT_PERIODIC);
@@ -865,10 +865,9 @@ int mrp_init_applicant(struct net_device *dev, struct mrp_application *appl)
        spin_lock_init(&app->lock);
        skb_queue_head_init(&app->queue);
        rcu_assign_pointer(dev->mrp_port->applicants[appl->type], app);
-       setup_timer(&app->join_timer, mrp_join_timer, (unsigned long)app);
+       timer_setup(&app->join_timer, mrp_join_timer, 0);
        mrp_join_timer_arm(app);
-       setup_timer(&app->periodic_timer, mrp_periodic_timer,
-                   (unsigned long)app);
+       timer_setup(&app->periodic_timer, mrp_periodic_timer, 0);
        mrp_periodic_timer_arm(app);
        return 0;
 
index 8ad3ec2610b6499b92b2f3bc97ac02d2d043dd45..309d7dbb36e8476cff412b6be73f93926cf1ec95 100644 (file)
@@ -310,7 +310,7 @@ static void __aarp_expire_device(struct aarp_entry **n, struct net_device *dev)
 }
 
 /* Handle the timer event */
-static void aarp_expire_timeout(unsigned long unused)
+static void aarp_expire_timeout(struct timer_list *unused)
 {
        int ct;
 
@@ -884,7 +884,7 @@ void __init aarp_proto_init(void)
        aarp_dl = register_snap_client(aarp_snap_id, aarp_rcv);
        if (!aarp_dl)
                printk(KERN_CRIT "Unable to register AARP with SNAP.\n");
-       setup_timer(&aarp_timer, aarp_expire_timeout, 0);
+       timer_setup(&aarp_timer, aarp_expire_timeout, 0);
        aarp_timer.expires  = jiffies + sysctl_aarp_expiry_time;
        add_timer(&aarp_timer);
        register_netdevice_notifier(&aarp_notifier);
index 5d035c1f1156e45540a6bf935341e5799b11ca85..03a9fc0771c084f04ad782c15a502bca13301e2b 100644 (file)
@@ -158,9 +158,9 @@ found:
        return s;
 }
 
-static void atalk_destroy_timer(unsigned long data)
+static void atalk_destroy_timer(struct timer_list *t)
 {
-       struct sock *sk = (struct sock *)data;
+       struct sock *sk = from_timer(sk, t, sk_timer);
 
        if (sk_has_allocations(sk)) {
                sk->sk_timer.expires = jiffies + SOCK_DESTROY_TIME;
@@ -175,8 +175,7 @@ static inline void atalk_destroy_socket(struct sock *sk)
        skb_queue_purge(&sk->sk_receive_queue);
 
        if (sk_has_allocations(sk)) {
-               setup_timer(&sk->sk_timer, atalk_destroy_timer,
-                               (unsigned long)sk);
+               timer_setup(&sk->sk_timer, atalk_destroy_timer, 0);
                sk->sk_timer.expires    = jiffies + SOCK_DESTROY_TIME;
                add_timer(&sk->sk_timer);
        } else
index 4b90033f35a851eb33612a4e09d39de6fc8066ad..15cd2139381e17f0b501dd5294631a1a3315c587 100644 (file)
@@ -488,9 +488,9 @@ static void batadv_tp_reset_sender_timer(struct batadv_tp_vars *tp_vars)
  * Switch to Slow Start, set the ss_threshold to half of the current cwnd and
  * reset the cwnd to 3*MSS
  */
-static void batadv_tp_sender_timeout(unsigned long arg)
+static void batadv_tp_sender_timeout(struct timer_list *t)
 {
-       struct batadv_tp_vars *tp_vars = (struct batadv_tp_vars *)arg;
+       struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer);
        struct batadv_priv *bat_priv = tp_vars->bat_priv;
 
        if (atomic_read(&tp_vars->sending) == 0)
@@ -1020,8 +1020,7 @@ void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst,
        atomic64_set(&tp_vars->tot_sent, 0);
 
        kref_get(&tp_vars->refcount);
-       setup_timer(&tp_vars->timer, batadv_tp_sender_timeout,
-                   (unsigned long)tp_vars);
+       timer_setup(&tp_vars->timer, batadv_tp_sender_timeout, 0);
 
        tp_vars->bat_priv = bat_priv;
        tp_vars->start_time = jiffies;
@@ -1109,9 +1108,9 @@ static void batadv_tp_reset_receiver_timer(struct batadv_tp_vars *tp_vars)
  *  reached without received ack
  * @arg: address of the related tp_vars
  */
-static void batadv_tp_receiver_shutdown(unsigned long arg)
+static void batadv_tp_receiver_shutdown(struct timer_list *t)
 {
-       struct batadv_tp_vars *tp_vars = (struct batadv_tp_vars *)arg;
+       struct batadv_tp_vars *tp_vars = from_timer(tp_vars, t, timer);
        struct batadv_tp_unacked *un, *safe;
        struct batadv_priv *bat_priv;
 
@@ -1373,8 +1372,7 @@ batadv_tp_init_recv(struct batadv_priv *bat_priv,
        hlist_add_head_rcu(&tp_vars->list, &bat_priv->tp_list);
 
        kref_get(&tp_vars->refcount);
-       setup_timer(&tp_vars->timer, batadv_tp_receiver_shutdown,
-                   (unsigned long)tp_vars);
+       timer_setup(&tp_vars->timer, batadv_tp_receiver_shutdown, 0);
 
        batadv_tp_reset_receiver_timer(tp_vars);
 
index 8112893037bdc0afee1247dad7ac6433ac0168bb..f2cec70d520cc2b29606f51a5c2b3c19a7fdc838 100644 (file)
@@ -398,9 +398,9 @@ static int hidp_raw_request(struct hid_device *hid, unsigned char reportnum,
        }
 }
 
-static void hidp_idle_timeout(unsigned long arg)
+static void hidp_idle_timeout(struct timer_list *t)
 {
-       struct hidp_session *session = (struct hidp_session *) arg;
+       struct hidp_session *session = from_timer(session, t, timer);
 
        /* The HIDP user-space API only contains calls to add and remove
         * devices. There is no way to forward events of any kind. Therefore,
@@ -944,8 +944,7 @@ static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
 
        /* device management */
        INIT_WORK(&session->dev_init, hidp_session_dev_work);
-       setup_timer(&session->timer, hidp_idle_timeout,
-                   (unsigned long)session);
+       timer_setup(&session->timer, hidp_idle_timeout, 0);
 
        /* session data */
        mutex_init(&session->report_mutex);
index 4a0b41d75c84833c89fdcd8a4387597cb99df0d2..b98225d65e87a34de2773c41a29ffc15a19db471 100644 (file)
@@ -233,9 +233,9 @@ static int rfcomm_check_security(struct rfcomm_dlc *d)
                                 d->out);
 }
 
-static void rfcomm_session_timeout(unsigned long arg)
+static void rfcomm_session_timeout(struct timer_list *t)
 {
-       struct rfcomm_session *s = (void *) arg;
+       struct rfcomm_session *s = from_timer(s, t, timer);
 
        BT_DBG("session %p state %ld", s, s->state);
 
@@ -258,9 +258,9 @@ static void rfcomm_session_clear_timer(struct rfcomm_session *s)
 }
 
 /* ---- RFCOMM DLCs ---- */
-static void rfcomm_dlc_timeout(unsigned long arg)
+static void rfcomm_dlc_timeout(struct timer_list *t)
 {
-       struct rfcomm_dlc *d = (void *) arg;
+       struct rfcomm_dlc *d = from_timer(d, t, timer);
 
        BT_DBG("dlc %p state %ld", d, d->state);
 
@@ -307,7 +307,7 @@ struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio)
        if (!d)
                return NULL;
 
-       setup_timer(&d->timer, rfcomm_dlc_timeout, (unsigned long)d);
+       timer_setup(&d->timer, rfcomm_dlc_timeout, 0);
 
        skb_queue_head_init(&d->tx_queue);
        mutex_init(&d->lock);
@@ -650,7 +650,7 @@ static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
 
        BT_DBG("session %p sock %p", s, sock);
 
-       setup_timer(&s->timer, rfcomm_session_timeout, (unsigned long) s);
+       timer_setup(&s->timer, rfcomm_session_timeout, 0);
 
        INIT_LIST_HEAD(&s->dlcs);
        s->state = state;
index 795e920a3281939f8f84e76f9f3fc6161146a558..08df57665e1ff62fd3714598c5911833fe24a55b 100644 (file)
@@ -73,9 +73,9 @@ struct sco_pinfo {
 #define SCO_CONN_TIMEOUT       (HZ * 40)
 #define SCO_DISCONN_TIMEOUT    (HZ * 2)
 
-static void sco_sock_timeout(unsigned long arg)
+static void sco_sock_timeout(struct timer_list *t)
 {
-       struct sock *sk = (struct sock *)arg;
+       struct sock *sk = from_timer(sk, t, sk_timer);
 
        BT_DBG("sock %p state %d", sk, sk->sk_state);
 
@@ -487,7 +487,7 @@ static struct sock *sco_sock_alloc(struct net *net, struct socket *sock,
 
        sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
 
-       setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
+       timer_setup(&sk->sk_timer, sco_sock_timeout, 0);
 
        bt_sock_link(&sco_sk_list, sk);
        return sk;
index 70ccda233bd1f1aab18535e6d9d0419bb9a1a23b..c7785efeea577594b8e5ed0a74fb7b8b924ebae2 100644 (file)
@@ -144,9 +144,9 @@ static void send_dm_alert(struct work_struct *work)
  * in the event that more drops will arrive during the
  * hysteresis period.
  */
-static void sched_send_work(unsigned long _data)
+static void sched_send_work(struct timer_list *t)
 {
-       struct per_cpu_dm_data *data = (struct per_cpu_dm_data *)_data;
+       struct per_cpu_dm_data *data = from_timer(data, t, send_timer);
 
        schedule_work(&data->dm_alert_work);
 }
@@ -412,8 +412,7 @@ static int __init init_net_drop_monitor(void)
        for_each_possible_cpu(cpu) {
                data = &per_cpu(dm_cpu_data, cpu);
                INIT_WORK(&data->dm_alert_work, send_dm_alert);
-               setup_timer(&data->send_timer, sched_send_work,
-                           (unsigned long)data);
+               timer_setup(&data->send_timer, sched_send_work, 0);
                spin_lock_init(&data->lock);
                reset_per_cpu_data(data);
        }
index 7c1ffd6f950172c1915d8e5fa2b5e3f77e4f4c78..9834cfa21b21168a7654290dc2a999e41937b534 100644 (file)
@@ -76,9 +76,9 @@ static void est_fetch_counters(struct net_rate_estimator *e,
 
 }
 
-static void est_timer(unsigned long arg)
+static void est_timer(struct timer_list *t)
 {
-       struct net_rate_estimator *est = (struct net_rate_estimator *)arg;
+       struct net_rate_estimator *est = from_timer(est, t, timer);
        struct gnet_stats_basic_packed b;
        u64 rate, brate;
 
@@ -170,7 +170,7 @@ int gen_new_estimator(struct gnet_stats_basic_packed *bstats,
        }
 
        est->next_jiffies = jiffies + ((HZ/4) << intvl_log);
-       setup_timer(&est->timer, est_timer, (unsigned long)est);
+       timer_setup(&est->timer, est_timer, 0);
        mod_timer(&est->timer, est->next_jiffies);
 
        rcu_assign_pointer(*rate_est, est);
index 6ea3a1a7f36a2e2d35ee170756aca0e0d6fc5120..d1f5fe986edda5ff886575be0eea0b361e2be7ff 100644 (file)
@@ -51,7 +51,7 @@ do {                                          \
 
 #define PNEIGH_HASHMASK                0xF
 
-static void neigh_timer_handler(unsigned long arg);
+static void neigh_timer_handler(struct timer_list *t);
 static void __neigh_notify(struct neighbour *n, int type, int flags,
                           u32 pid);
 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
@@ -331,7 +331,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device
        n->output         = neigh_blackhole;
        seqlock_init(&n->hh.hh_lock);
        n->parms          = neigh_parms_clone(&tbl->parms);
-       setup_timer(&n->timer, neigh_timer_handler, (unsigned long)n);
+       timer_setup(&n->timer, neigh_timer_handler, 0);
 
        NEIGH_CACHE_STAT_INC(tbl, allocs);
        n->tbl            = tbl;
@@ -903,10 +903,10 @@ static void neigh_probe(struct neighbour *neigh)
 
 /* Called when a timer expires for a neighbour entry. */
 
-static void neigh_timer_handler(unsigned long arg)
+static void neigh_timer_handler(struct timer_list *t)
 {
        unsigned long now, next;
-       struct neighbour *neigh = (struct neighbour *)arg;
+       struct neighbour *neigh = from_timer(neigh, t, timer);
        unsigned int state;
        int notify = 0;
 
@@ -1391,9 +1391,9 @@ int neigh_direct_output(struct neighbour *neigh, struct sk_buff *skb)
 }
 EXPORT_SYMBOL(neigh_direct_output);
 
-static void neigh_proxy_process(unsigned long arg)
+static void neigh_proxy_process(struct timer_list *t)
 {
-       struct neigh_table *tbl = (struct neigh_table *)arg;
+       struct neigh_table *tbl = from_timer(tbl, t, proxy_timer);
        long sched_next = 0;
        unsigned long now = jiffies;
        struct sk_buff *skb, *n;
@@ -1573,7 +1573,7 @@ void neigh_table_init(int index, struct neigh_table *tbl)
        INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work);
        queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
                        tbl->parms.reachable_time);
-       setup_timer(&tbl->proxy_timer, neigh_proxy_process, (unsigned long)tbl);
+       timer_setup(&tbl->proxy_timer, neigh_proxy_process, 0);
        skb_queue_head_init_class(&tbl->proxy_queue,
                        &neigh_table_proxy_queue_class);
 
index de4a0cafb19f8627adaabcbee28f9ede599dec62..324cb9f2f55146a46ef78528fa5ac768e22736b9 100644 (file)
@@ -183,7 +183,7 @@ static __inline__ unsigned int dn_hash(__le16 src, __le16 dst)
        return dn_rt_hash_mask & (unsigned int)tmp;
 }
 
-static void dn_dst_check_expire(unsigned long dummy)
+static void dn_dst_check_expire(struct timer_list *unused)
 {
        int i;
        struct dn_route *rt;
@@ -1875,7 +1875,7 @@ void __init dn_route_init(void)
                kmem_cache_create("dn_dst_cache", sizeof(struct dn_route), 0,
                                  SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
        dst_entries_init(&dn_dst_ops);
-       setup_timer(&dn_route_timer, dn_dst_check_expire, 0);
+       timer_setup(&dn_route_timer, dn_dst_check_expire, 0);
        dn_route_timer.expires = jiffies + decnet_dst_gc_interval * HZ;
        add_timer(&dn_route_timer);
 
index f430daed24a0d97a97fe625456fbe8fc7fa22ce3..aa4155875ca84eabb75ab445c4f1adf2612eeac2 100644 (file)
 
 #define SLOW_INTERVAL (HZ/2)
 
-static void dn_slow_timer(unsigned long arg);
+static void dn_slow_timer(struct timer_list *t);
 
 void dn_start_slow_timer(struct sock *sk)
 {
-       setup_timer(&sk->sk_timer, dn_slow_timer, (unsigned long)sk);
+       timer_setup(&sk->sk_timer, dn_slow_timer, 0);
        sk_reset_timer(sk, &sk->sk_timer, jiffies + SLOW_INTERVAL);
 }
 
@@ -47,9 +47,9 @@ void dn_stop_slow_timer(struct sock *sk)
        sk_stop_timer(sk, &sk->sk_timer);
 }
 
-static void dn_slow_timer(unsigned long arg)
+static void dn_slow_timer(struct timer_list *t)
 {
-       struct sock *sk = (struct sock *)arg;
+       struct sock *sk = from_timer(sk, t, sk_timer);
        struct dn_scp *scp = DN_SK(sk);
 
        bh_lock_sock(sk);
index ab183af0b5b6a8f9b7fd02b32b56d32487518f7a..d1f8f302dbf3ed5a079f27efa6eeaf802de40243 100644 (file)
@@ -752,18 +752,18 @@ static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc,
        return ip_local_out(net, skb->sk, skb);
 }
 
-static void igmp_gq_timer_expire(unsigned long data)
+static void igmp_gq_timer_expire(struct timer_list *t)
 {
-       struct in_device *in_dev = (struct in_device *)data;
+       struct in_device *in_dev = from_timer(in_dev, t, mr_gq_timer);
 
        in_dev->mr_gq_running = 0;
        igmpv3_send_report(in_dev, NULL);
        in_dev_put(in_dev);
 }
 
-static void igmp_ifc_timer_expire(unsigned long data)
+static void igmp_ifc_timer_expire(struct timer_list *t)
 {
-       struct in_device *in_dev = (struct in_device *)data;
+       struct in_device *in_dev = from_timer(in_dev, t, mr_ifc_timer);
 
        igmpv3_send_cr(in_dev);
        if (in_dev->mr_ifc_count) {
@@ -784,9 +784,9 @@ static void igmp_ifc_event(struct in_device *in_dev)
 }
 
 
-static void igmp_timer_expire(unsigned long data)
+static void igmp_timer_expire(struct timer_list *t)
 {
-       struct ip_mc_list *im = (struct ip_mc_list *)data;
+       struct ip_mc_list *im = from_timer(im, t, timer);
        struct in_device *in_dev = im->interface;
 
        spin_lock(&im->lock);
@@ -1385,7 +1385,7 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
        refcount_set(&im->refcnt, 1);
        spin_lock_init(&im->lock);
 #ifdef CONFIG_IP_MULTICAST
-       setup_timer(&im->timer, igmp_timer_expire, (unsigned long)im);
+       timer_setup(&im->timer, igmp_timer_expire, 0);
        im->unsolicit_count = net->ipv4.sysctl_igmp_qrv;
 #endif
 
@@ -1695,10 +1695,8 @@ void ip_mc_init_dev(struct in_device *in_dev)
        ASSERT_RTNL();
 
 #ifdef CONFIG_IP_MULTICAST
-       setup_timer(&in_dev->mr_gq_timer, igmp_gq_timer_expire,
-                       (unsigned long)in_dev);
-       setup_timer(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire,
-                       (unsigned long)in_dev);
+       timer_setup(&in_dev->mr_gq_timer, igmp_gq_timer_expire, 0);
+       timer_setup(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire, 0);
        in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
 #endif
 
index 40a43ad294cb3751839cc1dbfc02a360e101d401..fd5f19c988e48a00e5447f5504bd670326ef7939 100644 (file)
@@ -112,7 +112,7 @@ static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,
                                 int cmd);
 static void igmpmsg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);
 static void mroute_clean_tables(struct mr_table *mrt, bool all);
-static void ipmr_expire_process(unsigned long arg);
+static void ipmr_expire_process(struct timer_list *t);
 
 #ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES
 #define ipmr_for_each_table(mrt, net) \
@@ -375,8 +375,7 @@ static struct mr_table *ipmr_new_table(struct net *net, u32 id)
        INIT_LIST_HEAD(&mrt->mfc_cache_list);
        INIT_LIST_HEAD(&mrt->mfc_unres_queue);
 
-       setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process,
-                   (unsigned long)mrt);
+       timer_setup(&mrt->ipmr_expire_timer, ipmr_expire_process, 0);
 
        mrt->mroute_reg_vif_num = -1;
 #ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES
@@ -804,9 +803,9 @@ static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c)
 }
 
 /* Timer process for the unresolved queue. */
-static void ipmr_expire_process(unsigned long arg)
+static void ipmr_expire_process(struct timer_list *t)
 {
-       struct mr_table *mrt = (struct mr_table *)arg;
+       struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
        unsigned long now;
        unsigned long expires;
        struct mfc_cache *c, *next;
index a0ae1c9d37dfc9712da564a084e6191d56ab48a1..f49bd7897e95f15a381e4700660991f2d3c3fed4 100644 (file)
@@ -188,7 +188,7 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp);
 static void addrconf_dad_work(struct work_struct *w);
 static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id);
 static void addrconf_dad_run(struct inet6_dev *idev);
-static void addrconf_rs_timer(unsigned long data);
+static void addrconf_rs_timer(struct timer_list *t);
 static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
 
@@ -388,8 +388,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
        rwlock_init(&ndev->lock);
        ndev->dev = dev;
        INIT_LIST_HEAD(&ndev->addr_list);
-       setup_timer(&ndev->rs_timer, addrconf_rs_timer,
-                   (unsigned long)ndev);
+       timer_setup(&ndev->rs_timer, addrconf_rs_timer, 0);
        memcpy(&ndev->cnf, dev_net(dev)->ipv6.devconf_dflt, sizeof(ndev->cnf));
 
        if (ndev->cnf.stable_secret.initialized)
@@ -3741,9 +3740,9 @@ restart:
        return 0;
 }
 
-static void addrconf_rs_timer(unsigned long data)
+static void addrconf_rs_timer(struct timer_list *t)
 {
-       struct inet6_dev *idev = (struct inet6_dev *)data;
+       struct inet6_dev *idev = from_timer(idev, t, rs_timer);
        struct net_device *dev = idev->dev;
        struct in6_addr lladdr;
 
index 9c24b85949c1060011774d9ff743b112206f186d..a2e1a864eb4695ee4323ce2f85f2a560efd73ee4 100644 (file)
@@ -120,7 +120,7 @@ static void mrt6msg_netlink_event(struct mr6_table *mrt, struct sk_buff *pkt);
 static int ip6mr_rtm_dumproute(struct sk_buff *skb,
                               struct netlink_callback *cb);
 static void mroute_clean_tables(struct mr6_table *mrt, bool all);
-static void ipmr_expire_process(unsigned long arg);
+static void ipmr_expire_process(struct timer_list *t);
 
 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
 #define ip6mr_for_each_table(mrt, net) \
@@ -320,8 +320,7 @@ static struct mr6_table *ip6mr_new_table(struct net *net, u32 id)
 
        INIT_LIST_HEAD(&mrt->mfc6_unres_queue);
 
-       setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process,
-                   (unsigned long)mrt);
+       timer_setup(&mrt->ipmr_expire_timer, ipmr_expire_process, 0);
 
 #ifdef CONFIG_IPV6_PIMSM_V2
        mrt->mroute_reg_vif_num = -1;
@@ -888,9 +887,9 @@ static void ipmr_do_expire_process(struct mr6_table *mrt)
                mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);
 }
 
-static void ipmr_expire_process(unsigned long arg)
+static void ipmr_expire_process(struct timer_list *t)
 {
-       struct mr6_table *mrt = (struct mr6_table *)arg;
+       struct mr6_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
 
        if (!spin_trylock(&mfc_unres_lock)) {
                mod_timer(&mrt->ipmr_expire_timer, jiffies + 1);
index 12b7c27ce5ce917bfb49ec8a56502c02ee02edf6..fc6d7d143f2c29aab9a3f56eae02e5337e65a97b 100644 (file)
@@ -75,10 +75,10 @@ static struct in6_addr mld2_all_mcr = MLD2_ALL_MCR_INIT;
 
 static void igmp6_join_group(struct ifmcaddr6 *ma);
 static void igmp6_leave_group(struct ifmcaddr6 *ma);
-static void igmp6_timer_handler(unsigned long data);
+static void igmp6_timer_handler(struct timer_list *t);
 
-static void mld_gq_timer_expire(unsigned long data);
-static void mld_ifc_timer_expire(unsigned long data);
+static void mld_gq_timer_expire(struct timer_list *t);
+static void mld_ifc_timer_expire(struct timer_list *t);
 static void mld_ifc_event(struct inet6_dev *idev);
 static void mld_add_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc);
 static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *pmc);
@@ -839,7 +839,7 @@ static struct ifmcaddr6 *mca_alloc(struct inet6_dev *idev,
        if (!mc)
                return NULL;
 
-       setup_timer(&mc->mca_timer, igmp6_timer_handler, (unsigned long)mc);
+       timer_setup(&mc->mca_timer, igmp6_timer_handler, 0);
 
        mc->mca_addr = *addr;
        mc->idev = idev; /* reference taken by caller */
@@ -2083,9 +2083,9 @@ void ipv6_mc_dad_complete(struct inet6_dev *idev)
        }
 }
 
-static void mld_dad_timer_expire(unsigned long data)
+static void mld_dad_timer_expire(struct timer_list *t)
 {
-       struct inet6_dev *idev = (struct inet6_dev *)data;
+       struct inet6_dev *idev = from_timer(idev, t, mc_dad_timer);
 
        mld_send_initial_cr(idev);
        if (idev->mc_dad_count) {
@@ -2432,18 +2432,18 @@ static void igmp6_leave_group(struct ifmcaddr6 *ma)
        }
 }
 
-static void mld_gq_timer_expire(unsigned long data)
+static void mld_gq_timer_expire(struct timer_list *t)
 {
-       struct inet6_dev *idev = (struct inet6_dev *)data;
+       struct inet6_dev *idev = from_timer(idev, t, mc_gq_timer);
 
        idev->mc_gq_running = 0;
        mld_send_report(idev, NULL);
        in6_dev_put(idev);
 }
 
-static void mld_ifc_timer_expire(unsigned long data)
+static void mld_ifc_timer_expire(struct timer_list *t)
 {
-       struct inet6_dev *idev = (struct inet6_dev *)data;
+       struct inet6_dev *idev = from_timer(idev, t, mc_ifc_timer);
 
        mld_send_cr(idev);
        if (idev->mc_ifc_count) {
@@ -2462,9 +2462,9 @@ static void mld_ifc_event(struct inet6_dev *idev)
        mld_ifc_start_timer(idev, 1);
 }
 
-static void igmp6_timer_handler(unsigned long data)
+static void igmp6_timer_handler(struct timer_list *t)
 {
-       struct ifmcaddr6 *ma = (struct ifmcaddr6 *) data;
+       struct ifmcaddr6 *ma = from_timer(ma, t, mca_timer);
 
        if (mld_in_v1_mode(ma->idev))
                igmp6_send(&ma->mca_addr, ma->idev->dev, ICMPV6_MGM_REPORT);
@@ -2552,14 +2552,11 @@ void ipv6_mc_init_dev(struct inet6_dev *idev)
        write_lock_bh(&idev->lock);
        spin_lock_init(&idev->mc_lock);
        idev->mc_gq_running = 0;
-       setup_timer(&idev->mc_gq_timer, mld_gq_timer_expire,
-                       (unsigned long)idev);
+       timer_setup(&idev->mc_gq_timer, mld_gq_timer_expire, 0);
        idev->mc_tomb = NULL;
        idev->mc_ifc_count = 0;
-       setup_timer(&idev->mc_ifc_timer, mld_ifc_timer_expire,
-                       (unsigned long)idev);
-       setup_timer(&idev->mc_dad_timer, mld_dad_timer_expire,
-                   (unsigned long)idev);
+       timer_setup(&idev->mc_ifc_timer, mld_ifc_timer_expire, 0);
+       timer_setup(&idev->mc_dad_timer, mld_dad_timer_expire, 0);
        ipv6_mc_reset(idev);
        write_unlock_bh(&idev->lock);
 }
index a2b904a718c6124d133aa94a59b86448f666b739..3ccf8dfb233e74617c24f7538e3d27b684ceb627 100644 (file)
@@ -529,9 +529,9 @@ struct ncsi_dev *ncsi_find_dev(struct net_device *dev)
        return NULL;
 }
 
-static void ncsi_request_timeout(unsigned long data)
+static void ncsi_request_timeout(struct timer_list *t)
 {
-       struct ncsi_request *nr = (struct ncsi_request *)data;
+       struct ncsi_request *nr = from_timer(nr, t, timer);
        struct ncsi_dev_priv *ndp = nr->ndp;
        unsigned long flags;
 
@@ -1577,9 +1577,7 @@ struct ncsi_dev *ncsi_register_dev(struct net_device *dev,
        for (i = 0; i < ARRAY_SIZE(ndp->requests); i++) {
                ndp->requests[i].id = i;
                ndp->requests[i].ndp = ndp;
-               setup_timer(&ndp->requests[i].timer,
-                           ncsi_request_timeout,
-                           (unsigned long)&ndp->requests[i]);
+               timer_setup(&ndp->requests[i].timer, ncsi_request_timeout, 0);
        }
 
        spin_lock_irqsave(&ncsi_dev_lock, flags);
index 64778f9a85481fd69faff2fcd0eaa64031ab06d9..d6748a8a79c5666b11d963a8755df557d8d77e59 100644 (file)
@@ -67,9 +67,9 @@ void nf_ct_unlink_expect_report(struct nf_conntrack_expect *exp,
 }
 EXPORT_SYMBOL_GPL(nf_ct_unlink_expect_report);
 
-static void nf_ct_expectation_timed_out(unsigned long ul_expect)
+static void nf_ct_expectation_timed_out(struct timer_list *t)
 {
-       struct nf_conntrack_expect *exp = (void *)ul_expect;
+       struct nf_conntrack_expect *exp = from_timer(exp, t, timeout);
 
        spin_lock_bh(&nf_conntrack_expect_lock);
        nf_ct_unlink_expect(exp);
@@ -368,8 +368,7 @@ static void nf_ct_expect_insert(struct nf_conntrack_expect *exp)
        /* two references : one for hash insert, one for the timer */
        refcount_add(2, &exp->use);
 
-       setup_timer(&exp->timeout, nf_ct_expectation_timed_out,
-                   (unsigned long)exp);
+       timer_setup(&exp->timeout, nf_ct_expectation_timed_out, 0);
        helper = rcu_dereference_protected(master_help->helper,
                                           lockdep_is_held(&nf_conntrack_expect_lock));
        if (helper) {
index cad6498f10b03fca0e873eb8718734b471a65f9c..e5afab86381ca1f1487195009ffde4b8eaeec3e2 100644 (file)
@@ -151,7 +151,7 @@ instance_put(struct nfulnl_instance *inst)
                call_rcu_bh(&inst->rcu, nfulnl_instance_free_rcu);
 }
 
-static void nfulnl_timer(unsigned long data);
+static void nfulnl_timer(struct timer_list *t);
 
 static struct nfulnl_instance *
 instance_create(struct net *net, u_int16_t group_num,
@@ -184,7 +184,7 @@ instance_create(struct net *net, u_int16_t group_num,
        /* needs to be two, since we _put() after creation */
        refcount_set(&inst->use, 2);
 
-       setup_timer(&inst->timer, nfulnl_timer, (unsigned long)inst);
+       timer_setup(&inst->timer, nfulnl_timer, 0);
 
        inst->net = get_net(net);
        inst->peer_user_ns = user_ns;
@@ -377,9 +377,9 @@ __nfulnl_flush(struct nfulnl_instance *inst)
 }
 
 static void
-nfulnl_timer(unsigned long data)
+nfulnl_timer(struct timer_list *t)
 {
-       struct nfulnl_instance *inst = (struct nfulnl_instance *)data;
+       struct nfulnl_instance *inst = from_timer(inst, t, timer);
 
        spin_lock_bh(&inst->lock);
        if (inst->skb)
index daf45da448fab4406cf4b5727404c88c1f0759be..ee3421ad108da72bd769de43e5ff5540212b11fe 100644 (file)
@@ -107,9 +107,9 @@ static void idletimer_tg_work(struct work_struct *work)
        sysfs_notify(idletimer_tg_kobj, NULL, timer->attr.attr.name);
 }
 
-static void idletimer_tg_expired(unsigned long data)
+static void idletimer_tg_expired(struct timer_list *t)
 {
-       struct idletimer_tg *timer = (struct idletimer_tg *) data;
+       struct idletimer_tg *timer = from_timer(timer, t, timer);
 
        pr_debug("timer %s expired\n", timer->attr.attr.name);
 
@@ -143,8 +143,7 @@ static int idletimer_tg_create(struct idletimer_tg_info *info)
 
        list_add(&info->timer->entry, &idletimer_tg_list);
 
-       setup_timer(&info->timer->timer, idletimer_tg_expired,
-                   (unsigned long) info->timer);
+       timer_setup(&info->timer->timer, idletimer_tg_expired, 0);
        info->timer->refcnt = 1;
 
        mod_timer(&info->timer->timer,
index 3ba31c194ccec3101aa0979bb18a693d30d1c68b..0971634e5444559cb5380a9f9927dc3294db3452 100644 (file)
@@ -85,9 +85,10 @@ led_tg(struct sk_buff *skb, const struct xt_action_param *par)
        return XT_CONTINUE;
 }
 
-static void led_timeout_callback(unsigned long data)
+static void led_timeout_callback(struct timer_list *t)
 {
-       struct xt_led_info_internal *ledinternal = (struct xt_led_info_internal *)data;
+       struct xt_led_info_internal *ledinternal = from_timer(ledinternal, t,
+                                                             timer);
 
        led_trigger_event(&ledinternal->netfilter_led_trigger, LED_OFF);
 }
@@ -143,8 +144,7 @@ static int led_tg_check(const struct xt_tgchk_param *par)
 
        /* See if we need to set up a timer */
        if (ledinfo->delay > 0)
-               setup_timer(&ledinternal->timer, led_timeout_callback,
-                           (unsigned long)ledinternal);
+               timer_setup(&ledinternal->timer, led_timeout_callback, 0);
 
        list_add_tail(&ledinternal->list, &xt_led_triggers);
 
index c25e9b4179c34b571c6adbb65f3cff9f60dad06d..074960154993fef5061cece1009b014c10668737 100644 (file)
@@ -591,18 +591,18 @@ static int nci_close_device(struct nci_dev *ndev)
 }
 
 /* NCI command timer function */
-static void nci_cmd_timer(unsigned long arg)
+static void nci_cmd_timer(struct timer_list *t)
 {
-       struct nci_dev *ndev = (void *) arg;
+       struct nci_dev *ndev = from_timer(ndev, t, cmd_timer);
 
        atomic_set(&ndev->cmd_cnt, 1);
        queue_work(ndev->cmd_wq, &ndev->cmd_work);
 }
 
 /* NCI data exchange timer function */
-static void nci_data_timer(unsigned long arg)
+static void nci_data_timer(struct timer_list *t)
 {
-       struct nci_dev *ndev = (void *) arg;
+       struct nci_dev *ndev = from_timer(ndev, t, data_timer);
 
        set_bit(NCI_DATA_EXCHANGE_TO, &ndev->flags);
        queue_work(ndev->rx_wq, &ndev->rx_work);
@@ -1232,10 +1232,8 @@ int nci_register_device(struct nci_dev *ndev)
        skb_queue_head_init(&ndev->rx_q);
        skb_queue_head_init(&ndev->tx_q);
 
-       setup_timer(&ndev->cmd_timer, nci_cmd_timer,
-                   (unsigned long) ndev);
-       setup_timer(&ndev->data_timer, nci_data_timer,
-                   (unsigned long) ndev);
+       timer_setup(&ndev->cmd_timer, nci_cmd_timer, 0);
+       timer_setup(&ndev->data_timer, nci_data_timer, 0);
 
        mutex_init(&ndev->req_lock);
        INIT_LIST_HEAD(&ndev->conn_info_list);
index 4c7fbc6dcce73167cf602bf0f2f8078522f8f443..994dc2df57e40c6051b413e4befefef818466a4b 100644 (file)
@@ -45,9 +45,9 @@ const char *const rxrpc_call_completions[NR__RXRPC_CALL_COMPLETIONS] = {
 
 struct kmem_cache *rxrpc_call_jar;
 
-static void rxrpc_call_timer_expired(unsigned long _call)
+static void rxrpc_call_timer_expired(struct timer_list *t)
 {
-       struct rxrpc_call *call = (struct rxrpc_call *)_call;
+       struct rxrpc_call *call = from_timer(call, t, timer);
 
        _enter("%d", call->debug_id);
 
@@ -114,8 +114,7 @@ struct rxrpc_call *rxrpc_alloc_call(gfp_t gfp)
                goto nomem_2;
 
        mutex_init(&call->user_mutex);
-       setup_timer(&call->timer, rxrpc_call_timer_expired,
-                   (unsigned long)call);
+       timer_setup(&call->timer, rxrpc_call_timer_expired, 0);
        INIT_WORK(&call->processor, &rxrpc_process_call);
        INIT_LIST_HEAD(&call->link);
        INIT_LIST_HEAD(&call->chan_wait_link);
index 459611577d3dfa29f72442dfe1dcdfe4f2c6a502..801d4781a73b6724ce06f95c3be709bb9cd53174 100644 (file)
@@ -44,7 +44,7 @@ static DEFINE_SPINLOCK(lib80211_crypto_lock);
 static void lib80211_crypt_deinit_entries(struct lib80211_crypt_info *info,
                                          int force);
 static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info);
-static void lib80211_crypt_deinit_handler(unsigned long data);
+static void lib80211_crypt_deinit_handler(struct timer_list *t);
 
 int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name,
                                spinlock_t *lock)
@@ -55,8 +55,8 @@ int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name,
        info->lock = lock;
 
        INIT_LIST_HEAD(&info->crypt_deinit_list);
-       setup_timer(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler,
-                       (unsigned long)info);
+       timer_setup(&info->crypt_deinit_timer, lib80211_crypt_deinit_handler,
+                   0);
 
        return 0;
 }
@@ -116,9 +116,10 @@ static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info)
        spin_unlock_irqrestore(info->lock, flags);
 }
 
-static void lib80211_crypt_deinit_handler(unsigned long data)
+static void lib80211_crypt_deinit_handler(struct timer_list *t)
 {
-       struct lib80211_crypt_info *info = (struct lib80211_crypt_info *)data;
+       struct lib80211_crypt_info *info = from_timer(info, t,
+                                                     crypt_deinit_timer);
        unsigned long flags;
 
        lib80211_crypt_deinit_entries(info, 0);
index e0cd04d283527cde1c32d430b35cec56ebb02860..a6a8ab09b914660fcd600255cf6ff3b2dc46bc32 100644 (file)
@@ -36,7 +36,7 @@
 LIST_HEAD(x25_neigh_list);
 DEFINE_RWLOCK(x25_neigh_list_lock);
 
-static void x25_t20timer_expiry(unsigned long);
+static void x25_t20timer_expiry(struct timer_list *);
 
 static void x25_transmit_restart_confirmation(struct x25_neigh *nb);
 static void x25_transmit_restart_request(struct x25_neigh *nb);
@@ -49,9 +49,9 @@ static inline void x25_start_t20timer(struct x25_neigh *nb)
        mod_timer(&nb->t20timer, jiffies + nb->t20);
 }
 
-static void x25_t20timer_expiry(unsigned long param)
+static void x25_t20timer_expiry(struct timer_list *t)
 {
-       struct x25_neigh *nb = (struct x25_neigh *)param;
+       struct x25_neigh *nb = from_timer(nb, t, t20timer);
 
        x25_transmit_restart_request(nb);
 
@@ -252,7 +252,7 @@ void x25_link_device_up(struct net_device *dev)
                return;
 
        skb_queue_head_init(&nb->queue);
-       setup_timer(&nb->t20timer, x25_t20timer_expiry, (unsigned long)nb);
+       timer_setup(&nb->t20timer, x25_t20timer_expiry, 0);
 
        dev_hold(dev);
        nb->dev      = dev;
index 1f5cee2269af4296bd41745adec063a4a04faa9f..065d89606888ec1bf053577d3949746bcea6f099 100644 (file)
@@ -556,7 +556,7 @@ out:
        return HRTIMER_NORESTART;
 }
 
-static void xfrm_replay_timer_handler(unsigned long data);
+static void xfrm_replay_timer_handler(struct timer_list *t);
 
 struct xfrm_state *xfrm_state_alloc(struct net *net)
 {
@@ -574,8 +574,7 @@ struct xfrm_state *xfrm_state_alloc(struct net *net)
                INIT_HLIST_NODE(&x->byspi);
                tasklet_hrtimer_init(&x->mtimer, xfrm_timer_handler,
                                        CLOCK_BOOTTIME, HRTIMER_MODE_ABS);
-               setup_timer(&x->rtimer, xfrm_replay_timer_handler,
-                               (unsigned long)x);
+               timer_setup(&x->rtimer, xfrm_replay_timer_handler, 0);
                x->curlft.add_time = get_seconds();
                x->lft.soft_byte_limit = XFRM_INF;
                x->lft.soft_packet_limit = XFRM_INF;
@@ -1879,9 +1878,9 @@ void xfrm_state_walk_done(struct xfrm_state_walk *walk, struct net *net)
 }
 EXPORT_SYMBOL(xfrm_state_walk_done);
 
-static void xfrm_replay_timer_handler(unsigned long data)
+static void xfrm_replay_timer_handler(struct timer_list *t)
 {
-       struct xfrm_state *x = (struct xfrm_state *)data;
+       struct xfrm_state *x = from_timer(x, t, rtimer);
 
        spin_lock(&x->lock);