Re: sizeof(dev_t)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Regards,
Sandeep.





Hi Pie,

“To learn is to change. Education is a process that changes the learner.”


On Mon, Jul 13, 2009 at 11:31 AM, Pei Lin <telent997@xxxxxxxxx> wrote:
Is it different?

Yes. they are.
 
let us see the typedef about this two.
user space: unsigned long int
kernel space :
    typedef __u32 __kernel_dev_t;
    typedef __kernel_dev_t          dev_t;

"long int " in 64bit cpu should be 8 bytes

[12:02:21 sinhas]$ ./a.out

unsigned long int size = 4
 dev_t size = 8
 unsigned long size = 4
int size = 4[~]
[12:02:24 sinhas]$


So, here long is 32bits  on 32 bit and 64 bits on 64 bit.

Where did you get the definition of dev_t to be unsigned long int?

Its defined as unsigned long long
dev_t ->__dev_t -> __STD_TYPE __DEV_T_TYPE __dev_t;  -> # define __STD_TYPE     __extension__ typedef ->

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;



 

So i think in 32 bit cpu they are same,and if your kernel compile for
32 and user space configuration for 64.....
Is it the problem ?

Explained above.
 

BRs,

Lin

2009/7/13 SandeepKsinha <sandeepksinha@xxxxxxxxx>:
> Hi Greg,
>
> find my reply inline.
>
> On Sun, Jul 12, 2009 at 11:44 PM, Greg KH <greg@xxxxxxxxx> wrote:
>>
>> On Sun, Jul 12, 2009 at 10:16:17PM +0530, SandeepKsinha wrote:
>> > Hi,
>> > to my surprise,
>> > the sizeof dev_t differs in userspace and kernel.
>> > Its 8 bytes in userspace and 4bytes in kernel.
>> >
>> > I am working on a driver, where I include the headers in both user and
>> > kernel space.
>> > And I get wrong values due to the difference in sizes.
>> >
>> > How do I handle such a situation ?
>>
>> Why would you be passing a dev_t from user to kernel space as a binary
>> value?
>
> I am not passing a dev_t as a binary from userspace to kernel space.
> Its a part of the structure.
>
> E.g
>
> struct device_info {
>
> dev_t dev_num;
> ...
> ....
> }
>
>
>>
>> Why do you want to pass such a value across the boundry in the first
>> place?
>
> This is pretty much for a custom driver,  where I perform the following.
> 1. Parse the information in user space from a XML file
> 2. Do a stat on the device,
> 3. extract the device number
> 4. Fill in the structure
> 5. Pass it to the kernel driver using ioctl.
>
> Reference: OHSM : http://code.google.com/p/fscops/
>
>>
>> Could you describe what the problem is you are trying to sove by doing
>> this?
>
> Its just a part of my implementation. And I wanted to keep this uniform
> across the system.
> But having such discrepancies really disappointed me.
>
> But I still don't understand the philosophy behind having different sizes
> for dev_t in user and kernel space.
> And most importantly, its not documented and it eventually leads to silent
> corruption. Which is real difficult to trace in complex systems.
>
>
>>
>> thanks,
>>
>> greg k-h
>
> Regards,
> Sandeep.
>
>
> “To learn is to change. Education is a process that changes the learner.”
>


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux