--- v1
+++ v2
@@ -1,3 +1,9 @@
+This is part of the work to support switching all struct timer_list
+callbacks to get the timer pointer as the argument (like other modern
+callback interfaces in the kernel) instead of from the .data field.
+This patch is one of several steps in removing open-coded users of the
+.data field:
+
In several places, .data is checked for initialization to gate early
calls to del_timer_sync(). Checking for .function is equally valid, so
switch to this in all callers.
@@ -19,6 +25,9 @@
Cc: intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
+Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> # for input part
+Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> # for i40e part
+Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> # for power
---
drivers/base/power/wakeup.c | 3 +--
drivers/infiniband/hw/hfi1/chip.c | 6 ++----
@@ -32,10 +41,10 @@
9 files changed, 15 insertions(+), 23 deletions(-)
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
-index 144e6d8fafc8..79a3c1b204af 100644
+index cdd6f256da59..7f030d79a438 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
-@@ -479,8 +479,7 @@ static bool wakeup_source_not_registered(struct wakeup_source *ws)
+@@ -481,8 +481,7 @@ static bool wakeup_source_not_registered(struct wakeup_source *ws)
* Use timer struct to check if the given source is initialized
* by wakeup_source_add.
*/
@@ -46,10 +55,10 @@
/*
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
-index 94b54850ec75..53a6596cd7d6 100644
+index b2ed4b9cda6e..efd93521d7e4 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
-@@ -5513,9 +5513,8 @@ static int init_rcverr(struct hfi1_devdata *dd)
+@@ -5565,9 +5565,8 @@ static int init_rcverr(struct hfi1_devdata *dd)
static void free_rcverr(struct hfi1_devdata *dd)
{
@@ -60,7 +69,7 @@
}
static void handle_rxe_err(struct hfi1_devdata *dd, u32 unused, u64 reg)
-@@ -11992,9 +11991,8 @@ static void free_cntrs(struct hfi1_devdata *dd)
+@@ -12067,9 +12066,8 @@ static void free_cntrs(struct hfi1_devdata *dd)
struct hfi1_pportdata *ppd;
int i;
@@ -72,10 +81,10 @@
for (i = 0; i < dd->num_pports; i++, ppd++) {
kfree(ppd->cntrs);
diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c
-index 4a11d4da4c92..bc2af709c111 100644
+index fba77001c3a7..e7042e8b5e5a 100644
--- a/drivers/infiniband/hw/hfi1/init.c
+++ b/drivers/infiniband/hw/hfi1/init.c
-@@ -839,7 +839,7 @@ static void stop_timers(struct hfi1_devdata *dd)
+@@ -1006,7 +1006,7 @@ static void stop_timers(struct hfi1_devdata *dd)
for (pidx = 0; pidx < dd->num_pports; ++pidx) {
ppd = dd->pport + pidx;
@@ -85,10 +94,10 @@
atomic_set(&ppd->led_override_timer_active, 0);
}
diff --git a/drivers/infiniband/hw/qib/qib_iba7220.c b/drivers/infiniband/hw/qib/qib_iba7220.c
-index b1d512c7ff4b..22fd65fe7193 100644
+index 51a9266eea78..6fd83b91a1db 100644
--- a/drivers/infiniband/hw/qib/qib_iba7220.c
+++ b/drivers/infiniband/hw/qib/qib_iba7220.c
-@@ -1662,7 +1662,7 @@ static void qib_7220_quiet_serdes(struct qib_pportdata *ppd)
+@@ -1663,7 +1663,7 @@ static void qib_7220_quiet_serdes(struct qib_pportdata *ppd)
dd->control | QLOGIC_IB_C_FREEZEMODE);
ppd->cpspec->chase_end = 0;
@@ -98,7 +107,7 @@
if (ppd->cpspec->ibsymdelta || ppd->cpspec->iblnkerrdelta ||
diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
-index bb2439fff8fa..471aaf6bcbf2 100644
+index 14cadf6d6214..1ac7afe32897 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -2531,7 +2531,7 @@ static void qib_7322_mini_quiet_serdes(struct qib_pportdata *ppd)
@@ -111,7 +120,7 @@
/*
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
-index 6c16ba1107ba..66fb0318660b 100644
+index c5a4c65636d6..1e72522d5691 100644
--- a/drivers/infiniband/hw/qib/qib_init.c
+++ b/drivers/infiniband/hw/qib/qib_init.c
@@ -815,23 +815,19 @@ static void qib_stop_timers(struct qib_devdata *dd)
@@ -144,10 +153,10 @@
}
}
diff --git a/drivers/infiniband/hw/qib/qib_mad.c b/drivers/infiniband/hw/qib/qib_mad.c
-index f5a2aed31a89..37483f32935c 100644
+index f3d451136248..b72185360d34 100644
--- a/drivers/infiniband/hw/qib/qib_mad.c
+++ b/drivers/infiniband/hw/qib/qib_mad.c
-@@ -2496,7 +2496,7 @@ void qib_notify_free_mad_agent(struct rvt_dev_info *rdi, int port_idx)
+@@ -2491,7 +2491,7 @@ void qib_notify_free_mad_agent(struct rvt_dev_info *rdi, int port_idx)
struct qib_devdata *dd = container_of(ibdev,
struct qib_devdata, verbs_dev);
@@ -157,7 +166,7 @@
if (dd->pport[port_idx].ibport_data.smi_ah)
diff --git a/drivers/input/input.c b/drivers/input/input.c
-index 7e6842bd525c..a91fbbfc1b32 100644
+index d268fdc23c64..15153886253b 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -76,7 +76,7 @@ static void input_start_autorepeat(struct input_dev *dev, int code)
@@ -187,10 +196,10 @@
dev->rep[REP_DELAY] = delay;
dev->rep[REP_PERIOD] = period;
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
-index 2db93d3f6d23..b9a4c1a6e4ba 100644
+index 6498da8806cb..74d550704013 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
-@@ -11797,7 +11797,7 @@ static void i40e_remove(struct pci_dev *pdev)
+@@ -11777,7 +11777,7 @@ static void i40e_remove(struct pci_dev *pdev)
/* no more scheduling of any task */
set_bit(__I40E_SUSPENDED, pf->state);
set_bit(__I40E_DOWN, pf->state);