On Sun, Jun 9, 2019 at 10:40 PM Joe Perches <joe@xxxxxxxxxxx> wrote: > > On Sun, 2019-06-09 at 22:08 +0900, Masahiro Yamada wrote: > > On Sun, Jun 9, 2019 at 8:57 PM Joe Perches <joe@xxxxxxxxxxx> wrote: > > > On Sun, 2019-06-09 at 16:14 +0900, Masahiro Yamada wrote: > > > > Hi Joe, > > > > > > > > On Thu, Jun 6, 2019 at 2:06 AM Joe Perches <joe@xxxxxxxxxxx> wrote: > > > > > Perhaps a checkpatch change too: > > > > > > > > > > The first block updates unsigned only bitfields > > > > > The second tests uapi definitions and suggests "__<kernel_types" > > > > > > > > Good. > > > > > > > > In addition, > > > > > > > > "warn if __u8, __u16, __u32, __u64 are used outside of uapi/" > > > > > > > > Lots of kernel-space headers use __u{8,16,32,64} instead of u{8,16,32,64} > > > > just because developers often miss to understand when to use > > > > the underscore-prefixed types. > > > > > > The problem there is that checkpatch can't know if the > > > __<uapi_type> being used is for an actual uapi use or not. > > > > > > coccinelle could be much better at that. > > > > Why? > > > Perhaps it's (somewhat) bad form to have a __uapi type in a > structure, include that structure in a driver for something > like a copy_to/from_user, and map the __<uapi_type> to a non > underscore prefixed <kernel_type> Linus Torvalds wrote 'sparse' to check this. Any attempt to distinguish the address-space by the presence of double-underscore-prefixes is pointless. This is already checked by __kernel / __user. It is absolutely correct to assign __u32 to u32, and vice versa. If you think the following patch is wrong, please tell me why: diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 748ac489ef7e..24c1b73d9fbd 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1132,7 +1132,7 @@ static struct binder_node *binder_init_node_ilocked( struct binder_node *node; binder_uintptr_t ptr = fp ? fp->binder : 0; binder_uintptr_t cookie = fp ? fp->cookie : 0; - __u32 flags = fp ? fp->flags : 0; + u32 flags = fp ? fp->flags : 0; assert_spin_locked(&proc->inner_lock); @@ -4918,7 +4918,7 @@ static int binder_ioctl_get_node_info_for_ref(struct binder_proc *proc, { struct binder_node *node; struct binder_context *context = proc->context; - __u32 handle = info->handle; + u32 handle = info->handle; if (info->strong_count || info->weak_count || info->reserved1 || info->reserved2 || info->reserved3) { > > For instance > > struct flat_binder_object in drivers/android/binder.c > > How is checkpatch supposed to know that __u32 flags is > inappropriate? > > -- Best Regards Masahiro Yamada