[dpdk-dev,v2] vhost: fix eventfd_link.ko insertion failure problem

Message ID 1447225043-15404-1-git-send-email-xiaobo.chi@nokia.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

chixiaobo Nov. 11, 2015, 6:57 a.m. UTC
  Problem:if I firstly insert my kmod_test.ko, then insert eventfd_link.ko,
error will happen with hint " Device or resource busy". This is because
the default minor device number, 0, has been occupied by my kmod_test.ko .

root@distro:~/test$ lsmod
Module                  Size  Used by
kmod_test                927  0
vboxsf                 35930  4
vboxguest             222130  1 vboxsf
microcode              10315  0
autofs4                25051  0
root@distro:~/test$ insmod ./eventfd_link.ko
insmod: ERROR: could not insert module ./eventfd_link.ko: Device or
resource busy

Explanation: For miscdevices, the major device_no is same, so the minor
device_no should be set to ditinguish different misc devices;  if not set
the minor, it may fail while insmod due to the default minor value, 0, has
been used by other miscdevice. MISC_DYNAMIC_MINOR means to let Linux
kernel dynamically assign one minor devide number while loading.

Signed-off-by: Xiaobo Chi <xiaobo.chi@nokia.com>
---
 lib/librte_vhost/eventfd_link/eventfd_link.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Yuanhan Liu Nov. 11, 2015, 7:07 a.m. UTC | #1
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>

	--yliu
On Wed, Nov 11, 2015 at 02:57:23PM +0800, Xiaobo Chi wrote:
> Problem:if I firstly insert my kmod_test.ko, then insert eventfd_link.ko,
> error will happen with hint " Device or resource busy". This is because
> the default minor device number, 0, has been occupied by my kmod_test.ko .
> 
> root@distro:~/test$ lsmod
> Module                  Size  Used by
> kmod_test                927  0
> vboxsf                 35930  4
> vboxguest             222130  1 vboxsf
> microcode              10315  0
> autofs4                25051  0
> root@distro:~/test$ insmod ./eventfd_link.ko
> insmod: ERROR: could not insert module ./eventfd_link.ko: Device or
> resource busy
> 
> Explanation: For miscdevices, the major device_no is same, so the minor
> device_no should be set to ditinguish different misc devices;  if not set
> the minor, it may fail while insmod due to the default minor value, 0, has
> been used by other miscdevice. MISC_DYNAMIC_MINOR means to let Linux
> kernel dynamically assign one minor devide number while loading.
> 
> Signed-off-by: Xiaobo Chi <xiaobo.chi@nokia.com>
> ---
>  lib/librte_vhost/eventfd_link/eventfd_link.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/librte_vhost/eventfd_link/eventfd_link.c b/lib/librte_vhost/eventfd_link/eventfd_link.c
> index c54a938..4b05b5a 100644
> --- a/lib/librte_vhost/eventfd_link/eventfd_link.c
> +++ b/lib/librte_vhost/eventfd_link/eventfd_link.c
> @@ -249,6 +249,7 @@ static const struct file_operations eventfd_link_fops = {
>  
>  
>  static struct miscdevice eventfd_link_misc = {
> +	.minor = MISC_DYNAMIC_MINOR,
>  	.name = "eventfd-link",
>  	.fops = &eventfd_link_fops,
>  };
> -- 
> 1.9.4.msysgit.2
  
Thomas Monjalon Nov. 24, 2015, 6:05 p.m. UTC | #2
> > Problem:if I firstly insert my kmod_test.ko, then insert eventfd_link.ko,
> > error will happen with hint " Device or resource busy". This is because
> > the default minor device number, 0, has been occupied by my kmod_test.ko .
> > 
> > root@distro:~/test$ lsmod
> > Module                  Size  Used by
> > kmod_test                927  0
> > vboxsf                 35930  4
> > vboxguest             222130  1 vboxsf
> > microcode              10315  0
> > autofs4                25051  0
> > root@distro:~/test$ insmod ./eventfd_link.ko
> > insmod: ERROR: could not insert module ./eventfd_link.ko: Device or
> > resource busy
> > 
> > Explanation: For miscdevices, the major device_no is same, so the minor
> > device_no should be set to ditinguish different misc devices;  if not set
> > the minor, it may fail while insmod due to the default minor value, 0, has
> > been used by other miscdevice. MISC_DYNAMIC_MINOR means to let Linux
> > kernel dynamically assign one minor devide number while loading.
> > 
> > Signed-off-by: Xiaobo Chi <xiaobo.chi@nokia.com>
> Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_vhost/eventfd_link/eventfd_link.c b/lib/librte_vhost/eventfd_link/eventfd_link.c
index c54a938..4b05b5a 100644
--- a/lib/librte_vhost/eventfd_link/eventfd_link.c
+++ b/lib/librte_vhost/eventfd_link/eventfd_link.c
@@ -249,6 +249,7 @@  static const struct file_operations eventfd_link_fops = {
 
 
 static struct miscdevice eventfd_link_misc = {
+	.minor = MISC_DYNAMIC_MINOR,
 	.name = "eventfd-link",
 	.fops = &eventfd_link_fops,
 };