On Sat, Feb 11, 2017 at 07:48:52PM +0100, Noralf Tr?nnes wrote:
> +const struct file_operations tinydrm_fops = {
> + .owner = THIS_MODULE,
> + .open = drm_open,
> + .release = drm_release,
> + .unlocked_ioctl = drm_ioctl,
> +#ifdef CONFIG_COMPAT
> + .compat_ioctl = drm_compat_ioctl,
> +#endif
> + .poll = drm_poll,
> + .read = drm_read,
> + .llseek = no_llseek,
> + .mmap = drm_gem_cma_mmap,
> +};
> +EXPORT_SYMBOL(tinydrm_fops);
Just spotted this while doing a drive-by refactoring, this doesn't really
work. The THIS_MODULE must be in the source code for your driver, and
can't be in some helper library module like tinydrm.ko.
I'm working on a macro to make this easier, and I guess you could try to
integrate that into your driver macro somehow (probably simplest to
generate the entire structure and just pass name+desc to that macro,
everything else is boilerplate anyway).
I'll cc you on that patch.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
Den 07.03.2017 23.21, skrev Daniel Vetter:
> On Sat, Feb 11, 2017 at 07:48:52PM +0100, Noralf Tr?nnes wrote:
>> +const struct file_operations tinydrm_fops = {
>> + .owner = THIS_MODULE,
>> + .open = drm_open,
>> + .release = drm_release,
>> + .unlocked_ioctl = drm_ioctl,
>> +#ifdef CONFIG_COMPAT
>> + .compat_ioctl = drm_compat_ioctl,
>> +#endif
>> + .poll = drm_poll,
>> + .read = drm_read,
>> + .llseek = no_llseek,
>> + .mmap = drm_gem_cma_mmap,
>> +};
>> +EXPORT_SYMBOL(tinydrm_fops);
> Just spotted this while doing a drive-by refactoring, this doesn't really
> work. The THIS_MODULE must be in the source code for your driver, and
> can't be in some helper library module like tinydrm.ko.
Yeah, you're right.
> I'm working on a macro to make this easier, and I guess you could try to
> integrate that into your driver macro somehow (probably simplest to
> generate the entire structure and just pass name+desc to that macro,
> everything else is boilerplate anyway).
>
> I'll cc you on that patch.
Thanks.
Noralf.