This reverts commit 1040e424353f5f4d39f6f3aa8723eb3bd6ea6446.
It used an incorrect way to use drm_* functions. Only drm_device ptrs
should be passed, but the mentioned commit passed mipi_dsi_host ptr.
It worked by accident due to macro magic.
Reported-by: Jani Nikula <jani.nikula@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Siddh Raman Pant <code@siddh.me>
---
drivers/gpu/drm/drm_mipi_dsi.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index 3fd6c733ff4e..a37af4edf394 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -33,7 +33,6 @@
#include <drm/display/drm_dsc.h>
#include <drm/drm_mipi_dsi.h>
-#include <drm/drm_print.h>
#include <video/mipi_display.h>
@@ -156,18 +155,19 @@ static int mipi_dsi_device_add(struct mipi_dsi_device *dsi)
static struct mipi_dsi_device *
of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
{
+ struct device *dev = host->dev;
struct mipi_dsi_device_info info = { };
int ret;
u32 reg;
if (of_alias_from_compatible(node, info.type, sizeof(info.type)) < 0) {
- drm_err(host, "modalias failure on %pOF\n", node);
+ dev_err(dev, "modalias failure on %pOF\n", node);
return ERR_PTR(-EINVAL);
}
ret = of_property_read_u32(node, "reg", ®);
if (ret) {
- drm_err(host, "device node %pOF has no valid reg property: %d\n",
+ dev_err(dev, "device node %pOF has no valid reg property: %d\n",
node, ret);
return ERR_PTR(-EINVAL);
}
@@ -202,21 +202,22 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host,
const struct mipi_dsi_device_info *info)
{
struct mipi_dsi_device *dsi;
+ struct device *dev = host->dev;
int ret;
if (!info) {
- drm_err(host, "invalid mipi_dsi_device_info pointer\n");
+ dev_err(dev, "invalid mipi_dsi_device_info pointer\n");
return ERR_PTR(-EINVAL);
}
if (info->channel > 3) {
- drm_err(host, "invalid virtual channel: %u\n", info->channel);
+ dev_err(dev, "invalid virtual channel: %u\n", info->channel);
return ERR_PTR(-EINVAL);
}
dsi = mipi_dsi_device_alloc(host);
if (IS_ERR(dsi)) {
- drm_err(host, "failed to allocate DSI device %ld\n",
+ dev_err(dev, "failed to allocate DSI device %ld\n",
PTR_ERR(dsi));
return dsi;
}
@@ -227,7 +228,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host,
ret = mipi_dsi_device_add(dsi);
if (ret) {
- drm_err(host, "failed to add DSI device %d\n", ret);
+ dev_err(dev, "failed to add DSI device %d\n", ret);
kfree(dsi);
return ERR_PTR(ret);
}
--
2.39.2
Hi Siddh, Thank you for the patch. On Tue, Jun 06, 2023 at 04:15:15PM +0530, Siddh Raman Pant wrote: > This reverts commit 1040e424353f5f4d39f6f3aa8723eb3bd6ea6446. > > It used an incorrect way to use drm_* functions. Only drm_device ptrs > should be passed, but the mentioned commit passed mipi_dsi_host ptr. > It worked by accident due to macro magic. > > Reported-by: Jani Nikula <jani.nikula@linux.intel.com> > Reviewed-by: Jani Nikula <jani.nikula@intel.com> > Signed-off-by: Siddh Raman Pant <code@siddh.me> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Any chance we could prevent this from happening by turning the macros into inline functions ? > --- > drivers/gpu/drm/drm_mipi_dsi.c | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c > index 3fd6c733ff4e..a37af4edf394 100644 > --- a/drivers/gpu/drm/drm_mipi_dsi.c > +++ b/drivers/gpu/drm/drm_mipi_dsi.c > @@ -33,7 +33,6 @@ > > #include <drm/display/drm_dsc.h> > #include <drm/drm_mipi_dsi.h> > -#include <drm/drm_print.h> > > #include <video/mipi_display.h> > > @@ -156,18 +155,19 @@ static int mipi_dsi_device_add(struct mipi_dsi_device *dsi) > static struct mipi_dsi_device * > of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) > { > + struct device *dev = host->dev; > struct mipi_dsi_device_info info = { }; > int ret; > u32 reg; > > if (of_alias_from_compatible(node, info.type, sizeof(info.type)) < 0) { > - drm_err(host, "modalias failure on %pOF\n", node); > + dev_err(dev, "modalias failure on %pOF\n", node); > return ERR_PTR(-EINVAL); > } > > ret = of_property_read_u32(node, "reg", ®); > if (ret) { > - drm_err(host, "device node %pOF has no valid reg property: %d\n", > + dev_err(dev, "device node %pOF has no valid reg property: %d\n", > node, ret); > return ERR_PTR(-EINVAL); > } > @@ -202,21 +202,22 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, > const struct mipi_dsi_device_info *info) > { > struct mipi_dsi_device *dsi; > + struct device *dev = host->dev; > int ret; > > if (!info) { > - drm_err(host, "invalid mipi_dsi_device_info pointer\n"); > + dev_err(dev, "invalid mipi_dsi_device_info pointer\n"); > return ERR_PTR(-EINVAL); > } > > if (info->channel > 3) { > - drm_err(host, "invalid virtual channel: %u\n", info->channel); > + dev_err(dev, "invalid virtual channel: %u\n", info->channel); > return ERR_PTR(-EINVAL); > } > > dsi = mipi_dsi_device_alloc(host); > if (IS_ERR(dsi)) { > - drm_err(host, "failed to allocate DSI device %ld\n", > + dev_err(dev, "failed to allocate DSI device %ld\n", > PTR_ERR(dsi)); > return dsi; > } > @@ -227,7 +228,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, > > ret = mipi_dsi_device_add(dsi); > if (ret) { > - drm_err(host, "failed to add DSI device %d\n", ret); > + dev_err(dev, "failed to add DSI device %d\n", ret); > kfree(dsi); > return ERR_PTR(ret); > } > -- Regards, Laurent Pinchart
On Tue, 06 Jun 2023 18:25:37 +0530, Laurent Pinchart wrote: > Hi Siddh, > > Thank you for the patch. Anytime :) > Any chance we could prevent this from happening by turning the macros > into inline functions ? The next patch in the series almost does that, with a function introduced as Jani mentioned. The macros will call that function, so if the argument is not drm_device there will be error. Thanks, Siddh
On Tue, 06 Jun 2023, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > Hi Siddh, > > Thank you for the patch. > > On Tue, Jun 06, 2023 at 04:15:15PM +0530, Siddh Raman Pant wrote: >> This reverts commit 1040e424353f5f4d39f6f3aa8723eb3bd6ea6446. >> >> It used an incorrect way to use drm_* functions. Only drm_device ptrs >> should be passed, but the mentioned commit passed mipi_dsi_host ptr. >> It worked by accident due to macro magic. >> >> Reported-by: Jani Nikula <jani.nikula@linux.intel.com> >> Reviewed-by: Jani Nikula <jani.nikula@intel.com> >> Signed-off-by: Siddh Raman Pant <code@siddh.me> > > Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> > > Any chance we could prevent this from happening by turning the macros > into inline functions ? Patch 2 adds static inline struct device *__drm_dev_ptr(const struct drm_device *drm) which should tackle this. BR, Jani. > >> --- >> drivers/gpu/drm/drm_mipi_dsi.c | 15 ++++++++------- >> 1 file changed, 8 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c >> index 3fd6c733ff4e..a37af4edf394 100644 >> --- a/drivers/gpu/drm/drm_mipi_dsi.c >> +++ b/drivers/gpu/drm/drm_mipi_dsi.c >> @@ -33,7 +33,6 @@ >> >> #include <drm/display/drm_dsc.h> >> #include <drm/drm_mipi_dsi.h> >> -#include <drm/drm_print.h> >> >> #include <video/mipi_display.h> >> >> @@ -156,18 +155,19 @@ static int mipi_dsi_device_add(struct mipi_dsi_device *dsi) >> static struct mipi_dsi_device * >> of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node) >> { >> + struct device *dev = host->dev; >> struct mipi_dsi_device_info info = { }; >> int ret; >> u32 reg; >> >> if (of_alias_from_compatible(node, info.type, sizeof(info.type)) < 0) { >> - drm_err(host, "modalias failure on %pOF\n", node); >> + dev_err(dev, "modalias failure on %pOF\n", node); >> return ERR_PTR(-EINVAL); >> } >> >> ret = of_property_read_u32(node, "reg", ®); >> if (ret) { >> - drm_err(host, "device node %pOF has no valid reg property: %d\n", >> + dev_err(dev, "device node %pOF has no valid reg property: %d\n", >> node, ret); >> return ERR_PTR(-EINVAL); >> } >> @@ -202,21 +202,22 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, >> const struct mipi_dsi_device_info *info) >> { >> struct mipi_dsi_device *dsi; >> + struct device *dev = host->dev; >> int ret; >> >> if (!info) { >> - drm_err(host, "invalid mipi_dsi_device_info pointer\n"); >> + dev_err(dev, "invalid mipi_dsi_device_info pointer\n"); >> return ERR_PTR(-EINVAL); >> } >> >> if (info->channel > 3) { >> - drm_err(host, "invalid virtual channel: %u\n", info->channel); >> + dev_err(dev, "invalid virtual channel: %u\n", info->channel); >> return ERR_PTR(-EINVAL); >> } >> >> dsi = mipi_dsi_device_alloc(host); >> if (IS_ERR(dsi)) { >> - drm_err(host, "failed to allocate DSI device %ld\n", >> + dev_err(dev, "failed to allocate DSI device %ld\n", >> PTR_ERR(dsi)); >> return dsi; >> } >> @@ -227,7 +228,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host, >> >> ret = mipi_dsi_device_add(dsi); >> if (ret) { >> - drm_err(host, "failed to add DSI device %d\n", ret); >> + dev_err(dev, "failed to add DSI device %d\n", ret); >> kfree(dsi); >> return ERR_PTR(ret); >> } >> -- Jani Nikula, Intel Open Source Graphics Center
© 2016 - 2025 Red Hat, Inc.