All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/23] counter: cleanups and device lifetime fixes
@ 2021-12-29 15:44 ` Uwe Kleine-König
  0 siblings, 0 replies; 48+ messages in thread
From: Uwe Kleine-König @ 2021-12-29 15:44 UTC (permalink / raw)
  To: William Breathitt Gray
  Cc: linux-iio, kernel, Jonathan Cameron, Greg Kroah-Hartman,
	linux-kernel, Patrick Havelange, Kamel Bouhara,
	Syed Nayyar Waris, Oleksij Rempel, Ahmad Fatoum, Jarkko Nikula,
	David Lechner, Fabrice Gasnier, Maxime Coquelin,
	Alexandre Torgue, linux-stm32, linux-arm-kernel, Jonathan Corbet

Hello,

this is v3 of my series to fix device lifetime issues in the counter
framework. This hopefully addresses all things pointed out for v2.

Note this depends on 60f07e74f86b (which is in next) now. Full diffstat
below.

Things that could be further improved:

 - 104_QUAD_8 depends on X86, but compiles fine on ARCH=arm. Maybe
   adding support for COMPILE_TEST would be a good idea.

 - 104-quad-8.c uses devm_request_irq() and (now) devm_counter_add(). On
   unbind an irq might be pending which results in quad8_irq_handler()
   calling counter_push_event() for a counter that is already
   unregistered. (The issue exists also without my changes.)

 - I think intel-qep.c makes the counter unfunctional in
   intel_qep_remove before the counter is unregistered.

 - counter_sysfs_add() allocates several small structures using
   devm_kcalloc for counter->dev. Not sure this could be optimized.
   Another ugly aspect here is, that counter->dev has no name, so the
   trace generated by the devres_log event contains several "(null)":

     sh-124     [000] d..1.   439.921733: devres_log: 40000000.timer:counter ADD f0ecfb01 devm_action_release (8 bytes)
     sh-124     [000] d..1.   439.921741: devres_log: (null) ADD 44be06af devm_kzalloc_release (64 bytes)
     sh-124     [000] d..1.   439.921750: devres_log: (null) ADD 16ad25f5 devm_kzalloc_release (8 bytes)
     sh-124     [000] d..1.   439.921755: devres_log: (null) ADD 7d22db15 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921760: devres_log: (null) ADD 34aefeea devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921764: devres_log: (null) ADD f347e9c0 devm_kzalloc_release (8 bytes)
     sh-124     [000] d..1.   439.921768: devres_log: (null) ADD 960e132d devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921772: devres_log: (null) ADD 7b4c8adc devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921776: devres_log: (null) ADD 0931ec34 devm_kzalloc_release (7 bytes)
     sh-124     [000] d..1.   439.921782: devres_log: (null) ADD c8c6c1c3 devm_kzalloc_release (15 bytes)
     sh-124     [000] d..1.   439.921788: devres_log: (null) ADD d1bb5baf devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921791: devres_log: (null) ADD 94029520 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921796: devres_log: (null) ADD 1dcc6eeb devm_kzalloc_release (25 bytes)
     sh-124     [000] d..1.   439.921801: devres_log: (null) ADD d37b87ec devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921805: devres_log: (null) ADD 660be81a devm_kzalloc_release (28 bytes)
     sh-124     [000] d..1.   439.921810: devres_log: (null) ADD e6691ecf devm_kzalloc_release (15 bytes)
     sh-124     [000] d..1.   439.921815: devres_log: (null) ADD 0b8e2064 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921818: devres_log: (null) ADD b4dd5e7f devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921827: devres_log: (null) ADD 3eaaec2a devm_kzalloc_release (25 bytes)
     sh-124     [000] d..1.   439.921834: devres_log: (null) ADD e519abf5 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921841: devres_log: (null) ADD 92663a7b devm_kzalloc_release (28 bytes)
     sh-124     [000] d..1.   439.921845: devres_log: (null) ADD 7835b138 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921849: devres_log: (null) ADD 2dfa4f94 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921853: devres_log: (null) ADD 561fde6a devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921856: devres_log: (null) ADD 6f8b5fa6 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921860: devres_log: (null) ADD 39e5a4e8 devm_kzalloc_release (19 bytes)
     sh-124     [000] d..1.   439.921865: devres_log: (null) ADD f9156a41 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921868: devres_log: (null) ADD d2d5ce75 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921872: devres_log: (null) ADD 36d78a89 devm_kzalloc_release (23 bytes)
     sh-124     [000] d..1.   439.921877: devres_log: (null) ADD 2f5c179f devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921880: devres_log: (null) ADD 72cf7389 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921885: devres_log: (null) ADD f9badaa6 devm_kzalloc_release (20 bytes)
     sh-124     [000] d..1.   439.921889: devres_log: (null) ADD 0bac4bae devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921892: devres_log: (null) ADD e25a23bb devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921896: devres_log: (null) ADD 77c03a96 devm_kzalloc_release (21 bytes)
     sh-124     [000] d..1.   439.921901: devres_log: (null) ADD fbcf25d4 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921905: devres_log: (null) ADD 430046b3 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921909: devres_log: (null) ADD cb0566d5 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921912: devres_log: (null) ADD 5ec7bdc6 devm_kzalloc_release (52 bytes)
     sh-124     [000] d..1.   439.921916: devres_log: (null) ADD a8d30cb3 devm_kzalloc_release (20 bytes)
     sh-124     [000] d..1.   439.921926: devres_log: (null) ADD 655cd641 devm_kzalloc_release (80 bytes)
     sh-124     [000] d..1.   439.921931: devres_log: (null) ADD 7211e558 devm_kzalloc_release (12 bytes)
     sh-124     [000] d..1.   439.921934: devres_log: (null) ADD 1402f677 devm_kzalloc_release (12 bytes)
     sh-124     [000] d..1.   439.921937: devres_log: (null) ADD edc5c5b1 devm_kzalloc_release (68 bytes)
     sh-124     [000] d..1.   439.921941: devres_log: (null) ADD 5c7d0a3d devm_kzalloc_release (20 bytes)
     sh-124     [000] d..1.   439.922509: devres_log: 40000000.timer:counter ADD fb446f1c devm_action_release (8 bytes)

Uwe Kleine-König (23):
  counter: Use container_of instead of drvdata to track counter_device
  counter: ftm-quaddec: Drop unused platform_set_drvdata()
  counter: microchip-tcb-capture: Drop unused platform_set_drvdata()
  counter: Provide a wrapper to access device private data
  counter: 104-quad-8: Convert to counter_priv() wrapper
  counter: interrupt-cnt: Convert to counter_priv() wrapper
  counter: microchip-tcb-capture: Convert to counter_priv() wrapper
  counter: intel-qep: Convert to counter_priv() wrapper
  counter: ftm-quaddec: Convert to counter_priv() wrapper
  counter: ti-eqep: Convert to counter_priv() wrapper
  counter: stm32-lptimer-cnt: Convert to counter_priv() wrapper
  counter: stm32-timer-cnt: Convert to counter_priv() wrapper
  counter: Provide alternative counter registration functions
  counter: Update documentation for new counter registration functions
  counter: 104-quad-8: Convert to new counter registration
  counter: interrupt-cnt: Convert to new counter registration
  counter: intel-qep: Convert to new counter registration
  counter: ftm-quaddec: Convert to new counter registration
  counter: microchip-tcb-capture: Convert to new counter registration
  counter: stm32-timer-cnt: Convert to new counter registration
  counter: stm32-lptimer-cnt: Convert to new counter registration
  counter: ti-eqep: Convert to new counter registration
  counter: remove old and now unused registration API

 Documentation/driver-api/generic-counter.rst |  10 +-
 drivers/counter/104-quad-8.c                 |  93 +++++-----
 drivers/counter/counter-core.c               | 186 ++++++++++++++-----
 drivers/counter/ftm-quaddec.c                |  36 ++--
 drivers/counter/intel-qep.c                  |  46 ++---
 drivers/counter/interrupt-cnt.c              |  38 ++--
 drivers/counter/microchip-tcb-capture.c      |  44 ++---
 drivers/counter/stm32-lptimer-cnt.c          |  51 ++---
 drivers/counter/stm32-timer-cnt.c            |  48 ++---
 drivers/counter/ti-eqep.c                    |  31 ++--
 include/linux/counter.h                      |  15 +-
 11 files changed, 356 insertions(+), 242 deletions(-)

Range-diff against v2:
 1:  0f73d029e55f !  1:  164f6fc76500 counter: Use container_of instead of drvdata to track counter_device
    @@ Commit message
         There are no other users of drvdata, so the call to dev_set_drvdata can
         go away, too.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/counter-core.c ##
 2:  b2c4b1d30034 !  2:  3808b34176ed counter: ftm-quaddec: Drop unused platform_set_drvdata()
    @@ Commit message
         The driver doesn't ever use platform_get_drvdata, so drop this unused
         call.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/ftm-quaddec.c ##
 3:  ac333fe0f34e !  3:  54a846344f2f counter: microchip-tcb-capture: Drop unused platform_set_drvdata()
    @@ Commit message
         The driver doesn't ever use platform_get_drvdata, so drop this unused
         call.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/microchip-tcb-capture.c ##
 4:  adef4157e314 !  4:  c57b20dbdb7d counter: Provide a wrapper to access device private data
    @@ Commit message
         individually makes fixing device lifetime issues result in easier to
         review patches.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/counter-core.c ##
 5:  c428105f13b1 !  5:  a81b257613f1 counter: 104-quad-8: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/104-quad-8.c ##
 6:  c72800db0f05 !  6:  a57ac51c8499 counter: interrupt-cnt: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/interrupt-cnt.c ##
 7:  d9fb86250b87 !  7:  2f227060747f counter: microchip-tcb-capture: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/microchip-tcb-capture.c ##
 8:  0d1e999aa274 !  8:  0d917f687039 counter: intel-qep: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/intel-qep.c ##
 9:  a2ffdf7dbac1 !  9:  82ad8f3060e2 counter: ftm-quaddec: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/ftm-quaddec.c ##
10:  95c643c47795 <  -:  ------------ counter: ti-eqep: Convert to counter_priv() wrapper
 -:  ------------ > 10:  0ed4c223ae8e counter: ti-eqep: Convert to counter_priv() wrapper
11:  6960d9cf21d2 ! 11:  caff57fb76ad counter: stm32-lptimer-cnt: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/stm32-lptimer-cnt.c ##
12:  deeca3a39ff5 ! 12:  c45c494ed207 counter: stm32-timer-cnt: Convert to counter_priv() wrapper
    @@ Commit message
     
         This is a straight forward conversion to the new counter_priv() wrapper.
     
    +    Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/stm32-timer-cnt.c ##
13:  a9ccb6fac99f ! 13:  8427cd271336 counter: Provide alternative counter registration functions
    @@ drivers/counter/counter-core.c
      
     +struct counter_device_allochelper {
     +	struct counter_device counter;
    -+	unsigned long privdata[];
    ++
    ++	/*
    ++	 * This is cache line aligned to ensure private data behaves like if it
    ++	 * were kmalloced separately.
    ++	 */
    ++	unsigned long privdata[] ____cacheline_aligned;
     +};
     +
      static void counter_device_release(struct device *dev)
    @@ drivers/counter/counter-core.c: int counter_register(struct counter_device *cons
     +	struct counter_device_allochelper *ch;
     +	struct counter_device *counter;
     +	struct device *dev;
    -+	int id, err;
    ++	int err;
     +
     +	ch = kzalloc(sizeof(*ch) + sizeof_priv, GFP_KERNEL);
     +	if (!ch) {
    @@ drivers/counter/counter-core.c: int counter_register(struct counter_device *cons
     +
     +	/* Acquire unique ID */
     +	err = ida_alloc(&counter_ida, GFP_KERNEL);
    -+	if (err < 0) {
    ++	if (err < 0)
     +		goto err_ida_alloc;
    -+	}
     +	dev->id = err;
     +
    ++	mutex_init(&counter->ops_exist_lock);
    ++	dev->type = &counter_device_type;
    ++	dev->bus = &counter_bus_type;
    ++	dev->devt = MKDEV(MAJOR(counter_devt), dev->id);
    ++
     +	err = counter_chrdev_add(counter);
     +	if (err < 0)
     +		goto err_chrdev_add;
     +
     +	device_initialize(dev);
    -+	/* Configure device structure for Counter */
    -+	dev->type = &counter_device_type;
    -+	dev->bus = &counter_bus_type;
    -+	dev->devt = MKDEV(MAJOR(counter_devt), id);
    -+
    -+	mutex_init(&counter->ops_exist_lock);
     +
     +	return counter;
     +
    @@ drivers/counter/counter-core.c: int counter_register(struct counter_device *cons
     +{
     +	put_device(&counter->dev);
     +}
    ++EXPORT_SYMBOL_GPL(counter_put);
     +
     +/**
     + * counter_add - complete registration of a counter
    @@ drivers/counter/counter-core.c: int counter_register(struct counter_device *cons
     +	int err;
     +	struct device *dev = &counter->dev;
     +
    -+	get_device(&counter->dev);
    -+
     +	if (counter->parent) {
     +		dev->parent = counter->parent;
     +		dev->of_node = counter->parent->of_node;
    @@ drivers/counter/counter-core.c: int counter_register(struct counter_device *cons
     +		return err;
     +
     +	/* implies device_add(dev) */
    -+	err = cdev_device_add(&counter->chrdev, dev);
    -+
    -+	return err;
    ++	return cdev_device_add(&counter->chrdev, dev);
     +}
     +EXPORT_SYMBOL_GPL(counter_add);
     +
      /**
       * counter_unregister - unregister Counter from the system
       * @counter:	pointer to Counter to unregister
    +@@ drivers/counter/counter-core.c: void counter_unregister(struct counter_device *const counter)
    + 
    + 	mutex_unlock(&counter->ops_exist_lock);
    + 
    +-	put_device(&counter->dev);
    ++	if (counter->legacy_device)
    ++		put_device(&counter->dev);
    + }
    + EXPORT_SYMBOL_GPL(counter_unregister);
    + 
     @@ drivers/counter/counter-core.c: int devm_counter_register(struct device *dev,
      }
      EXPORT_SYMBOL_GPL(devm_counter_register);
    @@ drivers/counter/counter-core.c: int devm_counter_register(struct device *dev,
     +	counter_put(counter);
     +}
     +
    ++/**
    ++ * devm_counter_alloc - allocate a counter_device
    ++ * @dev: the device to register the release callback for
    ++ * @sizeof_priv: size of the driver private data
    ++ *
    ++ * This is the device managed version of counter_add(). It registers a cleanup
    ++ * callback to care for calling counter_put().
    ++ */
     +struct counter_device *devm_counter_alloc(struct device *dev, size_t sizeof_priv)
     +{
     +	struct counter_device *counter;
    @@ drivers/counter/counter-core.c: int devm_counter_register(struct device *dev,
     +}
     +EXPORT_SYMBOL_GPL(devm_counter_alloc);
     +
    ++/**
    ++ * devm_counter_add - complete registration of a counter
    ++ * @dev: the device to register the release callback for
    ++ * @counter: the counter to add
    ++ *
    ++ * This is the device managed version of counter_add(). It registers a cleanup
    ++ * callback to care for calling counter_unregister().
    ++ */
     +int devm_counter_add(struct device *dev,
     +		     struct counter_device *const counter)
     +{
14:  7ae52f5b75f4 ! 14:  f841ae4f8909 counter: Update documentation for new counter registration functions
    @@ Commit message
         In order to replace the counter registration API also update the
         documentation to the new way.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## Documentation/driver-api/generic-counter.rst ##
    @@ Documentation/driver-api/generic-counter.rst: order to communicate with the devi
     -it to the counter_unregister function. Similarly, the
     -devm_counter_register function may be used if device memory-managed
     -registration is desired.
    -+A counter_device structure is supposed to be allocated using counter_alloc()
    -+and may be registered to the system by passing it to the counter_add()
    -+function, and unregistered by passing it to the counter_unregister function.
    -+There are device managed variants of these functions: devm_counter_alloc() and
    ++A counter_device structure is allocated using counter_alloc() and then
    ++registered to the system by passing it to the counter_add() function, and
    ++unregistered by passing it to the counter_unregister function. There are
    ++device managed variants of these functions: devm_counter_alloc() and
     +devm_counter_add().
      
      The struct counter_comp structure is used to define counter extensions
15:  02e54fed5b4e ! 15:  db635ea62ba4 counter: 104-quad-8: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: f1d8a071d45b ("counter: 104-quad-8: Add Generic Counter interface support")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/104-quad-8.c ##
    @@ drivers/counter/104-quad-8.c: MODULE_PARM_DESC(irq, "ACCES 104-QUAD-8 interrupt
      	unsigned int fck_prescaler[QUAD8_NUM_COUNTERS];
      	unsigned int preset[QUAD8_NUM_COUNTERS];
      	unsigned int count_mode[QUAD8_NUM_COUNTERS];
    +@@ drivers/counter/104-quad-8.c: static struct counter_count quad8_counts[] = {
    + 
    + static irqreturn_t quad8_irq_handler(int irq, void *private)
    + {
    +-	struct quad8 *const priv = private;
    ++	struct counter_device *counter = private;
    ++	struct quad8 *const priv = counter_priv(counter);
    + 	const unsigned long base = priv->base;
    + 	unsigned long irq_status;
    + 	unsigned long channel;
    +@@ drivers/counter/104-quad-8.c: static irqreturn_t quad8_irq_handler(int irq, void *private)
    + 			continue;
    + 		}
    + 
    +-		counter_push_event(&priv->counter, event, channel);
    ++		counter_push_event(counter, event, channel);
    + 	}
    + 
    + 	/* Clear pending interrupts on device */
     @@ drivers/counter/104-quad-8.c: static irqreturn_t quad8_irq_handler(int irq, void *private)
      
      static int quad8_probe(struct device *dev, unsigned int id)
    @@ drivers/counter/104-quad-8.c: static int quad8_probe(struct device *dev, unsigne
      
      	err = devm_request_irq(dev, irq[id], quad8_irq_handler, IRQF_SHARED,
     -			       priv->counter.name, priv);
    -+			       counter->name, priv);
    ++			       counter->name, counter);
      	if (err)
      		return err;
      
16:  728494402580 ! 16:  3ef149d41223 counter: interrupt-cnt: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: a55ebd47f21f ("counter: add IRQ or GPIO based counter")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/interrupt-cnt.c ##
17:  fe5266b17ded ! 17:  ad4a85dc9f99 counter: intel-qep: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: b711f687a1c1 ("counter: Add support for Intel Quadrature Encoder Peripheral")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/intel-qep.c ##
18:  e2610d673a23 ! 18:  192c5bba00e4 counter: ftm-quaddec: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: a3b9a99980d9 ("counter: add FlexTimer Module Quadrature decoder counter driver")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
    - ## drivers/counter/104-quad-8.c ##
    -@@ drivers/counter/104-quad-8.c: static struct counter_count quad8_counts[] = {
    - 
    - static irqreturn_t quad8_irq_handler(int irq, void *private)
    - {
    --	struct quad8 *const priv = private;
    -+	struct counter_device *counter = private;
    -+	struct quad8 *const priv = counter_priv(counter);
    - 	const unsigned long base = priv->base;
    - 	unsigned long irq_status;
    - 	unsigned long channel;
    -@@ drivers/counter/104-quad-8.c: static irqreturn_t quad8_irq_handler(int irq, void *private)
    - 			continue;
    - 		}
    - 
    --		counter_push_event(&priv->counter, event, channel);
    -+		counter_push_event(counter, event, channel);
    - 	}
    - 
    - 	/* Clear pending interrupts on device */
    -@@ drivers/counter/104-quad-8.c: static int quad8_probe(struct device *dev, unsigned int id)
    - 	outb(QUAD8_CHAN_OP_ENABLE_INTERRUPT_FUNC, base[id] + QUAD8_REG_CHAN_OP);
    - 
    - 	err = devm_request_irq(dev, irq[id], quad8_irq_handler, IRQF_SHARED,
    --			       counter->name, priv);
    -+			       counter->name, counter);
    - 	if (err)
    - 		return err;
    - 
    -
      ## drivers/counter/ftm-quaddec.c ##
     @@
      	})
    @@ drivers/counter/ftm-quaddec.c: static struct counter_count ftm_quaddec_counts =
      {
     +	struct counter_device *counter;
      	struct ftm_quaddec *ftm;
    --
    + 
      	struct device_node *node = pdev->dev.of_node;
      	struct resource *io;
      	int ret;
19:  fa10a9c1f369 ! 19:  8df134fb3723 counter: microchip-tcb-capture: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: 106b104137fd ("counter: Add microchip TCB capture counter")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/microchip-tcb-capture.c ##
20:  f697f9a17e6d ! 20:  ec4c0c5e183f counter: stm32-timer-cnt: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: ad29937e206f ("counter: Add STM32 Timer quadrature encoder")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/stm32-timer-cnt.c ##
21:  4368748521cc ! 21:  2b800479151d counter: stm32-lptimer-cnt: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: 597f55e3f36c ("counter: stm32-lptimer: add counter device")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/stm32-lptimer-cnt.c ##
22:  47485ea4bac8 ! 22:  97a2e4aac286 counter: ti-eqep: Convert to new counter registration
    @@ Commit message
         struct device.
     
         Fixes: f213729f6796 ("counter: new TI eQEP driver")
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/ti-eqep.c ##
23:  eb26d7efeede ! 23:  db76bf498f3f counter: remove old and now unused registration API
    @@ Commit message
         Usage of counter_register() yields issues in device lifetime tracking. All
         drivers were converted to the new API, so the old one can go away.
     
    +    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    +    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
         Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
     
      ## drivers/counter/counter-core.c ##
    @@ drivers/counter/counter-core.c: static dev_t counter_devt;
      /**
       * counter_alloc - allocate a counter_device
       * @sizeof_priv: size of the driver private data
    +@@ drivers/counter/counter-core.c: void counter_unregister(struct counter_device *const counter)
    + 	wake_up(&counter->events_wait);
    + 
    + 	mutex_unlock(&counter->ops_exist_lock);
    +-
    +-	if (counter->legacy_device)
    +-		put_device(&counter->dev);
    + }
    + EXPORT_SYMBOL_GPL(counter_unregister);
    + 
     @@ drivers/counter/counter-core.c: static void devm_counter_release(void *counter)
      	counter_unregister(counter);
      }

base-commit: a7904a538933c525096ca2ccde1e60d0ee62c08e
prerequisite-patch-id: 9459ad8bc78190558df9123f8bebe28ca1c396ea
-- 
2.34.1


^ permalink raw reply	[flat|nested] 48+ messages in thread

end of thread, other threads:[~2022-01-11  9:56 UTC | newest]

Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-29 15:44 [PATCH v3 00/23] counter: cleanups and device lifetime fixes Uwe Kleine-König
2021-12-29 15:44 ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 01/23] counter: Use container_of instead of drvdata to track counter_device Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 02/23] counter: ftm-quaddec: Drop unused platform_set_drvdata() Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 03/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 04/23] counter: Provide a wrapper to access device private data Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 05/23] counter: 104-quad-8: Convert to counter_priv() wrapper Uwe Kleine-König
2021-12-30 13:19   ` Greg Kroah-Hartman
2021-12-29 15:44 ` [PATCH v3 06/23] counter: interrupt-cnt: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 07/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 08/23] counter: intel-qep: " Uwe Kleine-König
2021-12-30 10:26   ` Jarkko Nikula
2021-12-29 15:44 ` [PATCH v3 09/23] counter: ftm-quaddec: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 10/23] counter: ti-eqep: " Uwe Kleine-König
2021-12-29 22:42   ` William Breathitt Gray
2021-12-29 22:56   ` David Lechner
2021-12-29 15:44 ` [PATCH v3 11/23] counter: stm32-lptimer-cnt: " Uwe Kleine-König
2021-12-29 15:44   ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 12/23] counter: stm32-timer-cnt: " Uwe Kleine-König
2021-12-29 15:44   ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 13/23] counter: Provide alternative counter registration functions Uwe Kleine-König
2021-12-29 17:06   ` Jonathan Cameron
2021-12-30  8:38     ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 14/23] counter: Update documentation for new " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 15/23] counter: 104-quad-8: Convert to new counter registration Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 16/23] counter: interrupt-cnt: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 17/23] counter: intel-qep: " Uwe Kleine-König
2021-12-30 10:26   ` Jarkko Nikula
2021-12-29 15:44 ` [PATCH v3 18/23] counter: ftm-quaddec: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 19/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 20/23] counter: stm32-timer-cnt: " Uwe Kleine-König
2021-12-29 15:44   ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 21/23] counter: stm32-lptimer-cnt: " Uwe Kleine-König
2021-12-29 15:44   ` Uwe Kleine-König
2021-12-29 15:44 ` [PATCH v3 22/23] counter: ti-eqep: " Uwe Kleine-König
2021-12-29 22:56   ` David Lechner
2021-12-29 15:44 ` [PATCH v3 23/23] counter: remove old and now unused registration API Uwe Kleine-König
2021-12-30  8:53 ` [PATCH v3 00/23] counter: cleanups and device lifetime fixes Uwe Kleine-König
2021-12-30  8:53   ` Uwe Kleine-König
2021-12-30 12:31   ` Greg Kroah-Hartman
2021-12-30 12:31     ` Greg Kroah-Hartman
2021-12-30 14:58   ` Jonathan Cameron
2021-12-30 14:58     ` Jonathan Cameron
2021-12-30 15:08     ` Uwe Kleine-König
2021-12-30 15:08       ` Uwe Kleine-König
2022-01-05 12:26 ` William Breathitt Gray
2022-01-06 15:13   ` Uwe Kleine-König
2022-01-11  9:56     ` Jarkko Nikula

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.