Re: [PATCH v5 06/16] rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl
On Wed, Mar 03, 2021 at 03:59:34PM +0100, Arnaud POULIQUEN wrote: > > > On 3/2/21 7:35 PM, Mathieu Poirier wrote: > > On Fri, Feb 19, 2021 at 12:14:51PM +0100, Arnaud Pouliquen wrote: > >> Move the code related to the rpmsg_ctrl char device to the new > >> rpmsg_ctrl.c module. > >> Manage the dependency in the kconfig. > >> > >> Signed-off-by: Arnaud Pouliquen > >> --- > >> drivers/rpmsg/Kconfig | 9 ++ > >> drivers/rpmsg/Makefile | 1 + > >> drivers/rpmsg/rpmsg_char.c | 163 > >> drivers/rpmsg/rpmsg_ctrl.c | 216 + > >> 4 files changed, 226 insertions(+), 163 deletions(-) > >> create mode 100644 drivers/rpmsg/rpmsg_ctrl.c > >> > >> diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig > >> index 0b4407abdf13..2d0cd7fdd710 100644 > >> --- a/drivers/rpmsg/Kconfig > >> +++ b/drivers/rpmsg/Kconfig > >> @@ -10,11 +10,20 @@ config RPMSG_CHAR > >>tristate "RPMSG device interface" > >>depends on RPMSG > >>depends on NET > >> + select RPMSG_CTRL > >>help > >> Say Y here to export rpmsg endpoints as device files, usually found > >> in /dev. They make it possible for user-space programs to send and > >> receive rpmsg packets. > >> > >> +config RPMSG_CTRL > >> + tristate "RPMSG control interface" > >> + depends on RPMSG > >> + help > >> +Say Y here to enable the support of the /dev/rpmsg_ctlX API. This API > > > > s/rpmsg_ctlX/rpmsg_ctrlX > > Good catch! > > > > >> +allows user-space programs to create endpoints with specific service > >> name, > >> +source and destination addresses. > >> + > >> config RPMSG_NS > >>tristate "RPMSG name service announcement" > >>depends on RPMSG > >> diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile > >> index 8d452656f0ee..58e3b382e316 100644 > >> --- a/drivers/rpmsg/Makefile > >> +++ b/drivers/rpmsg/Makefile > >> @@ -1,6 +1,7 @@ > >> # SPDX-License-Identifier: GPL-2.0 > >> obj-$(CONFIG_RPMSG) += rpmsg_core.o > >> obj-$(CONFIG_RPMSG_CHAR) += rpmsg_char.o > >> +obj-$(CONFIG_RPMSG_CTRL) += rpmsg_ctrl.o > >> obj-$(CONFIG_RPMSG_NS)+= rpmsg_ns.o > >> obj-$(CONFIG_RPMSG_MTK_SCP) += mtk_rpmsg.o > >> qcom_glink-objs := qcom_glink_native.o qcom_glink_ssr.o > >> diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c > >> index 23e369a00531..83c10b39b139 100644 > >> --- a/drivers/rpmsg/rpmsg_char.c > >> +++ b/drivers/rpmsg/rpmsg_char.c > >> @@ -31,28 +31,12 @@ > >> static dev_t rpmsg_major; > >> static struct class *rpmsg_class; > >> > >> -static DEFINE_IDA(rpmsg_ctrl_ida); > >> static DEFINE_IDA(rpmsg_ept_ida); > >> static DEFINE_IDA(rpmsg_minor_ida); > >> > >> #define dev_to_eptdev(dev) container_of(dev, struct rpmsg_eptdev, dev) > >> #define cdev_to_eptdev(i_cdev) container_of(i_cdev, struct rpmsg_eptdev, > >> cdev) > >> > >> -#define dev_to_ctrldev(dev) container_of(dev, struct rpmsg_ctrldev, dev) > >> -#define cdev_to_ctrldev(i_cdev) container_of(i_cdev, struct > >> rpmsg_ctrldev, cdev) > >> - > >> -/** > >> - * struct rpmsg_ctrldev - control device for instantiating endpoint > >> devices > >> - * @rpdev:underlaying rpmsg device > >> - * @cdev: cdev for the ctrl device > >> - * @dev: device for the ctrl device > >> - */ > >> -struct rpmsg_ctrldev { > >> - struct rpmsg_device *rpdev; > >> - struct cdev cdev; > >> - struct device dev; > >> -}; > > > > This showed up in rpmsg_ctrl.c as rpmsg_ctrl. The same goes for many > > functions > > names - they are removed here and re-introduced under a different name, > > which > > makes it very hard to follow. What ends up in the new file should be a > > carbon > > copy of what was moved. > > Ok i will split it in 2 steps. In most cases I don't think there is a need for a wholesale renaming exercise. To me having a struct rpmsg_ctrldev and functions names such as rpmsg_ctrldev_open() in a file called rpmsg_ctrl.c is perfectly acceptable. > > Thanks > Arnaud > > > > > I'm out of time for today, more comments tomorrow. > > > > Thanks, > > Mathieu > > > >> - > >> /** > >> * struct rpmsg_eptdev - endpoint device context > >> * @dev: endpoint device > >> @@ -411,145 +395,6 @@ int rpmsg_chrdev_create_eptdev(struct rpmsg_device > >> *rpdev, struct device *parent > >> } > >> EXPORT_SYMBOL(rpmsg_chrdev_create_eptdev); > >> > >> -static int rpmsg_ctrldev_open(struct inode *inode, struct file *filp) > >> -{ > >> - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); > >> - > >> - get_device(&ctrldev->dev); > >> - filp->private_data = ctrldev; > >> - > >> - return 0; > >> -} > >> - > >> -static int rpmsg_ctrldev_release(struct inode *inode, struct file *filp) > >> -{ > >> - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); > >> - > >> - put_device(&ctrldev->dev); > >> - > >> - return 0; > >> -} > >> - > >> -static long rpmsg_ctrldev_ioctl(struct file
Re: [PATCH v5 06/16] rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl
On 3/2/21 7:35 PM, Mathieu Poirier wrote: > On Fri, Feb 19, 2021 at 12:14:51PM +0100, Arnaud Pouliquen wrote: >> Move the code related to the rpmsg_ctrl char device to the new >> rpmsg_ctrl.c module. >> Manage the dependency in the kconfig. >> >> Signed-off-by: Arnaud Pouliquen >> --- >> drivers/rpmsg/Kconfig | 9 ++ >> drivers/rpmsg/Makefile | 1 + >> drivers/rpmsg/rpmsg_char.c | 163 >> drivers/rpmsg/rpmsg_ctrl.c | 216 + >> 4 files changed, 226 insertions(+), 163 deletions(-) >> create mode 100644 drivers/rpmsg/rpmsg_ctrl.c >> >> diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig >> index 0b4407abdf13..2d0cd7fdd710 100644 >> --- a/drivers/rpmsg/Kconfig >> +++ b/drivers/rpmsg/Kconfig >> @@ -10,11 +10,20 @@ config RPMSG_CHAR >> tristate "RPMSG device interface" >> depends on RPMSG >> depends on NET >> +select RPMSG_CTRL >> help >>Say Y here to export rpmsg endpoints as device files, usually found >>in /dev. They make it possible for user-space programs to send and >>receive rpmsg packets. >> >> +config RPMSG_CTRL >> +tristate "RPMSG control interface" >> +depends on RPMSG >> +help >> + Say Y here to enable the support of the /dev/rpmsg_ctlX API. This API > > s/rpmsg_ctlX/rpmsg_ctrlX Good catch! > >> + allows user-space programs to create endpoints with specific service >> name, >> + source and destination addresses. >> + >> config RPMSG_NS >> tristate "RPMSG name service announcement" >> depends on RPMSG >> diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile >> index 8d452656f0ee..58e3b382e316 100644 >> --- a/drivers/rpmsg/Makefile >> +++ b/drivers/rpmsg/Makefile >> @@ -1,6 +1,7 @@ >> # SPDX-License-Identifier: GPL-2.0 >> obj-$(CONFIG_RPMSG) += rpmsg_core.o >> obj-$(CONFIG_RPMSG_CHAR)+= rpmsg_char.o >> +obj-$(CONFIG_RPMSG_CTRL)+= rpmsg_ctrl.o >> obj-$(CONFIG_RPMSG_NS) += rpmsg_ns.o >> obj-$(CONFIG_RPMSG_MTK_SCP) += mtk_rpmsg.o >> qcom_glink-objs := qcom_glink_native.o qcom_glink_ssr.o >> diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c >> index 23e369a00531..83c10b39b139 100644 >> --- a/drivers/rpmsg/rpmsg_char.c >> +++ b/drivers/rpmsg/rpmsg_char.c >> @@ -31,28 +31,12 @@ >> static dev_t rpmsg_major; >> static struct class *rpmsg_class; >> >> -static DEFINE_IDA(rpmsg_ctrl_ida); >> static DEFINE_IDA(rpmsg_ept_ida); >> static DEFINE_IDA(rpmsg_minor_ida); >> >> #define dev_to_eptdev(dev) container_of(dev, struct rpmsg_eptdev, dev) >> #define cdev_to_eptdev(i_cdev) container_of(i_cdev, struct rpmsg_eptdev, >> cdev) >> >> -#define dev_to_ctrldev(dev) container_of(dev, struct rpmsg_ctrldev, dev) >> -#define cdev_to_ctrldev(i_cdev) container_of(i_cdev, struct rpmsg_ctrldev, >> cdev) >> - >> -/** >> - * struct rpmsg_ctrldev - control device for instantiating endpoint devices >> - * @rpdev: underlaying rpmsg device >> - * @cdev: cdev for the ctrl device >> - * @dev:device for the ctrl device >> - */ >> -struct rpmsg_ctrldev { >> -struct rpmsg_device *rpdev; >> -struct cdev cdev; >> -struct device dev; >> -}; > > This showed up in rpmsg_ctrl.c as rpmsg_ctrl. The same goes for many > functions > names - they are removed here and re-introduced under a different name, which > makes it very hard to follow. What ends up in the new file should be a carbon > copy of what was moved. Ok i will split it in 2 steps. Thanks Arnaud > > I'm out of time for today, more comments tomorrow. > > Thanks, > Mathieu > >> - >> /** >> * struct rpmsg_eptdev - endpoint device context >> * @dev:endpoint device >> @@ -411,145 +395,6 @@ int rpmsg_chrdev_create_eptdev(struct rpmsg_device >> *rpdev, struct device *parent >> } >> EXPORT_SYMBOL(rpmsg_chrdev_create_eptdev); >> >> -static int rpmsg_ctrldev_open(struct inode *inode, struct file *filp) >> -{ >> -struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); >> - >> -get_device(&ctrldev->dev); >> -filp->private_data = ctrldev; >> - >> -return 0; >> -} >> - >> -static int rpmsg_ctrldev_release(struct inode *inode, struct file *filp) >> -{ >> -struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); >> - >> -put_device(&ctrldev->dev); >> - >> -return 0; >> -} >> - >> -static long rpmsg_ctrldev_ioctl(struct file *fp, unsigned int cmd, >> -unsigned long arg) >> -{ >> -struct rpmsg_ctrldev *ctrldev = fp->private_data; >> -void __user *argp = (void __user *)arg; >> -struct rpmsg_endpoint_info eptinfo; >> -struct rpmsg_channel_info chinfo; >> - >> -if (cmd != RPMSG_CREATE_EPT_IOCTL) >> -return -EINVAL; >> - >> -if (copy_from_user(&eptinfo, argp, sizeof(eptinfo))) >> -return -EFAULT; >> - >> -memcpy(chinfo.name, eptinfo.name, RPMSG_NAME_SIZE); >> -chinfo.na
Re: [PATCH v5 06/16] rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl
On Fri, Feb 19, 2021 at 12:14:51PM +0100, Arnaud Pouliquen wrote: > Move the code related to the rpmsg_ctrl char device to the new > rpmsg_ctrl.c module. > Manage the dependency in the kconfig. > > Signed-off-by: Arnaud Pouliquen > --- > drivers/rpmsg/Kconfig | 9 ++ > drivers/rpmsg/Makefile | 1 + > drivers/rpmsg/rpmsg_char.c | 163 > drivers/rpmsg/rpmsg_ctrl.c | 216 + > 4 files changed, 226 insertions(+), 163 deletions(-) > create mode 100644 drivers/rpmsg/rpmsg_ctrl.c > > diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig > index 0b4407abdf13..2d0cd7fdd710 100644 > --- a/drivers/rpmsg/Kconfig > +++ b/drivers/rpmsg/Kconfig > @@ -10,11 +10,20 @@ config RPMSG_CHAR > tristate "RPMSG device interface" > depends on RPMSG > depends on NET > + select RPMSG_CTRL > help > Say Y here to export rpmsg endpoints as device files, usually found > in /dev. They make it possible for user-space programs to send and > receive rpmsg packets. > > +config RPMSG_CTRL > + tristate "RPMSG control interface" > + depends on RPMSG > + help > + Say Y here to enable the support of the /dev/rpmsg_ctlX API. This API s/rpmsg_ctlX/rpmsg_ctrlX > + allows user-space programs to create endpoints with specific service > name, > + source and destination addresses. > + > config RPMSG_NS > tristate "RPMSG name service announcement" > depends on RPMSG > diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile > index 8d452656f0ee..58e3b382e316 100644 > --- a/drivers/rpmsg/Makefile > +++ b/drivers/rpmsg/Makefile > @@ -1,6 +1,7 @@ > # SPDX-License-Identifier: GPL-2.0 > obj-$(CONFIG_RPMSG) += rpmsg_core.o > obj-$(CONFIG_RPMSG_CHAR) += rpmsg_char.o > +obj-$(CONFIG_RPMSG_CTRL) += rpmsg_ctrl.o > obj-$(CONFIG_RPMSG_NS) += rpmsg_ns.o > obj-$(CONFIG_RPMSG_MTK_SCP) += mtk_rpmsg.o > qcom_glink-objs := qcom_glink_native.o qcom_glink_ssr.o > diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c > index 23e369a00531..83c10b39b139 100644 > --- a/drivers/rpmsg/rpmsg_char.c > +++ b/drivers/rpmsg/rpmsg_char.c > @@ -31,28 +31,12 @@ > static dev_t rpmsg_major; > static struct class *rpmsg_class; > > -static DEFINE_IDA(rpmsg_ctrl_ida); > static DEFINE_IDA(rpmsg_ept_ida); > static DEFINE_IDA(rpmsg_minor_ida); > > #define dev_to_eptdev(dev) container_of(dev, struct rpmsg_eptdev, dev) > #define cdev_to_eptdev(i_cdev) container_of(i_cdev, struct rpmsg_eptdev, > cdev) > > -#define dev_to_ctrldev(dev) container_of(dev, struct rpmsg_ctrldev, dev) > -#define cdev_to_ctrldev(i_cdev) container_of(i_cdev, struct rpmsg_ctrldev, > cdev) > - > -/** > - * struct rpmsg_ctrldev - control device for instantiating endpoint devices > - * @rpdev: underlaying rpmsg device > - * @cdev:cdev for the ctrl device > - * @dev: device for the ctrl device > - */ > -struct rpmsg_ctrldev { > - struct rpmsg_device *rpdev; > - struct cdev cdev; > - struct device dev; > -}; This showed up in rpmsg_ctrl.c as rpmsg_ctrl. The same goes for many functions names - they are removed here and re-introduced under a different name, which makes it very hard to follow. What ends up in the new file should be a carbon copy of what was moved. I'm out of time for today, more comments tomorrow. Thanks, Mathieu > - > /** > * struct rpmsg_eptdev - endpoint device context > * @dev: endpoint device > @@ -411,145 +395,6 @@ int rpmsg_chrdev_create_eptdev(struct rpmsg_device > *rpdev, struct device *parent > } > EXPORT_SYMBOL(rpmsg_chrdev_create_eptdev); > > -static int rpmsg_ctrldev_open(struct inode *inode, struct file *filp) > -{ > - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); > - > - get_device(&ctrldev->dev); > - filp->private_data = ctrldev; > - > - return 0; > -} > - > -static int rpmsg_ctrldev_release(struct inode *inode, struct file *filp) > -{ > - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); > - > - put_device(&ctrldev->dev); > - > - return 0; > -} > - > -static long rpmsg_ctrldev_ioctl(struct file *fp, unsigned int cmd, > - unsigned long arg) > -{ > - struct rpmsg_ctrldev *ctrldev = fp->private_data; > - void __user *argp = (void __user *)arg; > - struct rpmsg_endpoint_info eptinfo; > - struct rpmsg_channel_info chinfo; > - > - if (cmd != RPMSG_CREATE_EPT_IOCTL) > - return -EINVAL; > - > - if (copy_from_user(&eptinfo, argp, sizeof(eptinfo))) > - return -EFAULT; > - > - memcpy(chinfo.name, eptinfo.name, RPMSG_NAME_SIZE); > - chinfo.name[RPMSG_NAME_SIZE-1] = '\0'; > - chinfo.src = eptinfo.src; > - chinfo.dst = eptinfo.dst; > - > - return rpmsg_chrdev_create_eptdev(ctrldev->rpdev, &ctrldev->dev, > chinfo); > -}; > - > -static const stru
[PATCH v5 06/16] rpmsg: move the rpmsg control device from rpmsg_char to rpmsg_ctrl
Move the code related to the rpmsg_ctrl char device to the new rpmsg_ctrl.c module. Manage the dependency in the kconfig. Signed-off-by: Arnaud Pouliquen --- drivers/rpmsg/Kconfig | 9 ++ drivers/rpmsg/Makefile | 1 + drivers/rpmsg/rpmsg_char.c | 163 drivers/rpmsg/rpmsg_ctrl.c | 216 + 4 files changed, 226 insertions(+), 163 deletions(-) create mode 100644 drivers/rpmsg/rpmsg_ctrl.c diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig index 0b4407abdf13..2d0cd7fdd710 100644 --- a/drivers/rpmsg/Kconfig +++ b/drivers/rpmsg/Kconfig @@ -10,11 +10,20 @@ config RPMSG_CHAR tristate "RPMSG device interface" depends on RPMSG depends on NET + select RPMSG_CTRL help Say Y here to export rpmsg endpoints as device files, usually found in /dev. They make it possible for user-space programs to send and receive rpmsg packets. +config RPMSG_CTRL + tristate "RPMSG control interface" + depends on RPMSG + help + Say Y here to enable the support of the /dev/rpmsg_ctlX API. This API + allows user-space programs to create endpoints with specific service name, + source and destination addresses. + config RPMSG_NS tristate "RPMSG name service announcement" depends on RPMSG diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile index 8d452656f0ee..58e3b382e316 100644 --- a/drivers/rpmsg/Makefile +++ b/drivers/rpmsg/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_RPMSG)+= rpmsg_core.o obj-$(CONFIG_RPMSG_CHAR) += rpmsg_char.o +obj-$(CONFIG_RPMSG_CTRL) += rpmsg_ctrl.o obj-$(CONFIG_RPMSG_NS) += rpmsg_ns.o obj-$(CONFIG_RPMSG_MTK_SCP)+= mtk_rpmsg.o qcom_glink-objs:= qcom_glink_native.o qcom_glink_ssr.o diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c index 23e369a00531..83c10b39b139 100644 --- a/drivers/rpmsg/rpmsg_char.c +++ b/drivers/rpmsg/rpmsg_char.c @@ -31,28 +31,12 @@ static dev_t rpmsg_major; static struct class *rpmsg_class; -static DEFINE_IDA(rpmsg_ctrl_ida); static DEFINE_IDA(rpmsg_ept_ida); static DEFINE_IDA(rpmsg_minor_ida); #define dev_to_eptdev(dev) container_of(dev, struct rpmsg_eptdev, dev) #define cdev_to_eptdev(i_cdev) container_of(i_cdev, struct rpmsg_eptdev, cdev) -#define dev_to_ctrldev(dev) container_of(dev, struct rpmsg_ctrldev, dev) -#define cdev_to_ctrldev(i_cdev) container_of(i_cdev, struct rpmsg_ctrldev, cdev) - -/** - * struct rpmsg_ctrldev - control device for instantiating endpoint devices - * @rpdev: underlaying rpmsg device - * @cdev: cdev for the ctrl device - * @dev: device for the ctrl device - */ -struct rpmsg_ctrldev { - struct rpmsg_device *rpdev; - struct cdev cdev; - struct device dev; -}; - /** * struct rpmsg_eptdev - endpoint device context * @dev: endpoint device @@ -411,145 +395,6 @@ int rpmsg_chrdev_create_eptdev(struct rpmsg_device *rpdev, struct device *parent } EXPORT_SYMBOL(rpmsg_chrdev_create_eptdev); -static int rpmsg_ctrldev_open(struct inode *inode, struct file *filp) -{ - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); - - get_device(&ctrldev->dev); - filp->private_data = ctrldev; - - return 0; -} - -static int rpmsg_ctrldev_release(struct inode *inode, struct file *filp) -{ - struct rpmsg_ctrldev *ctrldev = cdev_to_ctrldev(inode->i_cdev); - - put_device(&ctrldev->dev); - - return 0; -} - -static long rpmsg_ctrldev_ioctl(struct file *fp, unsigned int cmd, - unsigned long arg) -{ - struct rpmsg_ctrldev *ctrldev = fp->private_data; - void __user *argp = (void __user *)arg; - struct rpmsg_endpoint_info eptinfo; - struct rpmsg_channel_info chinfo; - - if (cmd != RPMSG_CREATE_EPT_IOCTL) - return -EINVAL; - - if (copy_from_user(&eptinfo, argp, sizeof(eptinfo))) - return -EFAULT; - - memcpy(chinfo.name, eptinfo.name, RPMSG_NAME_SIZE); - chinfo.name[RPMSG_NAME_SIZE-1] = '\0'; - chinfo.src = eptinfo.src; - chinfo.dst = eptinfo.dst; - - return rpmsg_chrdev_create_eptdev(ctrldev->rpdev, &ctrldev->dev, chinfo); -}; - -static const struct file_operations rpmsg_ctrldev_fops = { - .owner = THIS_MODULE, - .open = rpmsg_ctrldev_open, - .release = rpmsg_ctrldev_release, - .unlocked_ioctl = rpmsg_ctrldev_ioctl, - .compat_ioctl = compat_ptr_ioctl, -}; - -static void rpmsg_ctrldev_release_device(struct device *dev) -{ - struct rpmsg_ctrldev *ctrldev = dev_to_ctrldev(dev); - - ida_simple_remove(&rpmsg_ctrl_ida, dev->id); - ida_simple_remove(&rpmsg_minor_ida, MINOR(dev->devt)); - cdev_del(&ctrldev->cdev); - kfree(ctrldev); -} - -static int rpmsg_chrdev_probe(struct rpmsg_device