vdev->config.rx_pause_enable);
 
        if (vdev->vp_reset_timer.function == NULL)
-               vxge_os_timer(vdev->vp_reset_timer,
-                       vxge_poll_vp_reset, vdev, (HZ/2));
+               vxge_os_timer(&vdev->vp_reset_timer, vxge_poll_vp_reset, vdev,
+                             HZ / 2);
 
        /* There is no need to check for RxD leak and RxD lookup on Titan1A */
        if (vdev->titan1 && vdev->vp_lockup_timer.function == NULL)
-               vxge_os_timer(vdev->vp_lockup_timer, vxge_poll_vp_lockup, vdev,
+               vxge_os_timer(&vdev->vp_lockup_timer, vxge_poll_vp_lockup, vdev,
                              HZ / 2);
 
        set_bit(__VXGE_STATE_CARD_UP, &vdev->state);
 
        static int p = val; \
        module_param(p, int, 0)
 
-#define vxge_os_timer(timer, handle, arg, exp) do { \
-               init_timer(&timer); \
-               timer.function = handle; \
-               timer.data = (unsigned long) arg; \
-               mod_timer(&timer, (jiffies + exp)); \
-       } while (0)
+static inline
+void vxge_os_timer(struct timer_list *timer, void (*func)(unsigned long data),
+                  struct vxgedev *vdev, unsigned long timeout)
+{
+       init_timer(timer);
+       timer->function = func;
+       timer->data = (unsigned long)vdev;
+       mod_timer(timer, jiffies + timeout);
+}
 
 void vxge_initialize_ethtool_ops(struct net_device *ndev);
 enum vxge_hw_status vxge_reset_all_vpaths(struct vxgedev *vdev);