Hi Javier, On Thu, Nov 04, 2021 at 05:07:06PM +0100, Javier Martinez Canillas wrote: > Some DRM drivers check the vgacon_text_force() function return value as an > indication on whether they should be allowed to be enabled or not. > > This function returns true if the nomodeset kernel command line parameter > was set. But there may be other conditions besides this to determine if a > driver should be enabled. > > Let's add a drm_drv_enabled() helper function to encapsulate that logic so > can be later extended if needed, without having to modify all the drivers. > > Also, while being there do some cleanup. The vgacon_text_force() function > is guarded by CONFIG_VGA_CONSOLE and there's no need for callers to do it. > > Suggested-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > Signed-off-by: Javier Martinez Canillas <javierm@xxxxxxxxxx> > --- > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index 8214a0b1ab7f..3fb567d62881 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -975,6 +975,26 @@ int drm_dev_set_unique(struct drm_device *dev, const char *name) > } > EXPORT_SYMBOL(drm_dev_set_unique); > > +/** > + * drm_drv_enabled - Checks if a DRM driver can be enabled > + * @driver: DRM driver to check > + * > + * Checks whether a DRM driver can be enabled or not. This may be the case > + * if the "nomodeset" kernel command line parameter is used. > + * > + * Return: 0 on success or a negative error code on failure. > + */ > +int drm_drv_enabled(const struct drm_driver *driver) > +{ > + if (vgacon_text_force()) { > + DRM_INFO("%s driver is disabled\n", driver->name); DRM_INFO is deprecated, please do not use it in new code. Also other users had an error message and not just info - is info enough? > + return -ENODEV; > + } > + > + return 0; > +} > +EXPORT_SYMBOL(drm_drv_enabled); > + > /* > * DRM Core > * The DRM core module initializes all global DRM objects and makes them > diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c > index ab2295dd4500..45cb3e540eff 100644 > --- a/drivers/gpu/drm/i915/i915_module.c > +++ b/drivers/gpu/drm/i915/i915_module.c > @@ -18,9 +18,12 @@ > #include "i915_selftest.h" > #include "i915_vma.h" > > +static const struct drm_driver driver; Hmmm... > + > static int i915_check_nomodeset(void) > { > bool use_kms = true; > + int ret; > > /* > * Enable KMS by default, unless explicitly overriden by > @@ -31,7 +34,8 @@ static int i915_check_nomodeset(void) > if (i915_modparams.modeset == 0) > use_kms = false; > > - if (vgacon_text_force() && i915_modparams.modeset == -1) > + ret = drm_drv_enabled(&driver); You pass the local driver variable here - which looks wrong as this is not the same as the driver variable declared in another file. Maybe move the check to new function you can add to init_funcs, and locate the new function in i915_drv - so it has access to driver? Sam