Linux wireless drivers development
 help / color / mirror / Atom feed
* alignment issue between 32bit userland and 64bit kernel
@ 2007-07-09 12:00 Masakazu Mokuno
  2007-07-09 12:03 ` Johannes Berg
  0 siblings, 1 reply; 4+ messages in thread
From: Masakazu Mokuno @ 2007-07-09 12:00 UTC (permalink / raw)
  To: linux-wireless; +Cc: Geert Uytterhoeven, geoffrey.levand

	Hi,

While developing the wireless support for PS3, I'd noticed there were alignment
issues if we issued some wireless ioctl from 32bit userland to 64bit
kernel (ppc64 PS3 does have). 

 - IW_EV_LCP_LEN in 32bit userland and 64bit kernel differ
 - offsetof(struct iw_point, length) differ

The former issue could be fixed if we added 'packed' attribute to
iw_event structure, but it would break existing 64bit userland.  I have
no idea to resolve latter issue because the first member of struct
iw_point is a pointer.

Does anyone have idea to fix these issues?
(except compiling all userland apps in 64bit mode...)

The following is the output from a test code on my PS3.

> # cat test.c
> #include <stdio.h>
> #include <netdb.h>
> #include <linux/wireless.h>
> /* packed version */
> struct iw_event_p {
>   __u16         len;
>   __u16         cmd;
>   union iwreq_data      u;
> } __attribute__((packed));
> 
> int main(void)
> {
>   printf("IW_EV_LCP_LEN=%d offset=%d,%d\n",
>          IW_EV_LCP_LEN,
>          offsetof(struct iw_event, u),
>          offsetof(struct iw_event_p, u));
>   printf("iw_event=%d iw_event_p=%d iwreq_data=%d\n",
>          sizeof(struct iw_event),
>          sizeof(struct iw_event_p),
>          sizeof(union iwreq_data));
> 
>   /* --- */
> 
>   printf("iw_point=%d length=%d flags=%d\n",
>          sizeof(struct iw_point),
>          offsetof(struct iw_point, length),
>          offsetof(struct iw_point, flags));
>   return 0;
> }
> # cc -m64 -o test_64 test.c; cc -o test_32  test.c
> # ./test_64
> IW_EV_LCP_LEN=8 offset=8,4
> iw_event=24 iw_event_p=20 iwreq_data=16
> iw_point=16 length=8 flags=10
> # ./test_32
> IW_EV_LCP_LEN=4 offset=4,4
> iw_event=20 iw_event_p=20 iwreq_data=16
> iw_point=8 length=4 flags=6
> # 

regards

--
Masakazu MOKUNO


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-07-10  7:13 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-09 12:00 alignment issue between 32bit userland and 64bit kernel Masakazu Mokuno
2007-07-09 12:03 ` Johannes Berg
2007-07-09 16:46   ` Jean Tourrilhes
2007-07-10  7:13     ` Masakazu Mokuno

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox