A number of us over in DRM land have been using __u64 scalar types to store pointers for uapi structures in accordance with Daniel Vetter's now classic treatise on ioctls: http://blog.ffwll.ch/2013/11/botching-up-ioctls.html A smaller number of us have further been marking the __u64 with __user, to wit: struct uapistruct { ... __u64 __user myptr; --- }; And then converting it for use in the kernel as such: { void __user *userptr = (void __user *)(uintptr_t)args->myptr; copy_from_user(local, userptr, size); ... } The problem is that sparse doesn't like the momentary switch to uintptr_t: warning: dereference of noderef expression Which raised a bikeshed debate over whether it is appropriate to mark a scalar type as __user. My opinion is that it is appropriate because __user should mark user memory regardless of the container. I'm looking for opinions or semi-authoritative edicts to determine if we should either start changing our uapi headers or go off and try to figure out how to make sparse understand this particular usage. Thanks! Jordan -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html