Patchwork [Trusty,SRU] Bluetooth: allocate static minor for vhci

login
register
mail settings
Submitter Tim Gardner
Date May 8, 2014, 11:04 p.m.
Message ID <1399590299-32746-1-git-send-email-tim.gardner@canonical.com>
Download mbox | patch
Permalink /patch/347268/
State New
Headers show

Comments

Tim Gardner - May 8, 2014, 11:04 p.m.
From: Lucas De Marchi <lucas.demarchi@intel.com>

BugLink: http://bugs.launchpad.net/bugs/1317336

Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI
driver) added the module alias to hci_vhci module so it's possible to
create the /dev/vhci node. However creating an alias without
specifying the minor doesn't allow us to create the node ahead,
triggerring module auto-load when it's first accessed.

Starting with depmod from kmod 16 we started to warn if there's a
devname alias without specifying the major and minor.

Let's do the same done for uhid, kvm, fuse and others, specifying a
fixed minor. In systems with systemd as the init the following will
happen: on early boot systemd will call "kmod static-nodes" to read
/lib/modules/$(uname -r)/modules.devname and then create the nodes. When
first accessed these "dead" nodes will trigger the module loading.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
(cherry picked from commit b075dd40c95d11c2c8690f6c4d6232fc0d9e7f56)
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
---
 Documentation/devices.txt    |    1 +
 drivers/bluetooth/hci_vhci.c |    3 ++-
 include/linux/miscdevice.h   |    1 +
 3 files changed, 4 insertions(+), 1 deletion(-)
Chris J Arges - May 9, 2014, 3:16 a.m.
This seems to be fairly straightforward.

Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>

On 05/08/2014 06:04 PM, Tim Gardner wrote:
> From: Lucas De Marchi <lucas.demarchi@intel.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1317336
> 
> Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI
> driver) added the module alias to hci_vhci module so it's possible to
> create the /dev/vhci node. However creating an alias without
> specifying the minor doesn't allow us to create the node ahead,
> triggerring module auto-load when it's first accessed.
> 
> Starting with depmod from kmod 16 we started to warn if there's a
> devname alias without specifying the major and minor.
> 
> Let's do the same done for uhid, kvm, fuse and others, specifying a
> fixed minor. In systems with systemd as the init the following will
> happen: on early boot systemd will call "kmod static-nodes" to read
> /lib/modules/$(uname -r)/modules.devname and then create the nodes. When
> first accessed these "dead" nodes will trigger the module loading.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> (cherry picked from commit b075dd40c95d11c2c8690f6c4d6232fc0d9e7f56)
> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
> ---
>  Documentation/devices.txt    |    1 +
>  drivers/bluetooth/hci_vhci.c |    3 ++-
>  include/linux/miscdevice.h   |    1 +
>  3 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/devices.txt b/Documentation/devices.txt
> index 80b7241..fce9398 100644
> --- a/Documentation/devices.txt
> +++ b/Documentation/devices.txt
> @@ -353,6 +353,7 @@ Your cooperation is appreciated.
>  		133 = /dev/exttrp	External device trap
>  		134 = /dev/apm_bios	Advanced Power Management BIOS
>  		135 = /dev/rtc		Real Time Clock
> +		137 = /dev/vhci		Bluetooth virtual HCI driver
>  		139 = /dev/openprom	SPARC OpenBoot PROM
>  		140 = /dev/relay8	Berkshire Products Octal relay card
>  		141 = /dev/relay16	Berkshire Products ISO-16 relay card
> diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
> index 7b16738..59095e6 100644
> --- a/drivers/bluetooth/hci_vhci.c
> +++ b/drivers/bluetooth/hci_vhci.c
> @@ -352,7 +352,7 @@ static const struct file_operations vhci_fops = {
>  static struct miscdevice vhci_miscdev= {
>  	.name	= "vhci",
>  	.fops	= &vhci_fops,
> -	.minor	= MISC_DYNAMIC_MINOR,
> +	.minor	= VHCI_MINOR,
>  };
>  
>  static int __init vhci_init(void)
> @@ -378,3 +378,4 @@ MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION);
>  MODULE_VERSION(VERSION);
>  MODULE_LICENSE("GPL");
>  MODULE_ALIAS("devname:vhci");
> +MODULE_ALIAS_MISCDEV(VHCI_MINOR);
> diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
> index f7eaf2d..e5db611 100644
> --- a/include/linux/miscdevice.h
> +++ b/include/linux/miscdevice.h
> @@ -23,6 +23,7 @@
>  #define TEMP_MINOR		131	/* Temperature Sensor */
>  #define RTC_MINOR		135
>  #define EFI_RTC_MINOR		136	/* EFI Time services */
> +#define VHCI_MINOR		137
>  #define SUN_OPENPROM_MINOR	139
>  #define DMAPI_MINOR		140	/* DMAPI */
>  #define NVRAM_MINOR		144
>
Andy Whitcroft - May 9, 2014, 2:20 p.m.
On Thu, May 08, 2014 at 10:16:28PM -0500, Chris J Arges wrote:
> This seems to be fairly straightforward.
> 
> Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
> 
> On 05/08/2014 06:04 PM, Tim Gardner wrote:
> > From: Lucas De Marchi <lucas.demarchi@intel.com>
> > 
> > BugLink: http://bugs.launchpad.net/bugs/1317336
> > 
> > Commit bfacbb9 (Bluetooth: Use devname:vhci module alias for virtual HCI
> > driver) added the module alias to hci_vhci module so it's possible to
> > create the /dev/vhci node. However creating an alias without
> > specifying the minor doesn't allow us to create the node ahead,
> > triggerring module auto-load when it's first accessed.
> > 
> > Starting with depmod from kmod 16 we started to warn if there's a
> > devname alias without specifying the major and minor.
> > 
> > Let's do the same done for uhid, kvm, fuse and others, specifying a
> > fixed minor. In systems with systemd as the init the following will
> > happen: on early boot systemd will call "kmod static-nodes" to read
> > /lib/modules/$(uname -r)/modules.devname and then create the nodes. When
> > first accessed these "dead" nodes will trigger the module loading.
> > 
> > Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> > (cherry picked from commit b075dd40c95d11c2c8690f6c4d6232fc0d9e7f56)
> > Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
> > ---
> >  Documentation/devices.txt    |    1 +
> >  drivers/bluetooth/hci_vhci.c |    3 ++-
> >  include/linux/miscdevice.h   |    1 +
> >  3 files changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/Documentation/devices.txt b/Documentation/devices.txt
> > index 80b7241..fce9398 100644
> > --- a/Documentation/devices.txt
> > +++ b/Documentation/devices.txt
> > @@ -353,6 +353,7 @@ Your cooperation is appreciated.
> >  		133 = /dev/exttrp	External device trap
> >  		134 = /dev/apm_bios	Advanced Power Management BIOS
> >  		135 = /dev/rtc		Real Time Clock
> > +		137 = /dev/vhci		Bluetooth virtual HCI driver
> >  		139 = /dev/openprom	SPARC OpenBoot PROM
> >  		140 = /dev/relay8	Berkshire Products Octal relay card
> >  		141 = /dev/relay16	Berkshire Products ISO-16 relay card
> > diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
> > index 7b16738..59095e6 100644
> > --- a/drivers/bluetooth/hci_vhci.c
> > +++ b/drivers/bluetooth/hci_vhci.c
> > @@ -352,7 +352,7 @@ static const struct file_operations vhci_fops = {
> >  static struct miscdevice vhci_miscdev= {
> >  	.name	= "vhci",
> >  	.fops	= &vhci_fops,
> > -	.minor	= MISC_DYNAMIC_MINOR,
> > +	.minor	= VHCI_MINOR,
> >  };
> >  
> >  static int __init vhci_init(void)
> > @@ -378,3 +378,4 @@ MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION);
> >  MODULE_VERSION(VERSION);
> >  MODULE_LICENSE("GPL");
> >  MODULE_ALIAS("devname:vhci");
> > +MODULE_ALIAS_MISCDEV(VHCI_MINOR);
> > diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
> > index f7eaf2d..e5db611 100644
> > --- a/include/linux/miscdevice.h
> > +++ b/include/linux/miscdevice.h
> > @@ -23,6 +23,7 @@
> >  #define TEMP_MINOR		131	/* Temperature Sensor */
> >  #define RTC_MINOR		135
> >  #define EFI_RTC_MINOR		136	/* EFI Time services */
> > +#define VHCI_MINOR		137
> >  #define SUN_OPENPROM_MINOR	139
> >  #define DMAPI_MINOR		140	/* DMAPI */
> >  #define NVRAM_MINOR		144
> > 

Ick, static minors, really?  If they are needed then this does indeed
look to do what is claimed.

Acked-by: Andy Whitcroft <apw@canonical.com>

-apw
Tim Gardner - May 10, 2014, 1:05 p.m.

Patch

diff --git a/Documentation/devices.txt b/Documentation/devices.txt
index 80b7241..fce9398 100644
--- a/Documentation/devices.txt
+++ b/Documentation/devices.txt
@@ -353,6 +353,7 @@  Your cooperation is appreciated.
 		133 = /dev/exttrp	External device trap
 		134 = /dev/apm_bios	Advanced Power Management BIOS
 		135 = /dev/rtc		Real Time Clock
+		137 = /dev/vhci		Bluetooth virtual HCI driver
 		139 = /dev/openprom	SPARC OpenBoot PROM
 		140 = /dev/relay8	Berkshire Products Octal relay card
 		141 = /dev/relay16	Berkshire Products ISO-16 relay card
diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
index 7b16738..59095e6 100644
--- a/drivers/bluetooth/hci_vhci.c
+++ b/drivers/bluetooth/hci_vhci.c
@@ -352,7 +352,7 @@  static const struct file_operations vhci_fops = {
 static struct miscdevice vhci_miscdev= {
 	.name	= "vhci",
 	.fops	= &vhci_fops,
-	.minor	= MISC_DYNAMIC_MINOR,
+	.minor	= VHCI_MINOR,
 };
 
 static int __init vhci_init(void)
@@ -378,3 +378,4 @@  MODULE_DESCRIPTION("Bluetooth virtual HCI driver ver " VERSION);
 MODULE_VERSION(VERSION);
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("devname:vhci");
+MODULE_ALIAS_MISCDEV(VHCI_MINOR);
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h
index f7eaf2d..e5db611 100644
--- a/include/linux/miscdevice.h
+++ b/include/linux/miscdevice.h
@@ -23,6 +23,7 @@ 
 #define TEMP_MINOR		131	/* Temperature Sensor */
 #define RTC_MINOR		135
 #define EFI_RTC_MINOR		136	/* EFI Time services */
+#define VHCI_MINOR		137
 #define SUN_OPENPROM_MINOR	139
 #define DMAPI_MINOR		140	/* DMAPI */
 #define NVRAM_MINOR		144