[PATCH 0/2] Do not call kref utility functions from static inline code

Andy Ritger aritger at nvidia.com
Wed Apr 19 05:37:24 UTC 2017


On Tue, Apr 18, 2017 at 10:26:39PM +0200, Daniel Vetter wrote:
> On Tue, Apr 18, 2017 at 7:55 PM, Andy Ritger <aritger at nvidia.com> wrote:
> > I explained:
> >
> >     We intentionally chose MODULE_LICENSE("MIT") for nvidia-drm.ko, rather
> >     than MODULE_LICENSE("Dual MIT/GPL"), to avoid any ambiguity:
> >
> >     * nvidia-drm.ko depends on nvidia.ko, which is MODULE_LICENSE("NVIDIA").
> >
> >     * nvidia-drm.ko is the portion of the NVIDIA dGPU driver that interfaces
> >       with DRM in the kernel.  We wouldn't want nvidia-drm.ko to
> >       inadvertently function as, or even be perceived as, a path for
> >       nvidia.ko to indirectly get access to EXPORT_SYMBOL_GPL symbols.
> 
> So I'm a layman and all that, but I don't get why this is relevant at
> all. Speaking for myself, not my employer, not legal advice, yadayada,
> but I see two options:
> 
> - the blob has become at least partially a derived work of the linux
> kernel work. You're fucked, whether you use gpl only symbols or not,
> because if there ever was some meaning to labelling stuff gpl-only it
> has long evaporated imo and become a pure political thing.
> 
> - it is still a clearly independent work. There's no problem, because
> only the nvidia-drm impendence mismatch layer is a derived work (no on
> argues that I guess), and that along could easily ship as a part of
> the kernel with the overall GPL license. Of course upstream wont do
> that because it'd be pointless, but I don't see a problem.
> 
> So either labelling it as dual MIT/GPL isn't really a problem, or
> labelling it as MIT-only isn't going to save your (legally speaking at
> least).
> 
> Doing simple wrappers around gpl-only symbols otoh like you do here
> isn't any different from shipping it as part of nvidia-drm, at least I
> don't see how this factually changes anything.

>From my perspective, the distinction is:

* How drm functions are implemented is an implementation detail of drm.
  The implementations of these functions use kref/refcount_t today because
  they are well-proven primitives in the kernel.  But, they could just
  as easily have an entirely different implementation, and drm drivers
  don't need to care.

* In contrast, if nvidia-drm directly accesses kref/refcount_t, we were
  worried it would be perceived by some as an attempt to side-step the
  intent of refcount_t being EXPORT_SYMBOL_GPL in the first place.
  My goal was just for nvidia-drm to plug into the drm subsystem, not to
  use any facilities that were deemed low-level implementation details
  of the kernel.

Thanks,
- Andy



More information about the dri-devel mailing list