All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Javier González" <jg@lightnvm.io>
To: Kees Cook <keescook@chromium.org>
Cc: "Jens Axboe" <axboe@kernel.dk>,
	"Matias Bjørling" <mb@lightnvm.io>,
	linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] lightnvm: Convert timers to use timer_setup()
Date: Wed, 25 Oct 2017 10:53:04 +0200	[thread overview]
Message-ID: <05041A94-19A4-42DC-9DA7-5CB0730F4B01@lightnvm.io> (raw)
In-Reply-To: <20171024153004.GA112705@beast>

[-- Attachment #1: Type: text/plain, Size: 10045 bytes --]

> On 24 Oct 2017, at 17.30, Kees Cook <keescook@chromium.org> wrote:
> 
> In preparation for unconditionally passing the struct timer_list pointer to
> all timer callbacks, switch to using the new timer_setup() and from_timer()
> to pass the timer pointer explicitly.
> 
> Cc: Matias Bjorling <mb@lightnvm.io>
> Cc: linux-block@vger.kernel.org
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---
> drivers/lightnvm/pblk-core.c | 4 ++--
> drivers/lightnvm/pblk-gc.c   | 6 +++---
> drivers/lightnvm/pblk-init.c | 2 +-
> drivers/lightnvm/pblk-rl.c   | 6 +++---
> drivers/lightnvm/pblk.h      | 2 +-
> drivers/lightnvm/rrpc.c      | 6 +++---
> 6 files changed, 13 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
> index 81501644fb15..8841eb66c902 100644
> --- a/drivers/lightnvm/pblk-core.c
> +++ b/drivers/lightnvm/pblk-core.c
> @@ -229,9 +229,9 @@ static void pblk_write_kick(struct pblk *pblk)
> 	mod_timer(&pblk->wtimer, jiffies + msecs_to_jiffies(1000));
> }
> 
> -void pblk_write_timer_fn(unsigned long data)
> +void pblk_write_timer_fn(struct timer_list *t)
> {
> -	struct pblk *pblk = (struct pblk *)data;
> +	struct pblk *pblk = from_timer(pblk, t, wtimer);
> 
> 	/* kick the write thread every tick to flush outstanding data */
> 	pblk_write_kick(pblk);
> diff --git a/drivers/lightnvm/pblk-gc.c b/drivers/lightnvm/pblk-gc.c
> index 6090d28f7995..85ff64fe5ba2 100644
> --- a/drivers/lightnvm/pblk-gc.c
> +++ b/drivers/lightnvm/pblk-gc.c
> @@ -428,9 +428,9 @@ void pblk_gc_kick(struct pblk *pblk)
> 	mod_timer(&gc->gc_timer, jiffies + msecs_to_jiffies(GC_TIME_MSECS));
> }
> 
> -static void pblk_gc_timer(unsigned long data)
> +static void pblk_gc_timer(struct timer_list *t)
> {
> -	struct pblk *pblk = (struct pblk *)data;
> +	struct pblk *pblk = from_timer(pblk, t, gc.gc_timer);
> 
> 	pblk_gc_kick(pblk);
> }
> @@ -569,7 +569,7 @@ int pblk_gc_init(struct pblk *pblk)
> 		goto fail_free_writer_kthread;
> 	}
> 
> -	setup_timer(&gc->gc_timer, pblk_gc_timer, (unsigned long)pblk);
> +	timer_setup(&gc->gc_timer, pblk_gc_timer, 0);
> 	mod_timer(&gc->gc_timer, jiffies + msecs_to_jiffies(GC_TIME_MSECS));
> 
> 	gc->gc_active = 0;
> diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
> index 1b0f61233c21..c0ae85b514f5 100644
> --- a/drivers/lightnvm/pblk-init.c
> +++ b/drivers/lightnvm/pblk-init.c
> @@ -833,7 +833,7 @@ static int pblk_lines_init(struct pblk *pblk)
> 
> static int pblk_writer_init(struct pblk *pblk)
> {
> -	setup_timer(&pblk->wtimer, pblk_write_timer_fn, (unsigned long)pblk);
> +	timer_setup(&pblk->wtimer, pblk_write_timer_fn, 0);
> 	mod_timer(&pblk->wtimer, jiffies + msecs_to_jiffies(100));
> 
> 	pblk->writer_ts = kthread_create(pblk_write_ts, pblk, "pblk-writer-t");
> diff --git a/drivers/lightnvm/pblk-rl.c b/drivers/lightnvm/pblk-rl.c
> index 2e6a5361baf0..1210deeb6f43 100644
> --- a/drivers/lightnvm/pblk-rl.c
> +++ b/drivers/lightnvm/pblk-rl.c
> @@ -178,9 +178,9 @@ int pblk_rl_sysfs_rate_show(struct pblk_rl *rl)
> 	return rl->rb_user_max;
> }
> 
> -static void pblk_rl_u_timer(unsigned long data)
> +static void pblk_rl_u_timer(struct timer_list *t)
> {
> -	struct pblk_rl *rl = (struct pblk_rl *)data;
> +	struct pblk_rl *rl = from_timer(rl, t, u_timer);
> 
> 	/* Release user I/O state. Protect from GC */
> 	smp_store_release(&rl->rb_user_active, 0);
> @@ -221,7 +221,7 @@ void pblk_rl_init(struct pblk_rl *rl, int budget)
> 	atomic_set(&rl->rb_gc_cnt, 0);
> 	atomic_set(&rl->rb_space, -1);
> 
> -	setup_timer(&rl->u_timer, pblk_rl_u_timer, (unsigned long)rl);
> +	timer_setup(&rl->u_timer, pblk_rl_u_timer, 0);
> 
> 	rl->rb_user_active = 0;
> 	rl->rb_gc_active = 0;
> diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
> index 67e623bd5c2d..e097dea4a1ea 100644
> --- a/drivers/lightnvm/pblk.h
> +++ b/drivers/lightnvm/pblk.h
> @@ -789,7 +789,7 @@ void pblk_map_rq(struct pblk *pblk, struct nvm_rq *rqd, unsigned int sentry,
>  * pblk write thread
>  */
> int pblk_write_ts(void *data);
> -void pblk_write_timer_fn(unsigned long data);
> +void pblk_write_timer_fn(struct timer_list *t);
> void pblk_write_should_kick(struct pblk *pblk);
> 
> /*
> diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
> index 267f01ae87e4..0993c14be860 100644
> --- a/drivers/lightnvm/rrpc.c
> +++ b/drivers/lightnvm/rrpc.c
> @@ -267,9 +267,9 @@ static void rrpc_gc_kick(struct rrpc *rrpc)
> /*
>  * timed GC every interval.
>  */
> -static void rrpc_gc_timer(unsigned long data)
> +static void rrpc_gc_timer(struct timer_list *t)
> {
> -	struct rrpc *rrpc = (struct rrpc *)data;
> +	struct rrpc *rrpc = from_timer(rrpc, t, gc_timer);
> 
> 	rrpc_gc_kick(rrpc);
> 	mod_timer(&rrpc->gc_timer, jiffies + msecs_to_jiffies(10));
> @@ -1063,7 +1063,7 @@ static int rrpc_gc_init(struct rrpc *rrpc)
> 	if (!rrpc->kgc_wq)
> 		return -ENOMEM;
> 
> -	setup_timer(&rrpc->gc_timer, rrpc_gc_timer, (unsigned long)rrpc);
> +	timer_setup(&rrpc->gc_timer, rrpc_gc_timer, 0);
> 
> 	return 0;
> }
> --
> 2.7.4
> 

Looks good. I put it through our daily internal testing (on topof Linus'
v4.14-rc6) and it does not seem to introduce any regressions.

Reviewed-by: Javier González <javier@cnexlabs.com>
Tested-by: Javier González <javier@cnexlabs.com>

One thing though: The patch does not apply on top of Jen's for-15/block.
It is trivial, but here you have a version that applies.

---
 drivers/lightnvm/pblk-core.c | 4 ++--
 drivers/lightnvm/pblk-gc.c   | 6 +++---
 drivers/lightnvm/pblk-init.c | 2 +-
 drivers/lightnvm/pblk-rl.c   | 6 +++---
 drivers/lightnvm/pblk.h      | 2 +-
 drivers/lightnvm/rrpc.c      | 6 +++---
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
index ce90213a42fa..76516ee84e9a 100644
--- a/drivers/lightnvm/pblk-core.c
+++ b/drivers/lightnvm/pblk-core.c
@@ -270,9 +270,9 @@ static void pblk_write_kick(struct pblk *pblk)
 	mod_timer(&pblk->wtimer, jiffies + msecs_to_jiffies(1000));
 }

-void pblk_write_timer_fn(unsigned long data)
+void pblk_write_timer_fn(struct timer_list *t)
 {
-	struct pblk *pblk = (struct pblk *)data;
+	struct pblk *pblk = from_timer(pblk, t, wtimer);

 	/* kick the write thread every tick to flush outstanding data */
 	pblk_write_kick(pblk);
diff --git a/drivers/lightnvm/pblk-gc.c b/drivers/lightnvm/pblk-gc.c
index 00d5698d64a9..9c8e114c8a54 100644
--- a/drivers/lightnvm/pblk-gc.c
+++ b/drivers/lightnvm/pblk-gc.c
@@ -442,9 +442,9 @@ static void pblk_gc_run(struct pblk *pblk)
 		goto next_gc_group;
 }

-static void pblk_gc_timer(unsigned long data)
+static void pblk_gc_timer(struct timer_list *t)
 {
-	struct pblk *pblk = (struct pblk *)data;
+	struct pblk *pblk = from_timer(pblk, t, gc.gc_timer);

 	pblk_gc_kick(pblk);
 }
@@ -601,7 +601,7 @@ int pblk_gc_init(struct pblk *pblk)
 		goto fail_free_writer_kthread;
 	}

-	setup_timer(&gc->gc_timer, pblk_gc_timer, (unsigned long)pblk);
+	timer_setup(&gc->gc_timer, pblk_gc_timer, 0);
 	mod_timer(&gc->gc_timer, jiffies + msecs_to_jiffies(GC_TIME_MSECS));

 	gc->gc_active = 0;
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index f62112ba5482..695826a06b5d 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -866,7 +866,7 @@ static int pblk_lines_init(struct pblk *pblk)

 static int pblk_writer_init(struct pblk *pblk)
 {
-	setup_timer(&pblk->wtimer, pblk_write_timer_fn, (unsigned long)pblk);
+	timer_setup(&pblk->wtimer, pblk_write_timer_fn, 0);
 	mod_timer(&pblk->wtimer, jiffies + msecs_to_jiffies(100));

 	pblk->writer_ts = kthread_create(pblk_write_ts, pblk, "pblk-writer-t");
diff --git a/drivers/lightnvm/pblk-rl.c b/drivers/lightnvm/pblk-rl.c
index abae31fd434e..dacc71922260 100644
--- a/drivers/lightnvm/pblk-rl.c
+++ b/drivers/lightnvm/pblk-rl.c
@@ -158,9 +158,9 @@ int pblk_rl_max_io(struct pblk_rl *rl)
 	return rl->rb_max_io;
 }

-static void pblk_rl_u_timer(unsigned long data)
+static void pblk_rl_u_timer(struct timer_list *t)
 {
-	struct pblk_rl *rl = (struct pblk_rl *)data;
+	struct pblk_rl *rl = from_timer(rl, t, u_timer);

 	/* Release user I/O state. Protect from GC */
 	smp_store_release(&rl->rb_user_active, 0);
@@ -202,7 +202,7 @@ void pblk_rl_init(struct pblk_rl *rl, int budget)
 	atomic_set(&rl->rb_gc_cnt, 0);
 	atomic_set(&rl->rb_space, -1);

-	setup_timer(&rl->u_timer, pblk_rl_u_timer, (unsigned long)rl);
+	timer_setup(&rl->u_timer, pblk_rl_u_timer, 0);

 	rl->rb_user_active = 0;
 	rl->rb_gc_active = 0;
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
index 90961033a79f..59a64d461a5d 100644
--- a/drivers/lightnvm/pblk.h
+++ b/drivers/lightnvm/pblk.h
@@ -797,7 +797,7 @@ void pblk_map_rq(struct pblk *pblk, struct nvm_rq *rqd, unsigned int sentry,
  * pblk write thread
  */
 int pblk_write_ts(void *data);
-void pblk_write_timer_fn(unsigned long data);
+void pblk_write_timer_fn(struct timer_list *t);
 void pblk_write_should_kick(struct pblk *pblk);

 /*
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index 267f01ae87e4..0993c14be860 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -267,9 +267,9 @@ static void rrpc_gc_kick(struct rrpc *rrpc)
 /*
  * timed GC every interval.
  */
-static void rrpc_gc_timer(unsigned long data)
+static void rrpc_gc_timer(struct timer_list *t)
 {
-	struct rrpc *rrpc = (struct rrpc *)data;
+	struct rrpc *rrpc = from_timer(rrpc, t, gc_timer);

 	rrpc_gc_kick(rrpc);
 	mod_timer(&rrpc->gc_timer, jiffies + msecs_to_jiffies(10));
@@ -1063,7 +1063,7 @@ static int rrpc_gc_init(struct rrpc *rrpc)
 	if (!rrpc->kgc_wq)
 		return -ENOMEM;

-	setup_timer(&rrpc->gc_timer, rrpc_gc_timer, (unsigned long)rrpc);
+	timer_setup(&rrpc->gc_timer, rrpc_gc_timer, 0);

 	return 0;
 }
--
2.7.4


[-- Attachment #2: Message signed with OpenPGP --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2017-10-25  8:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-24 15:30 [PATCH] lightnvm: Convert timers to use timer_setup() Kees Cook
2017-10-25  8:53 ` Javier González [this message]
2017-10-25 18:24   ` Jens Axboe
2017-10-25 18:28     ` Javier González
2017-10-25 18:28       ` Javier González

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=05041A94-19A4-42DC-9DA7-5CB0730F4B01@lightnvm.io \
    --to=jg@lightnvm.io \
    --cc=axboe@kernel.dk \
    --cc=keescook@chromium.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mb@lightnvm.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.