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 <telent...@gmail.com> 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 <sandeepksi...@gmail.com>: > > Hi Greg, > > > > find my reply inline. > > > > On Sun, Jul 12, 2009 at 11:44 PM, Greg KH <g...@kroah.com> 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.” > > >