See also:
- https://lwn.net/Articles/735887/
- https://stackoverflow.com/questions/
53839625
/* Perform hardware reset of the device */
void
/* Perform hardware reset of the device */
void
-reset_timer(unsigned long arg)
+reset_timer(struct timer_list *arg)
- mic_ctx_t *mic_ctx = (mic_ctx_t *)arg;
+ mic_ctx_t *mic_ctx = from_timer(mic_ctx, arg, boot_timer);
uint32_t scratch2 = 0;
uint32_t postcode = mic_getpostcode(mic_ctx);
uint32_t scratch2 = 0;
uint32_t postcode = mic_getpostcode(mic_ctx);
- mic_ctx->boot_timer.function = reset_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_timer.expires = jiffies + HZ;
-
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, reset_timer, 0);
}
void
adapter_wait_reset(mic_ctx_t *mic_ctx)
{
}
void
adapter_wait_reset(mic_ctx_t *mic_ctx)
{
- mic_ctx->boot_timer.function = reset_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_start = jiffies;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_start = jiffies;
-
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, reset_timer, 0);
#define MIC_MAX_BOOT_TIME 180 // Maximum number of seconds to wait for boot to complete
static void
#define MIC_MAX_BOOT_TIME 180 // Maximum number of seconds to wait for boot to complete
static void
-online_timer(unsigned long arg)
+online_timer(struct timer_list *arg)
- mic_ctx_t *mic_ctx = (mic_ctx_t *)arg;
+ mic_ctx_t *mic_ctx = from_timer(mic_ctx, arg, boot_timer);
uint64_t delay = (jiffies - mic_ctx->boot_start) / HZ;
if (mic_ctx->state == MIC_ONLINE)
uint64_t delay = (jiffies - mic_ctx->boot_start) / HZ;
if (mic_ctx->state == MIC_ONLINE)
- mic_ctx->boot_timer.function = online_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_timer.expires = jiffies + HZ;
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, online_timer, 0);
if (!(delay % 5))
printk("Waiting for MIC %d boot %lld\n", mic_ctx->bi_id, delay);
}
static void
if (!(delay % 5))
printk("Waiting for MIC %d boot %lld\n", mic_ctx->bi_id, delay);
}
static void
-boot_timer(unsigned long arg)
+boot_timer(struct timer_list *arg)
- mic_ctx_t *mic_ctx = (mic_ctx_t *)arg;
+ mic_ctx_t *mic_ctx = from_timer(mic_ctx, arg, boot_timer);
struct micvnet_info *vnet_info = (struct micvnet_info *) mic_ctx->bi_vethinfo;
uint64_t delay = (jiffies - mic_ctx->boot_start) / HZ;
bool timer_restart = false;
struct micvnet_info *vnet_info = (struct micvnet_info *) mic_ctx->bi_vethinfo;
uint64_t delay = (jiffies - mic_ctx->boot_start) / HZ;
bool timer_restart = false;
timer_restart = (mic_ctx->state != MIC_ONLINE)? true: false;
if (timer_restart) {
timer_restart = (mic_ctx->state != MIC_ONLINE)? true: false;
if (timer_restart) {
- mic_ctx->boot_timer.function = boot_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_timer.expires = jiffies + HZ;
-
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, boot_timer, 0);
- mic_ctx->boot_timer.function = online_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_timer.expires = jiffies + HZ;
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, online_timer, 0);
printk("MIC %d Network link is up\n", mic_ctx->bi_id);
schedule_work(&mic_ctx->boot_ws);
printk("MIC %d Network link is up\n", mic_ctx->bi_id);
schedule_work(&mic_ctx->boot_ws);
int
adapter_post_boot_device(mic_ctx_t *mic_ctx)
{
int
adapter_post_boot_device(mic_ctx_t *mic_ctx)
{
- mic_ctx->boot_timer.function = boot_timer;
- mic_ctx->boot_timer.data = (unsigned long)mic_ctx;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_start = jiffies;
mic_ctx->boot_timer.expires = jiffies + HZ;
mic_ctx->boot_start = jiffies;
-
- add_timer(&mic_ctx->boot_timer);
+ timer_setup(&mic_ctx->boot_timer, boot_timer, 0);
mutex_init (&mic_ctx->state_lock);
init_waitqueue_head(&mic_ctx->resetwq);
init_waitqueue_head(&mic_ctx->ioremapwq);
mutex_init (&mic_ctx->state_lock);
init_waitqueue_head(&mic_ctx->resetwq);
init_waitqueue_head(&mic_ctx->ioremapwq);
- init_timer(&mic_ctx->boot_timer);
if (!(mic_ctx->resetworkq = __mic_create_singlethread_workqueue("RESET WORK")))
return -ENOMEM;
if (!(mic_ctx->ioremapworkq = __mic_create_singlethread_workqueue("IOREMAP_WORK"))) {
if (!(mic_ctx->resetworkq = __mic_create_singlethread_workqueue("RESET WORK")))
return -ENOMEM;
if (!(mic_ctx->ioremapworkq = __mic_create_singlethread_workqueue("IOREMAP_WORK"))) {