lkml.org 
[lkml]   [2021]   [Dec]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 18/23] counter: ftm-quaddec: Convert to new counter registration
    On Mon, Dec 27, 2021 at 10:45:21AM +0100, Uwe Kleine-König wrote:
    > This fixes device lifetime issues where it was possible to free a live
    > struct device.
    >
    > Fixes: a3b9a99980d9 ("counter: add FlexTimer Module Quadrature decoder counter driver")
    > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>

    Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>

    > ---
    > drivers/counter/104-quad-8.c | 7 ++++---
    > drivers/counter/ftm-quaddec.c | 27 +++++++++++++--------------
    > 2 files changed, 17 insertions(+), 17 deletions(-)
    >
    > diff --git a/drivers/counter/104-quad-8.c b/drivers/counter/104-quad-8.c
    > index 4315b14f239e..680c7ba943a4 100644
    > --- a/drivers/counter/104-quad-8.c
    > +++ b/drivers/counter/104-quad-8.c
    > @@ -1084,7 +1084,8 @@ 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;
    > @@ -1115,7 +1116,7 @@ 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 */
    > @@ -1192,7 +1193,7 @@ 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;
    >
    > diff --git a/drivers/counter/ftm-quaddec.c b/drivers/counter/ftm-quaddec.c
    > index f5d92df6a611..c636183b1337 100644
    > --- a/drivers/counter/ftm-quaddec.c
    > +++ b/drivers/counter/ftm-quaddec.c
    > @@ -26,7 +26,6 @@
    > })
    >
    > struct ftm_quaddec {
    > - struct counter_device counter;
    > struct platform_device *pdev;
    > void __iomem *ftm_base;
    > bool big_endian;
    > @@ -259,15 +258,16 @@ static struct counter_count ftm_quaddec_counts = {
    >
    > static int ftm_quaddec_probe(struct platform_device *pdev)
    > {
    > + struct counter_device *counter;
    > struct ftm_quaddec *ftm;
    > -
    > struct device_node *node = pdev->dev.of_node;
    > struct resource *io;
    > int ret;
    >
    > - ftm = devm_kzalloc(&pdev->dev, sizeof(*ftm), GFP_KERNEL);
    > - if (!ftm)
    > + counter = devm_counter_alloc(&pdev->dev, sizeof(*ftm));
    > + if (!counter)
    > return -ENOMEM;
    > + ftm = counter_priv(counter);
    >
    > io = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    > if (!io) {
    > @@ -283,14 +283,13 @@ static int ftm_quaddec_probe(struct platform_device *pdev)
    > dev_err(&pdev->dev, "Failed to map memory region\n");
    > return -EINVAL;
    > }
    > - ftm->counter.name = dev_name(&pdev->dev);
    > - ftm->counter.parent = &pdev->dev;
    > - ftm->counter.ops = &ftm_quaddec_cnt_ops;
    > - ftm->counter.counts = &ftm_quaddec_counts;
    > - ftm->counter.num_counts = 1;
    > - ftm->counter.signals = ftm_quaddec_signals;
    > - ftm->counter.num_signals = ARRAY_SIZE(ftm_quaddec_signals);
    > - ftm->counter.priv = ftm;
    > + counter->name = dev_name(&pdev->dev);
    > + counter->parent = &pdev->dev;
    > + counter->ops = &ftm_quaddec_cnt_ops;
    > + counter->counts = &ftm_quaddec_counts;
    > + counter->num_counts = 1;
    > + counter->signals = ftm_quaddec_signals;
    > + counter->num_signals = ARRAY_SIZE(ftm_quaddec_signals);
    >
    > mutex_init(&ftm->ftm_quaddec_mutex);
    >
    > @@ -300,9 +299,9 @@ static int ftm_quaddec_probe(struct platform_device *pdev)
    > if (ret)
    > return ret;
    >
    > - ret = devm_counter_register(&pdev->dev, &ftm->counter);
    > + ret = devm_counter_add(&pdev->dev, counter);
    > if (ret)
    > - return ret;
    > + return dev_err_probe(&pdev->dev, ret, "Failed to add counter\n");
    >
    > return 0;
    > }
    > --
    > 2.33.0
    >
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2021-12-29 09:34    [W:4.052 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site