Javier Martinez Canillas
2021-Nov-03 12:28 UTC
[Nouveau] [RESEND PATCH 3/5] drm: Rename vgacon_text_force() function to drm_modeset_disabled()
This function is used by some DRM drivers to determine if the "nomodeset" kernel command line parameter was set and prevent these drivers to probe. But the function name is quite confusing and does not reflect what really the drivers are testing when calling it. Use a better naming now that it is part of the DRM subsystem. Also, vgacon_text_force() is guarded by #ifdef CONFIG_VGA_CONSOLE already so there is no need to do the same when calling the function. Suggested-by: Suggested-by: Daniel Vetter <daniel.vetter at ffwll.ch> Signed-off-by: Javier Martinez Canillas <javierm at redhat.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- drivers/gpu/drm/ast/ast_drv.c | 2 +- drivers/gpu/drm/drm_nomodeset.c | 16 ++++++++-------- drivers/gpu/drm/i915/i915_module.c | 2 +- drivers/gpu/drm/mgag200/mgag200_drv.c | 2 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +- drivers/gpu/drm/qxl/qxl_drv.c | 2 +- drivers/gpu/drm/radeon/radeon_drv.c | 2 +- drivers/gpu/drm/tiny/bochs.c | 2 +- drivers/gpu/drm/tiny/cirrus.c | 2 +- drivers/gpu/drm/vboxvideo/vbox_drv.c | 4 +--- drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 +- include/drm/drm_mode_config.h | 4 ++-- 14 files changed, 22 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 2680a2aaa877..f7bd2616cf23 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -2513,7 +2513,7 @@ static int __init amdgpu_init(void) { int r; - if (vgacon_text_force()) { + if (drm_modeset_disabled()) { DRM_ERROR("amdgpu kernel modesetting disabled.\n"); return -EINVAL; } diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c index 048be607b182..6706050414c3 100644 --- a/drivers/gpu/drm/ast/ast_drv.c +++ b/drivers/gpu/drm/ast/ast_drv.c @@ -232,7 +232,7 @@ static struct pci_driver ast_pci_driver = { static int __init ast_init(void) { - if (vgacon_text_force() && ast_modeset == -1) + if (drm_modeset_disabled() && ast_modeset == -1) return -EINVAL; if (ast_modeset == 0) diff --git a/drivers/gpu/drm/drm_nomodeset.c b/drivers/gpu/drm/drm_nomodeset.c index 1ac9a8d5a8fe..dfc8b30f0625 100644 --- a/drivers/gpu/drm/drm_nomodeset.c +++ b/drivers/gpu/drm/drm_nomodeset.c @@ -3,17 +3,17 @@ #include <linux/module.h> #include <linux/types.h> -static bool vgacon_text_mode_force; +static bool drm_nomodeset; -bool vgacon_text_force(void) +bool drm_modeset_disabled(void) { - return vgacon_text_mode_force; + return drm_nomodeset; } -EXPORT_SYMBOL(vgacon_text_force); +EXPORT_SYMBOL(drm_modeset_disabled); -static int __init text_mode(char *str) +static int __init disable_modeset(char *str) { - vgacon_text_mode_force = true; + drm_nomodeset = true; pr_warn("You have booted with nomodeset. This means your GPU drivers are DISABLED\n"); pr_warn("Any video related functionality will be severely degraded, and you may not even be able to suspend the system properly\n"); @@ -22,5 +22,5 @@ static int __init text_mode(char *str) return 1; } -/* force text mode - used by kernel modesetting */ -__setup("nomodeset", text_mode); +/* Disable kernel modesetting */ +__setup("nomodeset", disable_modeset); diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c index 14a59226519d..3e5531040e4d 100644 --- a/drivers/gpu/drm/i915/i915_module.c +++ b/drivers/gpu/drm/i915/i915_module.c @@ -29,7 +29,7 @@ static int i915_check_nomodeset(void) if (i915_modparams.modeset == 0) use_kms = false; - if (vgacon_text_force() && i915_modparams.modeset == -1) + if (drm_modeset_disabled() && i915_modparams.modeset == -1) use_kms = false; if (!use_kms) { diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c index 685e766db6a4..7ee87564bade 100644 --- a/drivers/gpu/drm/mgag200/mgag200_drv.c +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c @@ -377,7 +377,7 @@ static struct pci_driver mgag200_pci_driver = { static int __init mgag200_init(void) { - if (vgacon_text_force() && mgag200_modeset == -1) + if (drm_modeset_disabled() && mgag200_modeset == -1) return -EINVAL; if (mgag200_modeset == 0) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 029997f50d1a..903d0e626954 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -1321,7 +1321,7 @@ nouveau_drm_init(void) nouveau_display_options(); if (nouveau_modeset == -1) { - if (vgacon_text_force()) + if (drm_modeset_disabled()) nouveau_modeset = 0; } diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c index 3cd6bd9f059d..e4ab16837fad 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.c +++ b/drivers/gpu/drm/qxl/qxl_drv.c @@ -294,7 +294,7 @@ static struct drm_driver qxl_driver = { static int __init qxl_init(void) { - if (vgacon_text_force() && qxl_modeset == -1) + if (drm_modeset_disabled() && qxl_modeset == -1) return -EINVAL; if (qxl_modeset == 0) diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 9b606c1b11ec..36c8dac68cca 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c @@ -636,7 +636,7 @@ static struct pci_driver radeon_kms_pci_driver = { static int __init radeon_module_init(void) { - if (vgacon_text_force() && radeon_modeset == -1) { + if (drm_modeset_disabled() && radeon_modeset == -1) { DRM_INFO("VGACON disable radeon kernel modesetting.\n"); radeon_modeset = 0; } diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c index 04333f78be55..59189f7c1840 100644 --- a/drivers/gpu/drm/tiny/bochs.c +++ b/drivers/gpu/drm/tiny/bochs.c @@ -718,7 +718,7 @@ static struct pci_driver bochs_pci_driver = { static int __init bochs_init(void) { - if (vgacon_text_force() && bochs_modeset == -1) + if (drm_modeset_disabled() && bochs_modeset == -1) return -EINVAL; if (bochs_modeset == 0) diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c index 8bd674f0d682..fcf98379c641 100644 --- a/drivers/gpu/drm/tiny/cirrus.c +++ b/drivers/gpu/drm/tiny/cirrus.c @@ -635,7 +635,7 @@ static struct pci_driver cirrus_pci_driver = { static int __init cirrus_init(void) { - if (vgacon_text_force()) + if (drm_modeset_disabled()) return -EINVAL; return pci_register_driver(&cirrus_pci_driver); } diff --git a/drivers/gpu/drm/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c index e6d983121d0b..09356dbd69b2 100644 --- a/drivers/gpu/drm/vboxvideo/vbox_drv.c +++ b/drivers/gpu/drm/vboxvideo/vbox_drv.c @@ -192,10 +192,8 @@ static const struct drm_driver driver = { static int __init vbox_init(void) { -#ifdef CONFIG_VGA_CONSOLE - if (vgacon_text_force() && vbox_modeset == -1) + if (drm_modeset_disabled() && vbox_modeset == -1) return -EINVAL; -#endif if (vbox_modeset == 0) return -EINVAL; diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c index cd4c170236f1..d96797d70fae 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.c +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c @@ -103,7 +103,7 @@ static int virtio_gpu_probe(struct virtio_device *vdev) struct drm_device *dev; int ret; - if (vgacon_text_force() && virtio_gpu_modeset == -1) + if (drm_modeset_disabled() && virtio_gpu_modeset == -1) return -EINVAL; if (virtio_gpu_modeset == 0) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index fcc4b5a7f639..22dab9beea03 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -1650,7 +1650,7 @@ static int __init vmwgfx_init(void) { int ret; - if (vgacon_text_force()) + if (drm_modeset_disabled()) return -EINVAL; ret = pci_register_driver(&vmw_pci_driver); diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index e1d2042a7b77..a5a2dc02e892 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -970,9 +970,9 @@ void drm_mode_config_reset(struct drm_device *dev); void drm_mode_config_cleanup(struct drm_device *dev); #ifdef CONFIG_VGA_CONSOLE -extern bool vgacon_text_force(void); +extern bool drm_modeset_disabled(void); #else -static inline bool vgacon_text_force(void) { return false; } +static inline bool drm_modeset_disabled(void) { return false; } #endif #endif -- 2.33.1
Thomas Zimmermann
2021-Nov-03 12:57 UTC
[RESEND PATCH 3/5] drm: Rename vgacon_text_force() function to drm_modeset_disabled()
Hi Am 03.11.21 um 13:28 schrieb Javier Martinez Canillas:> This function is used by some DRM drivers to determine if the "nomodeset" > kernel command line parameter was set and prevent these drivers to probe. > > But the function name is quite confusing and does not reflect what really > the drivers are testing when calling it. Use a better naming now that it > is part of the DRM subsystem. > > Also, vgacon_text_force() is guarded by #ifdef CONFIG_VGA_CONSOLE already > so there is no need to do the same when calling the function. > > Suggested-by: Suggested-by: Daniel Vetter <daniel.vetter at ffwll.ch> > Signed-off-by: Javier Martinez Canillas <javierm at redhat.com> > --- > > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- > drivers/gpu/drm/ast/ast_drv.c | 2 +- > drivers/gpu/drm/drm_nomodeset.c | 16 ++++++++-------- > drivers/gpu/drm/i915/i915_module.c | 2 +- > drivers/gpu/drm/mgag200/mgag200_drv.c | 2 +- > drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +- > drivers/gpu/drm/qxl/qxl_drv.c | 2 +- > drivers/gpu/drm/radeon/radeon_drv.c | 2 +- > drivers/gpu/drm/tiny/bochs.c | 2 +- > drivers/gpu/drm/tiny/cirrus.c | 2 +- > drivers/gpu/drm/vboxvideo/vbox_drv.c | 4 +--- > drivers/gpu/drm/virtio/virtgpu_drv.c | 2 +- > drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 2 +- > include/drm/drm_mode_config.h | 4 ++-- > 14 files changed, 22 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index 2680a2aaa877..f7bd2616cf23 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -2513,7 +2513,7 @@ static int __init amdgpu_init(void) > { > int r; > > - if (vgacon_text_force()) { > + if (drm_modeset_disabled()) { > DRM_ERROR("amdgpu kernel modesetting disabled.\n");Please remove all such error messages from drivers. drm_modeset_disabled() should print a unified message instead.> return -EINVAL; > } > diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c > index 048be607b182..6706050414c3 100644 > --- a/drivers/gpu/drm/ast/ast_drv.c > +++ b/drivers/gpu/drm/ast/ast_drv.c > @@ -232,7 +232,7 @@ static struct pci_driver ast_pci_driver = { > > static int __init ast_init(void) > { > - if (vgacon_text_force() && ast_modeset == -1) > + if (drm_modeset_disabled() && ast_modeset == -1) > return -EINVAL; > > if (ast_modeset == 0) > diff --git a/drivers/gpu/drm/drm_nomodeset.c b/drivers/gpu/drm/drm_nomodeset.c > index 1ac9a8d5a8fe..dfc8b30f0625 100644 > --- a/drivers/gpu/drm/drm_nomodeset.c > +++ b/drivers/gpu/drm/drm_nomodeset.c > @@ -3,17 +3,17 @@ > #include <linux/module.h> > #include <linux/types.h> > > -static bool vgacon_text_mode_force; > +static bool drm_nomodeset; > > -bool vgacon_text_force(void) > +bool drm_modeset_disabled(void)I suggest to rename this function to drm_check_modeset() and have it return a negative errno code on failure. This gives maximum flexibility and reduces errors in drivers. Right now the drivers return something like -EINVAL, which seems wrong. Returning -ENODEV seems more appropriate.> { > - return vgacon_text_mode_force; > + return drm_nomodeset; > } > -EXPORT_SYMBOL(vgacon_text_force); > +EXPORT_SYMBOL(drm_modeset_disabled); > > -static int __init text_mode(char *str) > +static int __init disable_modeset(char *str) > { > - vgacon_text_mode_force = true; > + drm_nomodeset = true; > > pr_warn("You have booted with nomodeset. This means your GPU drivers are DISABLED\n"); > pr_warn("Any video related functionality will be severely degraded, and you may not even be able to suspend the system properly\n"); > @@ -22,5 +22,5 @@ static int __init text_mode(char *str) > return 1; > } > > -/* force text mode - used by kernel modesetting */ > -__setup("nomodeset", text_mode); > +/* Disable kernel modesetting */ > +__setup("nomodeset", disable_modeset); > diff --git a/drivers/gpu/drm/i915/i915_module.c b/drivers/gpu/drm/i915/i915_module.c > index 14a59226519d..3e5531040e4d 100644 > --- a/drivers/gpu/drm/i915/i915_module.c > +++ b/drivers/gpu/drm/i915/i915_module.c > @@ -29,7 +29,7 @@ static int i915_check_nomodeset(void) > if (i915_modparams.modeset == 0) > use_kms = false; > > - if (vgacon_text_force() && i915_modparams.modeset == -1) > + if (drm_modeset_disabled() && i915_modparams.modeset == -1) > use_kms = false; > > if (!use_kms) { > diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c b/drivers/gpu/drm/mgag200/mgag200_drv.c > index 685e766db6a4..7ee87564bade 100644 > --- a/drivers/gpu/drm/mgag200/mgag200_drv.c > +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c > @@ -377,7 +377,7 @@ static struct pci_driver mgag200_pci_driver = { > > static int __init mgag200_init(void) > { > - if (vgacon_text_force() && mgag200_modeset == -1) > + if (drm_modeset_disabled() && mgag200_modeset == -1) > return -EINVAL; > > if (mgag200_modeset == 0) > diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c > index 029997f50d1a..903d0e626954 100644 > --- a/drivers/gpu/drm/nouveau/nouveau_drm.c > +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c > @@ -1321,7 +1321,7 @@ nouveau_drm_init(void) > nouveau_display_options(); > > if (nouveau_modeset == -1) { > - if (vgacon_text_force()) > + if (drm_modeset_disabled()) > nouveau_modeset = 0; > } > > diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c > index 3cd6bd9f059d..e4ab16837fad 100644 > --- a/drivers/gpu/drm/qxl/qxl_drv.c > +++ b/drivers/gpu/drm/qxl/qxl_drv.c > @@ -294,7 +294,7 @@ static struct drm_driver qxl_driver = { > > static int __init qxl_init(void) > { > - if (vgacon_text_force() && qxl_modeset == -1) > + if (drm_modeset_disabled() && qxl_modeset == -1) > return -EINVAL; > > if (qxl_modeset == 0) > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c > index 9b606c1b11ec..36c8dac68cca 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -636,7 +636,7 @@ static struct pci_driver radeon_kms_pci_driver = { > > static int __init radeon_module_init(void) > { > - if (vgacon_text_force() && radeon_modeset == -1) { > + if (drm_modeset_disabled() && radeon_modeset == -1) { > DRM_INFO("VGACON disable radeon kernel modesetting.\n"); > radeon_modeset = 0; > } > diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c > index 04333f78be55..59189f7c1840 100644 > --- a/drivers/gpu/drm/tiny/bochs.c > +++ b/drivers/gpu/drm/tiny/bochs.c > @@ -718,7 +718,7 @@ static struct pci_driver bochs_pci_driver = { > > static int __init bochs_init(void) > { > - if (vgacon_text_force() && bochs_modeset == -1) > + if (drm_modeset_disabled() && bochs_modeset == -1) > return -EINVAL; > > if (bochs_modeset == 0) > diff --git a/drivers/gpu/drm/tiny/cirrus.c b/drivers/gpu/drm/tiny/cirrus.c > index 8bd674f0d682..fcf98379c641 100644 > --- a/drivers/gpu/drm/tiny/cirrus.c > +++ b/drivers/gpu/drm/tiny/cirrus.c > @@ -635,7 +635,7 @@ static struct pci_driver cirrus_pci_driver = { > > static int __init cirrus_init(void) > { > - if (vgacon_text_force()) > + if (drm_modeset_disabled()) > return -EINVAL; > return pci_register_driver(&cirrus_pci_driver); > } > diff --git a/drivers/gpu/drm/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c > index e6d983121d0b..09356dbd69b2 100644 > --- a/drivers/gpu/drm/vboxvideo/vbox_drv.c > +++ b/drivers/gpu/drm/vboxvideo/vbox_drv.c > @@ -192,10 +192,8 @@ static const struct drm_driver driver = { > > static int __init vbox_init(void) > { > -#ifdef CONFIG_VGA_CONSOLE > - if (vgacon_text_force() && vbox_modeset == -1) > + if (drm_modeset_disabled() && vbox_modeset == -1) > return -EINVAL; > -#endif > > if (vbox_modeset == 0) > return -EINVAL; > diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c > index cd4c170236f1..d96797d70fae 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_drv.c > +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c > @@ -103,7 +103,7 @@ static int virtio_gpu_probe(struct virtio_device *vdev) > struct drm_device *dev; > int ret; > > - if (vgacon_text_force() && virtio_gpu_modeset == -1) > + if (drm_modeset_disabled() && virtio_gpu_modeset == -1) > return -EINVAL; > > if (virtio_gpu_modeset == 0) > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > index fcc4b5a7f639..22dab9beea03 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > @@ -1650,7 +1650,7 @@ static int __init vmwgfx_init(void) > { > int ret; > > - if (vgacon_text_force()) > + if (drm_modeset_disabled()) > return -EINVAL; > > ret = pci_register_driver(&vmw_pci_driver); > diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h > index e1d2042a7b77..a5a2dc02e892 100644 > --- a/include/drm/drm_mode_config.h > +++ b/include/drm/drm_mode_config.h > @@ -970,9 +970,9 @@ void drm_mode_config_reset(struct drm_device *dev); > void drm_mode_config_cleanup(struct drm_device *dev); > > #ifdef CONFIG_VGA_CONSOLE > -extern bool vgacon_text_force(void); > +extern bool drm_modeset_disabled(void); > #else > -static inline bool vgacon_text_force(void) { return false; } > +static inline bool drm_modeset_disabled(void) { return false; } > #endif > > #endif >-- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Maxfeldstr. 5, 90409 N?rnberg, Germany (HRB 36809, AG N?rnberg) Gesch?ftsf?hrer: Ivo Totev -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_signature Type: application/pgp-signature Size: 840 bytes Desc: OpenPGP digital signature URL: <http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20211103/9e7a5210/attachment.sig>
Javier Martinez Canillas
2021-Nov-03 14:28 UTC
[Nouveau] [RESEND PATCH 3/5] drm: Rename vgacon_text_force() function to drm_modeset_disabled()
On 11/3/21 13:57, Thomas Zimmermann wrote: [snip]>> >> - if (vgacon_text_force()) { >> + if (drm_modeset_disabled()) { >> DRM_ERROR("amdgpu kernel modesetting disabled.\n"); > > Please remove all such error messages from drivers. > drm_modeset_disabled() should print a unified message instead. >Agreed.>> -static bool vgacon_text_mode_force; >> +static bool drm_nomodeset; >> >> -bool vgacon_text_force(void) >> +bool drm_modeset_disabled(void) > > I suggest to rename this function to drm_check_modeset() and have it > return a negative errno code on failure. This gives maximum flexibility > and reduces errors in drivers. Right now the drivers return something > like -EINVAL, which seems wrong. Returning -ENODEV seems more appropriate. >Good idea. I'll do it in v2 as well. Best regards, -- Javier Martinez Canillas Linux Engineering Red Hat