On Mar 11, 2008, at 11:56 PM, Basheer, Mansoor Ahamed wrote:

>
>
> Robert Wrote [mailto:[EMAIL PROTECTED]
>>
>> On Tue, 11 Mar 2008, Khem Raj wrote:
>>
>>>
>>> On Mar 11, 2008, at 11:03 PM, Basheer, Mansoor Ahamed wrote:
>>>
>>>> Hi,
>>>>
>>>> Current mknod implementation fails for major/minor number greater
> than
>> 255.
>>>
>>> is linux kernel supporting major/minor numbers greater than 255 ?
>>
>> the *kernel* supports major/minor numbers of bit length (12,20).   
>> it's
>> only userspace that restricts their values to (8,8).
>>
>
> Yes Robert you are right. For example USB endpoint devices use major  
> 442
> (drivers/usb/core/endpoint.c).

>
>
> Also, __kernel_dev_t for ARM should be "unsigned int" and not  
> "unsigned
> short".
>
> Signed-off-by: Mansoor Ahamed <[EMAIL PROTECTED]>
>
> --- libc/sysdeps/linux/common/mknod.c 2008-03-11 17:43:54.000000000
> +0530
> +++ libc/sysdeps/linux/common/mknod.c 2008-03-11 17:45:21.000000000
> +++ +0530
> @@ -20,9 +20,8 @@ static inline _syscall3(int, __syscall_m  int
> mknod(const char *path, mode_t mode, dev_t dev)  {
>        /* We must convert the dev_t value to a __kernel_dev_t */
> -       __kernel_dev_t k_dev;
> +       __kernel_dev_t k_dev = (__kernel_dev_t)dev;
>
> -       k_dev = ((major(dev) & 0xff) << 8) | (minor(dev) & 0xff);
>        return __syscall_mknod(path, mode, k_dev);  }
> libc_hidden_def(mknod)


OK. the change looks ok. A testcase would be good to have.

>
>
>
>
> --- libc/sysdeps/linux/arm/bits/kernel_types.h
> +++ libc/sysdeps/linux/arm/bits/kernel_types.h
> @@ -7,7 +7,7 @@
> #ifndef __ARCH_ARM_POSIX_TYPES_H
> #define __ARCH_ARM_POSIX_TYPES_H
>
> -typedef unsigned short         __kernel_dev_t;
> +typedef unsigned int           __kernel_dev_t;
> typedef unsigned long          __kernel_ino_t;
> typedef unsigned short         __kernel_mode_t;
> typedef unsigned short         __kernel_nlink_t;
> @@ -31,7 +31,7 @@
> typedef unsigned short         __kernel_old_uid_t;
> typedef unsigned short         __kernel_old_gid_t;
> typedef long long              __kernel_loff_t;
> -typedef __kernel_dev_t         __kernel_old_dev_t;
> +typedef unsigned short         __kernel_old_dev_t;
>

This also looks ok.

> typedef struct {
> #ifdef __USE_ALL
>
> -Mansoor
>

Khem Raj
MontaVista



_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Reply via email to