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

Hello,

this is v2 of this series, it's goal is to fix struct device lifetime issues as
pointed out in patch #13. The patches up to patch #12 are only prepatory and
cleanup patches. Patch #13 provides the needed functions to fix the issues in
all drivers (patches #15 to #22). The last patch removes the then unused API
calls.

The changes compared to v1 is only build fixes that I missed to include in v1,
they were only in my working copy. Additionally I changed:

diff --git a/drivers/counter/counter-core.c b/drivers/counter/counter-core.c
index cdc6004a7e77..3f7dc5718423 100644
--- a/drivers/counter/counter-core.c
+++ b/drivers/counter/counter-core.c
@@ -27,7 +27,7 @@ static DEFINE_IDA(counter_ida);
 
 struct counter_device_allochelper {
 	struct counter_device counter;
-	unsigned long privdata[0];
+	unsigned long privdata[];
 };
 
 static void counter_device_release(struct device *dev)

The stm32-timer-cnt driver was used to test
this series, the other drivers are only compile tested.


To complete the information from the v1 thread: There are a few more
issues I found while working on this patch set:

 - 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.

 - I wonder why counter is a bus and not a class device type. There is
   no driver that would ever bind a counter device, is there? So
   /sys/bus/counter/driver is always empty.

Do whatever you want with this list, I won't address these in the near
future.

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               | 168 +++++++++++++------
 drivers/counter/ftm-quaddec.c                |  37 ++--
 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                    |  47 +++---
 include/linux/counter.h                      |  15 +-
 11 files changed, 348 insertions(+), 249 deletions(-)


base-commit: a7904a538933c525096ca2ccde1e60d0ee62c08e
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 125+ messages in thread
* Re: [PATCH v2 13/23] counter: Provide alternative counter registration functions
  2021-12-27  9:45 ` [PATCH v2 13/23] counter: Provide alternative counter registration functions Uwe Kleine-König
  2021-12-27 12:16   ` Lars-Peter Clausen
@ 2022-01-06 10:53 ` Dan Carpenter
  2021-12-28 18:00   ` Jonathan Cameron
  2021-12-29  8:13   ` William Breathitt Gray
  3 siblings, 0 replies; 125+ messages in thread
From: kernel test robot @ 2021-12-28 19:45 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211227094526.698714-14-u.kleine-koenig@pengutronix.de>
References: <20211227094526.698714-14-u.kleine-koenig@pengutronix.de>
TO: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
TO: William Breathitt Gray <vilhelm.gray@gmail.com>
CC: "Lars-Peter Clausen" <lars@metafoo.de>
CC: kernel(a)pengutronix.de
CC: Jonathan Cameron <Jonathan.Cameron@huawei.com>
CC: linux-iio(a)vger.kernel.org
CC: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
CC: linux-kernel(a)vger.kernel.org

Hi "Uwe,

I love your patch! Perhaps something to improve:

[auto build test WARNING on a7904a538933c525096ca2ccde1e60d0ee62c08e]

url:    https://github.com/0day-ci/linux/commits/Uwe-Kleine-K-nig/counter-cleanups-and-device-lifetime-fixes/20211227-174815
base:   a7904a538933c525096ca2ccde1e60d0ee62c08e
:::::: branch date: 34 hours ago
:::::: commit date: 34 hours ago
config: i386-randconfig-m021-20211227 (https://download.01.org/0day-ci/archive/20211229/202112290340.PMwi47LV-lkp(a)intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

smatch warnings:
drivers/counter/counter-core.c:175 counter_alloc() error: uninitialized symbol 'id'.

vim +/id +175 drivers/counter/counter-core.c

aaec1a0f76ec25 William Breathitt Gray 2021-08-27  134  
250e0e3d91caea Uwe Kleine-König       2021-12-27  135  /**
250e0e3d91caea Uwe Kleine-König       2021-12-27  136   * counter_alloc - allocate a counter_device
250e0e3d91caea Uwe Kleine-König       2021-12-27  137   * @sizeof_priv: size of the driver private data
250e0e3d91caea Uwe Kleine-König       2021-12-27  138   *
250e0e3d91caea Uwe Kleine-König       2021-12-27  139   * This is part one of counter registration. The structure is allocated
250e0e3d91caea Uwe Kleine-König       2021-12-27  140   * dynamically to ensure the right lifetime for the embedded struct device.
250e0e3d91caea Uwe Kleine-König       2021-12-27  141   *
250e0e3d91caea Uwe Kleine-König       2021-12-27  142   * If this succeeds, call counter_put() to get rid of the counter_device again.
250e0e3d91caea Uwe Kleine-König       2021-12-27  143   */
250e0e3d91caea Uwe Kleine-König       2021-12-27  144  struct counter_device *counter_alloc(size_t sizeof_priv)
250e0e3d91caea Uwe Kleine-König       2021-12-27  145  {
250e0e3d91caea Uwe Kleine-König       2021-12-27  146  	struct counter_device_allochelper *ch;
250e0e3d91caea Uwe Kleine-König       2021-12-27  147  	struct counter_device *counter;
250e0e3d91caea Uwe Kleine-König       2021-12-27  148  	struct device *dev;
250e0e3d91caea Uwe Kleine-König       2021-12-27  149  	int id, err;
250e0e3d91caea Uwe Kleine-König       2021-12-27  150  
250e0e3d91caea Uwe Kleine-König       2021-12-27  151  	ch = kzalloc(sizeof(*ch) + sizeof_priv, GFP_KERNEL);
250e0e3d91caea Uwe Kleine-König       2021-12-27  152  	if (!ch) {
250e0e3d91caea Uwe Kleine-König       2021-12-27  153  		err = -ENOMEM;
250e0e3d91caea Uwe Kleine-König       2021-12-27  154  		goto err_alloc_ch;
250e0e3d91caea Uwe Kleine-König       2021-12-27  155  	}
250e0e3d91caea Uwe Kleine-König       2021-12-27  156  
250e0e3d91caea Uwe Kleine-König       2021-12-27  157  	counter = &ch->counter;
250e0e3d91caea Uwe Kleine-König       2021-12-27  158  	dev = &counter->dev;
250e0e3d91caea Uwe Kleine-König       2021-12-27  159  
250e0e3d91caea Uwe Kleine-König       2021-12-27  160  	/* Acquire unique ID */
250e0e3d91caea Uwe Kleine-König       2021-12-27  161  	err = ida_alloc(&counter_ida, GFP_KERNEL);
250e0e3d91caea Uwe Kleine-König       2021-12-27  162  	if (err < 0) {
250e0e3d91caea Uwe Kleine-König       2021-12-27  163  		goto err_ida_alloc;
250e0e3d91caea Uwe Kleine-König       2021-12-27  164  	}
250e0e3d91caea Uwe Kleine-König       2021-12-27  165  	dev->id = err;
250e0e3d91caea Uwe Kleine-König       2021-12-27  166  
250e0e3d91caea Uwe Kleine-König       2021-12-27  167  	err = counter_chrdev_add(counter);
250e0e3d91caea Uwe Kleine-König       2021-12-27  168  	if (err < 0)
250e0e3d91caea Uwe Kleine-König       2021-12-27  169  		goto err_chrdev_add;
250e0e3d91caea Uwe Kleine-König       2021-12-27  170  
250e0e3d91caea Uwe Kleine-König       2021-12-27  171  	device_initialize(dev);
250e0e3d91caea Uwe Kleine-König       2021-12-27  172  	/* Configure device structure for Counter */
250e0e3d91caea Uwe Kleine-König       2021-12-27  173  	dev->type = &counter_device_type;
250e0e3d91caea Uwe Kleine-König       2021-12-27  174  	dev->bus = &counter_bus_type;
250e0e3d91caea Uwe Kleine-König       2021-12-27 @175  	dev->devt = MKDEV(MAJOR(counter_devt), id);
250e0e3d91caea Uwe Kleine-König       2021-12-27  176  
250e0e3d91caea Uwe Kleine-König       2021-12-27  177  	mutex_init(&counter->ops_exist_lock);
250e0e3d91caea Uwe Kleine-König       2021-12-27  178  
250e0e3d91caea Uwe Kleine-König       2021-12-27  179  	return counter;
250e0e3d91caea Uwe Kleine-König       2021-12-27  180  
250e0e3d91caea Uwe Kleine-König       2021-12-27  181  err_chrdev_add:
250e0e3d91caea Uwe Kleine-König       2021-12-27  182  
250e0e3d91caea Uwe Kleine-König       2021-12-27  183  	ida_free(&counter_ida, dev->id);
250e0e3d91caea Uwe Kleine-König       2021-12-27  184  err_ida_alloc:
250e0e3d91caea Uwe Kleine-König       2021-12-27  185  
250e0e3d91caea Uwe Kleine-König       2021-12-27  186  	kfree(ch);
250e0e3d91caea Uwe Kleine-König       2021-12-27  187  err_alloc_ch:
250e0e3d91caea Uwe Kleine-König       2021-12-27  188  
250e0e3d91caea Uwe Kleine-König       2021-12-27  189  	return ERR_PTR(err);
250e0e3d91caea Uwe Kleine-König       2021-12-27  190  }
250e0e3d91caea Uwe Kleine-König       2021-12-27  191  EXPORT_SYMBOL_GPL(counter_alloc);
250e0e3d91caea Uwe Kleine-König       2021-12-27  192  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

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

end of thread, other threads:[~2022-01-06 10:54 UTC | newest]

Thread overview: 125+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-27  9:45 [PATCH v2 00/23] counter: cleanups and device lifetime fixes Uwe Kleine-König
2021-12-27  9:45 ` Uwe Kleine-König
2021-12-27  9:45 ` [PATCH v2 01/23] counter: Use container_of instead of drvdata to track counter_device Uwe Kleine-König
2021-12-28 17:14   ` Jonathan Cameron
2021-12-29  6:38   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 02/23] counter: ftm-quaddec: Drop unused platform_set_drvdata() Uwe Kleine-König
2021-12-28 17:37   ` Jonathan Cameron
2021-12-29  6:42   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 03/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 17:38   ` Jonathan Cameron
2021-12-28 17:38     ` Jonathan Cameron
2021-12-29  6:44   ` William Breathitt Gray
2021-12-29  6:44     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 04/23] counter: Provide a wrapper to access device private data Uwe Kleine-König
2021-12-27 11:02   ` Greg Kroah-Hartman
2021-12-27 11:34     ` Lars-Peter Clausen
2021-12-27 11:52       ` Greg Kroah-Hartman
2021-12-27 12:28         ` Lars-Peter Clausen
2021-12-28 18:01   ` Jonathan Cameron
2021-12-29  6:47   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 05/23] counter: 104-quad-8: Convert to counter_priv() wrapper Uwe Kleine-König
2021-12-28 18:02   ` Jonathan Cameron
2021-12-29 11:11     ` Uwe Kleine-König
2021-12-29  7:27   ` William Breathitt Gray
2021-12-29 11:15     ` Uwe Kleine-König
2021-12-29 22:40       ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 06/23] counter: interrupt-cnt: " Uwe Kleine-König
2021-12-28 18:04   ` Jonathan Cameron
2021-12-29  7:34   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 07/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 18:05   ` Jonathan Cameron
2021-12-28 18:05     ` Jonathan Cameron
2021-12-29  7:35   ` William Breathitt Gray
2021-12-29  7:35     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 08/23] counter: intel-qep: " Uwe Kleine-König
2021-12-28 18:06   ` Jonathan Cameron
2021-12-29  7:35   ` William Breathitt Gray
2021-12-29 12:43   ` Jarkko Nikula
2021-12-27  9:45 ` [PATCH v2 09/23] counter: ftm-quaddec: " Uwe Kleine-König
2021-12-28 18:07   ` Jonathan Cameron
2021-12-29  7:36   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 10/23] counter: ti-eqep: " Uwe Kleine-König
2021-12-28 18:07   ` Jonathan Cameron
2021-12-29  7:45   ` William Breathitt Gray
2021-12-29 11:19     ` Uwe Kleine-König
2021-12-27  9:45 ` [PATCH v2 11/23] counter: stm32-lptimer-cnt: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 18:08   ` Jonathan Cameron
2021-12-28 18:08     ` Jonathan Cameron
2021-12-29  7:48   ` William Breathitt Gray
2021-12-29  7:48     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 12/23] counter: stm32-timer-cnt: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 18:08   ` Jonathan Cameron
2021-12-28 18:08     ` Jonathan Cameron
2021-12-29  7:48   ` William Breathitt Gray
2021-12-29  7:48     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 13/23] counter: Provide alternative counter registration functions Uwe Kleine-König
2021-12-27 12:16   ` Lars-Peter Clausen
2021-12-28 11:22     ` Uwe Kleine-König
2021-12-27 12:18   ` kernel test robot
2021-12-27 12:18     ` kernel test robot
2021-12-28 18:00   ` Jonathan Cameron
2021-12-29 11:27     ` Uwe Kleine-König
2021-12-29 12:07       ` Uwe Kleine-König
2021-12-29 13:49     ` Jarkko Nikula
2021-12-29 15:47       ` Uwe Kleine-König
2021-12-29  8:13   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 14/23] counter: Update documentation for new " Uwe Kleine-König
2021-12-28 18:12   ` Jonathan Cameron
2021-12-29  8:19     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 15/23] counter: 104-quad-8: Convert to new counter registration Uwe Kleine-König
2021-12-27 12:19   ` Lars-Peter Clausen
2021-12-28 11:06     ` Uwe Kleine-König
2021-12-28 18:17   ` Jonathan Cameron
2021-12-29  8:24   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 16/23] counter: interrupt-cnt: " Uwe Kleine-König
2021-12-27 10:59   ` Greg Kroah-Hartman
2021-12-27 11:21     ` Lars-Peter Clausen
2021-12-27 11:34       ` Greg Kroah-Hartman
2021-12-27 11:44         ` Lars-Peter Clausen
2021-12-27 21:09         ` Uwe Kleine-König
2021-12-28 18:18   ` Jonathan Cameron
2021-12-29  8:27   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 17/23] counter: intel-qep: " Uwe Kleine-König
2021-12-27 15:02   ` Jarkko Nikula
2021-12-28 10:56     ` Uwe Kleine-König
2021-12-29 12:42       ` Jarkko Nikula
2021-12-28 18:20   ` Jonathan Cameron
2021-12-29  8:29   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 18/23] counter: ftm-quaddec: " Uwe Kleine-König
2021-12-28 18:23   ` Jonathan Cameron
2021-12-29  8:33   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 19/23] counter: microchip-tcb-capture: " Uwe Kleine-König
2021-12-28 18:24   ` Jonathan Cameron
2021-12-29  8:36   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 20/23] counter: stm32-timer-cnt: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 18:25   ` Jonathan Cameron
2021-12-28 18:25     ` Jonathan Cameron
2021-12-29  8:37   ` William Breathitt Gray
2021-12-29  8:37     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 21/23] counter: stm32-lptimer-cnt: " Uwe Kleine-König
2021-12-27  9:45   ` Uwe Kleine-König
2021-12-28 18:26   ` Jonathan Cameron
2021-12-28 18:26     ` Jonathan Cameron
2021-12-29  8:39   ` William Breathitt Gray
2021-12-29  8:39     ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 22/23] counter: ti-eqep: " Uwe Kleine-König
2021-12-28 18:29   ` Jonathan Cameron
2021-12-29  8:41   ` William Breathitt Gray
2021-12-27  9:45 ` [PATCH v2 23/23] counter: remove old and now unused registration API Uwe Kleine-König
2021-12-28 18:31   ` Jonathan Cameron
2021-12-29  8:43   ` William Breathitt Gray
2021-12-27 12:25 ` [PATCH v2 00/23] counter: cleanups and device lifetime fixes Lars-Peter Clausen
2021-12-27 12:25   ` Lars-Peter Clausen
2021-12-28 17:35   ` Jonathan Cameron
2021-12-28 17:35     ` Jonathan Cameron
2021-12-29  8:49     ` William Breathitt Gray
2021-12-29  8:49       ` William Breathitt Gray
2021-12-28 19:45 [PATCH v2 13/23] counter: Provide alternative counter registration functions kernel test robot
2022-01-06 10:53 ` Dan Carpenter
2022-01-06 10:53 ` Dan Carpenter

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.