From: Greg KH <gregkh@linuxfoundation.org>
To: Dragan Cvetic <draganc@xilinx.com>
Cc: "mark.rutland@arm.com" <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"arnd@arndb.de" <arnd@arndb.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"robh+dt@kernel.org" <robh+dt@kernel.org>,
Michal Simek <michals@xilinx.com>,
Derek Kiernan <dkiernan@xilinx.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
Date: Sun, 9 Jun 2019 23:10:26 +0200 [thread overview]
Message-ID: <20190609211026.GA9859@kroah.com> (raw)
In-Reply-To: <CH2PR02MB6359778016A4BDCBD29EA275CB120@CH2PR02MB6359.namprd02.prod.outlook.com>
On Sun, Jun 09, 2019 at 06:48:31PM +0000, Dragan Cvetic wrote:
>
>
> > -----Original Message-----
> > From: Greg KH [mailto:gregkh@linuxfoundation.org]
> > Sent: Sunday 9 June 2019 12:23
> > To: Dragan Cvetic <draganc@xilinx.com>
> > Cc: arnd@arndb.de; Michal Simek <michals@xilinx.com>; linux-arm-kernel@lists.infradead.org; robh+dt@kernel.org;
> > mark.rutland@arm.com; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; Derek Kiernan <dkiernan@xilinx.com>
> > Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
> >
> > On Sun, Jun 09, 2019 at 01:04:07AM +0100, Dragan Cvetic wrote:
> > > Implement a platform driver that matches with xlnx,
> > > sd-fec-1.1 device tree node and registers as a character
> > > device, including:
> > > - SD-FEC driver binds to sdfec DT node.
> > > - creates and initialise an initial driver dev structure.
> > > - add the driver in Linux build and Kconfig.
> > >
> > > Tested-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > Signed-off-by: Derek Kiernan <derek.kiernan@xilinx.com>
> > > Signed-off-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > ---
> > > drivers/misc/Kconfig | 12 +++++
> > > drivers/misc/Makefile | 1 +
> > > drivers/misc/xilinx_sdfec.c | 118 ++++++++++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 131 insertions(+)
> > > create mode 100644 drivers/misc/xilinx_sdfec.c
> > >
> > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> > > index 6b0417b..319a6bf 100644
> > > --- a/drivers/misc/Kconfig
> > > +++ b/drivers/misc/Kconfig
> > > @@ -471,6 +471,18 @@ config PCI_ENDPOINT_TEST
> > > Enable this configuration option to enable the host side test driver
> > > for PCI Endpoint.
> > >
> > > +config XILINX_SDFEC
> > > + tristate "Xilinx SDFEC 16"
> > > + help
> > > + This option enables support for the Xilinx SDFEC (Soft Decision
> > > + Forward Error Correction) driver. This enables a char driver
> > > + for the SDFEC.
> > > +
> > > + You may select this driver if your design instantiates the
> > > + SDFEC(16nm) hardened block. To compile this as a module choose M.
> > > +
> > > + If unsure, say N.
> > > +
> > > config MISC_RTSX
> > > tristate
> > > default MISC_RTSX_PCI || MISC_RTSX_USB
> > > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
> > > index b9affcd..0cb3546 100644
> > > --- a/drivers/misc/Makefile
> > > +++ b/drivers/misc/Makefile
> > > @@ -59,3 +59,4 @@ obj-$(CONFIG_OCXL) += ocxl/
> > > obj-y += cardreader/
> > > obj-$(CONFIG_PVPANIC) += pvpanic.o
> > > obj-$(CONFIG_HABANA_AI) += habanalabs/
> > > +obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
> > > diff --git a/drivers/misc/xilinx_sdfec.c b/drivers/misc/xilinx_sdfec.c
> > > new file mode 100644
> > > index 0000000..75cc980
> > > --- /dev/null
> > > +++ b/drivers/misc/xilinx_sdfec.c
> > > @@ -0,0 +1,118 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Xilinx SDFEC
> > > + *
> > > + * Copyright (C) 2019 Xilinx, Inc.
> > > + *
> > > + * Description:
> > > + * This driver is developed for SDFEC16 (Soft Decision FEC 16nm)
> > > + * IP. It exposes a char device which supports file operations
> > > + * like open(), close() and ioctl().
> > > + */
> > > +
> > > +#include <linux/miscdevice.h>
> > > +#include <linux/io.h>
> > > +#include <linux/interrupt.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/module.h>
> > > +#include <linux/of_platform.h>
> > > +#include <linux/poll.h>
> > > +#include <linux/slab.h>
> > > +#include <linux/clk.h>
> > > +
> > > +static int xsdfec_ndevs;
> >
> > You should use an idr for this, not just a number you bump up and down.
> > This will not work properly at all.
> >
> > Think about this situation:
> > probe device 0
> > xsdfec_ndevs = 1
> > probe device 1
> > xsdfec_ndevs = 2
> > remove device 0
> > xsdfec_ndevs = 0
> > probe another device
> > misc device fails due to duplicate name.
> >
>
> My bad.
> I can use idr, but couldn't be better optimized code if use simple mutex to protect the variable.
mutex does not protect from this at all, it's a logic bug. Think about
adding 5 devices and then removing the 2nd one. What is the number
assigned to the new device that is added afterward?
And you need a mutex for the idr anyway, if you are touching it in a non
probe/release callback way (those are already serialized by the bus
lock).
thanks,
greg k-h
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <gregkh@linuxfoundation.org>
To: Dragan Cvetic <draganc@xilinx.com>
Cc: "mark.rutland@arm.com" <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"arnd@arndb.de" <arnd@arndb.de>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"robh+dt@kernel.org" <robh+dt@kernel.org>,
Michal Simek <michals@xilinx.com>,
Derek Kiernan <dkiernan@xilinx.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
Date: Sun, 9 Jun 2019 23:10:26 +0200 [thread overview]
Message-ID: <20190609211026.GA9859@kroah.com> (raw)
In-Reply-To: <CH2PR02MB6359778016A4BDCBD29EA275CB120@CH2PR02MB6359.namprd02.prod.outlook.com>
On Sun, Jun 09, 2019 at 06:48:31PM +0000, Dragan Cvetic wrote:
>
>
> > -----Original Message-----
> > From: Greg KH [mailto:gregkh@linuxfoundation.org]
> > Sent: Sunday 9 June 2019 12:23
> > To: Dragan Cvetic <draganc@xilinx.com>
> > Cc: arnd@arndb.de; Michal Simek <michals@xilinx.com>; linux-arm-kernel@lists.infradead.org; robh+dt@kernel.org;
> > mark.rutland@arm.com; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; Derek Kiernan <dkiernan@xilinx.com>
> > Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
> >
> > On Sun, Jun 09, 2019 at 01:04:07AM +0100, Dragan Cvetic wrote:
> > > Implement a platform driver that matches with xlnx,
> > > sd-fec-1.1 device tree node and registers as a character
> > > device, including:
> > > - SD-FEC driver binds to sdfec DT node.
> > > - creates and initialise an initial driver dev structure.
> > > - add the driver in Linux build and Kconfig.
> > >
> > > Tested-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > Signed-off-by: Derek Kiernan <derek.kiernan@xilinx.com>
> > > Signed-off-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > ---
> > > drivers/misc/Kconfig | 12 +++++
> > > drivers/misc/Makefile | 1 +
> > > drivers/misc/xilinx_sdfec.c | 118 ++++++++++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 131 insertions(+)
> > > create mode 100644 drivers/misc/xilinx_sdfec.c
> > >
> > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> > > index 6b0417b..319a6bf 100644
> > > --- a/drivers/misc/Kconfig
> > > +++ b/drivers/misc/Kconfig
> > > @@ -471,6 +471,18 @@ config PCI_ENDPOINT_TEST
> > > Enable this configuration option to enable the host side test driver
> > > for PCI Endpoint.
> > >
> > > +config XILINX_SDFEC
> > > + tristate "Xilinx SDFEC 16"
> > > + help
> > > + This option enables support for the Xilinx SDFEC (Soft Decision
> > > + Forward Error Correction) driver. This enables a char driver
> > > + for the SDFEC.
> > > +
> > > + You may select this driver if your design instantiates the
> > > + SDFEC(16nm) hardened block. To compile this as a module choose M.
> > > +
> > > + If unsure, say N.
> > > +
> > > config MISC_RTSX
> > > tristate
> > > default MISC_RTSX_PCI || MISC_RTSX_USB
> > > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
> > > index b9affcd..0cb3546 100644
> > > --- a/drivers/misc/Makefile
> > > +++ b/drivers/misc/Makefile
> > > @@ -59,3 +59,4 @@ obj-$(CONFIG_OCXL) += ocxl/
> > > obj-y += cardreader/
> > > obj-$(CONFIG_PVPANIC) += pvpanic.o
> > > obj-$(CONFIG_HABANA_AI) += habanalabs/
> > > +obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
> > > diff --git a/drivers/misc/xilinx_sdfec.c b/drivers/misc/xilinx_sdfec.c
> > > new file mode 100644
> > > index 0000000..75cc980
> > > --- /dev/null
> > > +++ b/drivers/misc/xilinx_sdfec.c
> > > @@ -0,0 +1,118 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Xilinx SDFEC
> > > + *
> > > + * Copyright (C) 2019 Xilinx, Inc.
> > > + *
> > > + * Description:
> > > + * This driver is developed for SDFEC16 (Soft Decision FEC 16nm)
> > > + * IP. It exposes a char device which supports file operations
> > > + * like open(), close() and ioctl().
> > > + */
> > > +
> > > +#include <linux/miscdevice.h>
> > > +#include <linux/io.h>
> > > +#include <linux/interrupt.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/module.h>
> > > +#include <linux/of_platform.h>
> > > +#include <linux/poll.h>
> > > +#include <linux/slab.h>
> > > +#include <linux/clk.h>
> > > +
> > > +static int xsdfec_ndevs;
> >
> > You should use an idr for this, not just a number you bump up and down.
> > This will not work properly at all.
> >
> > Think about this situation:
> > probe device 0
> > xsdfec_ndevs = 1
> > probe device 1
> > xsdfec_ndevs = 2
> > remove device 0
> > xsdfec_ndevs = 0
> > probe another device
> > misc device fails due to duplicate name.
> >
>
> My bad.
> I can use idr, but couldn't be better optimized code if use simple mutex to protect the variable.
mutex does not protect from this at all, it's a logic bug. Think about
adding 5 devices and then removing the 2nd one. What is the number
assigned to the new device that is added afterward?
And you need a mutex for the idr anyway, if you are touching it in a non
probe/release callback way (those are already serialized by the bus
lock).
thanks,
greg k-h
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <gregkh@linuxfoundation.org>
To: Dragan Cvetic <draganc@xilinx.com>
Cc: "arnd@arndb.de" <arnd@arndb.de>,
Michal Simek <michals@xilinx.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"robh+dt@kernel.org" <robh+dt@kernel.org>,
"mark.rutland@arm.com" <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Derek Kiernan <dkiernan@xilinx.com>
Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
Date: Sun, 9 Jun 2019 23:10:26 +0200 [thread overview]
Message-ID: <20190609211026.GA9859@kroah.com> (raw)
In-Reply-To: <CH2PR02MB6359778016A4BDCBD29EA275CB120@CH2PR02MB6359.namprd02.prod.outlook.com>
On Sun, Jun 09, 2019 at 06:48:31PM +0000, Dragan Cvetic wrote:
>
>
> > -----Original Message-----
> > From: Greg KH [mailto:gregkh@linuxfoundation.org]
> > Sent: Sunday 9 June 2019 12:23
> > To: Dragan Cvetic <draganc@xilinx.com>
> > Cc: arnd@arndb.de; Michal Simek <michals@xilinx.com>; linux-arm-kernel@lists.infradead.org; robh+dt@kernel.org;
> > mark.rutland@arm.com; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; Derek Kiernan <dkiernan@xilinx.com>
> > Subject: Re: [PATCH V5 02/11] misc: xilinx-sdfec: add core driver
> >
> > On Sun, Jun 09, 2019 at 01:04:07AM +0100, Dragan Cvetic wrote:
> > > Implement a platform driver that matches with xlnx,
> > > sd-fec-1.1 device tree node and registers as a character
> > > device, including:
> > > - SD-FEC driver binds to sdfec DT node.
> > > - creates and initialise an initial driver dev structure.
> > > - add the driver in Linux build and Kconfig.
> > >
> > > Tested-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > Signed-off-by: Derek Kiernan <derek.kiernan@xilinx.com>
> > > Signed-off-by: Dragan Cvetic <dragan.cvetic@xilinx.com>
> > > ---
> > > drivers/misc/Kconfig | 12 +++++
> > > drivers/misc/Makefile | 1 +
> > > drivers/misc/xilinx_sdfec.c | 118 ++++++++++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 131 insertions(+)
> > > create mode 100644 drivers/misc/xilinx_sdfec.c
> > >
> > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
> > > index 6b0417b..319a6bf 100644
> > > --- a/drivers/misc/Kconfig
> > > +++ b/drivers/misc/Kconfig
> > > @@ -471,6 +471,18 @@ config PCI_ENDPOINT_TEST
> > > Enable this configuration option to enable the host side test driver
> > > for PCI Endpoint.
> > >
> > > +config XILINX_SDFEC
> > > + tristate "Xilinx SDFEC 16"
> > > + help
> > > + This option enables support for the Xilinx SDFEC (Soft Decision
> > > + Forward Error Correction) driver. This enables a char driver
> > > + for the SDFEC.
> > > +
> > > + You may select this driver if your design instantiates the
> > > + SDFEC(16nm) hardened block. To compile this as a module choose M.
> > > +
> > > + If unsure, say N.
> > > +
> > > config MISC_RTSX
> > > tristate
> > > default MISC_RTSX_PCI || MISC_RTSX_USB
> > > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
> > > index b9affcd..0cb3546 100644
> > > --- a/drivers/misc/Makefile
> > > +++ b/drivers/misc/Makefile
> > > @@ -59,3 +59,4 @@ obj-$(CONFIG_OCXL) += ocxl/
> > > obj-y += cardreader/
> > > obj-$(CONFIG_PVPANIC) += pvpanic.o
> > > obj-$(CONFIG_HABANA_AI) += habanalabs/
> > > +obj-$(CONFIG_XILINX_SDFEC) += xilinx_sdfec.o
> > > diff --git a/drivers/misc/xilinx_sdfec.c b/drivers/misc/xilinx_sdfec.c
> > > new file mode 100644
> > > index 0000000..75cc980
> > > --- /dev/null
> > > +++ b/drivers/misc/xilinx_sdfec.c
> > > @@ -0,0 +1,118 @@
> > > +// SPDX-License-Identifier: GPL-2.0
> > > +/*
> > > + * Xilinx SDFEC
> > > + *
> > > + * Copyright (C) 2019 Xilinx, Inc.
> > > + *
> > > + * Description:
> > > + * This driver is developed for SDFEC16 (Soft Decision FEC 16nm)
> > > + * IP. It exposes a char device which supports file operations
> > > + * like open(), close() and ioctl().
> > > + */
> > > +
> > > +#include <linux/miscdevice.h>
> > > +#include <linux/io.h>
> > > +#include <linux/interrupt.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/module.h>
> > > +#include <linux/of_platform.h>
> > > +#include <linux/poll.h>
> > > +#include <linux/slab.h>
> > > +#include <linux/clk.h>
> > > +
> > > +static int xsdfec_ndevs;
> >
> > You should use an idr for this, not just a number you bump up and down.
> > This will not work properly at all.
> >
> > Think about this situation:
> > probe device 0
> > xsdfec_ndevs = 1
> > probe device 1
> > xsdfec_ndevs = 2
> > remove device 0
> > xsdfec_ndevs = 0
> > probe another device
> > misc device fails due to duplicate name.
> >
>
> My bad.
> I can use idr, but couldn't be better optimized code if use simple mutex to protect the variable.
mutex does not protect from this at all, it's a logic bug. Think about
adding 5 devices and then removing the 2nd one. What is the number
assigned to the new device that is added afterward?
And you need a mutex for the idr anyway, if you are touching it in a non
probe/release callback way (those are already serialized by the bus
lock).
thanks,
greg k-h
next prev parent reply other threads:[~2019-06-09 21:10 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-09 0:04 [PATCH V5 00/12] misc: xilinx sd-fec drive Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 01/11] dt-bindings: xilinx-sdfec: Add SDFEC binding Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 02/11] misc: xilinx-sdfec: add core driver Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 11:22 ` Greg KH
2019-06-09 11:22 ` Greg KH
2019-06-09 18:48 ` Dragan Cvetic
2019-06-09 18:48 ` Dragan Cvetic
2019-06-09 18:48 ` Dragan Cvetic
2019-06-09 21:10 ` Greg KH [this message]
2019-06-09 21:10 ` Greg KH
2019-06-09 21:10 ` Greg KH
2019-06-09 0:04 ` [PATCH V5 03/11] misc: xilinx_sdfec: Add CCF support Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 04/11] misc: xilinx_sdfec: Store driver config and state Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 11:27 ` Greg KH
2019-06-09 11:27 ` Greg KH
2019-06-09 19:04 ` Dragan Cvetic
2019-06-09 19:04 ` Dragan Cvetic
2019-06-09 19:04 ` Dragan Cvetic
2019-06-09 21:11 ` Greg KH
2019-06-09 21:11 ` Greg KH
2019-06-09 21:11 ` Greg KH
2019-06-09 0:04 ` [PATCH V5 05/11] misc: xilinx_sdfec: Add ability to configure turbo Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 06/11] misc: xilinx_sdfec: Add ability to configure LDPC Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 07/11] misc: xilinx_sdfec: Add ability to get/set config Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 08/11] misc: xilinx_sdfec: Support poll file operation Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 09/11] misc: xilinx_sdfec: Add stats & status ioctls Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 10/11] Docs: misc: xilinx_sdfec: Add documentation Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` [PATCH V5 11/11] MAINTAINERS: add maintainer for SD-FEC Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-09 0:04 ` Dragan Cvetic
2019-06-10 18:59 ` Joe Perches
2019-06-10 18:59 ` Joe Perches
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=20190609211026.GA9859@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=arnd@arndb.de \
--cc=devicetree@vger.kernel.org \
--cc=dkiernan@xilinx.com \
--cc=draganc@xilinx.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=michals@xilinx.com \
--cc=robh+dt@kernel.org \
/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.