64-bit platforms do. So we always need padding to the natural size to get
this right.
- * Pad the entire struct to a multiple of 64-bits - the structure size will
- otherwise differ on 32-bit versus 64-bit. Having a different structure size
- hurts when passing arrays of structures to the kernel, or if the kernel
- checks the structure size, which e.g. the drm core does.
+ * Pad the entire struct to a multiple of 64-bits if the structure contains
+ 64-bit types - the structure size will otherwise differ on 32-bit versus
+ 64-bit. Having a different structure size hurts when passing arrays of
+ structures to the kernel, or if the kernel checks the structure size, which
+ e.g. the drm core does.
* Pointers are __u64, cast from/to a uintprt_t on the userspace side and
from/to a void __user * in the kernel. Try really hard not to delay this
conversion or worse, fiddle the raw __u64 through your code since that
- diminishes the checking tools like sparse can provide.
+ diminishes the checking tools like sparse can provide. The macro
+ u64_to_user_ptr can be used in the kernel to avoid warnings about integers
+ and pointres of different sizes.
Basics