diff mbox series

[v2,06/10] drm/bochs: Allocate DRM device in struct bochs_device

Message ID 20240902105546.792625-7-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/bochs: Modernize driver | expand

Commit Message

Thomas Zimmermann Sept. 2, 2024, 10:53 a.m. UTC
Allocate an instance of struct drm_device in struct bochs_device. Also
remove all uses of dev_private from bochs and upcast from the embedded
instance if necessary.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/tiny/bochs.c | 52 +++++++++++++++++-------------------
 1 file changed, 25 insertions(+), 27 deletions(-)

Comments

Kees Bakker Oct. 2, 2024, 8 p.m. UTC | #1
Op 02-09-2024 om 12:53 schreef Thomas Zimmermann:
> Allocate an instance of struct drm_device in struct bochs_device. Also
> remove all uses of dev_private from bochs and upcast from the embedded
> instance if necessary.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>   drivers/gpu/drm/tiny/bochs.c | 52 +++++++++++++++++-------------------
>   1 file changed, 25 insertions(+), 27 deletions(-)
>
> [...]
> @@ -606,6 +602,7 @@ static const struct dev_pm_ops bochs_pm_ops = {
>   
>   static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>   {
> +	struct bochs_device *bochs;
>   	struct drm_device *dev;
>   	unsigned long fbsize;
>   	int ret;
> @@ -620,9 +617,10 @@ static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent
>   	if (ret)
>   		return ret;
>   
> -	dev = drm_dev_alloc(&bochs_driver, &pdev->dev);
> -	if (IS_ERR(dev))
> +	bochs = devm_drm_dev_alloc(&pdev->dev, &bochs_driver, struct bochs_device, dev);
> +	if (IS_ERR(bochs))
>   		return PTR_ERR(dev);
> +	dev = &bochs->dev;
The assignment of dev comes after potential use of dev in PTR_ERR(dev).
Did you perhaps meant to have PTR_ERR(&pdev->dev) ?
>   
>   	ret = pcim_enable_device(pdev);
>   	if (ret)
> @@ -630,7 +628,7 @@ static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent
>   
>   	pci_set_drvdata(pdev, dev);
>   
> -	ret = bochs_load(dev);
> +	ret = bochs_load(bochs);
>   	if (ret)
>   		goto err_free_dev;
>
Thomas Zimmermann Oct. 4, 2024, 7:16 a.m. UTC | #2
Hi

Am 02.10.24 um 22:00 schrieb Kees Bakker:
> Op 02-09-2024 om 12:53 schreef Thomas Zimmermann:
>> Allocate an instance of struct drm_device in struct bochs_device. Also
>> remove all uses of dev_private from bochs and upcast from the embedded
>> instance if necessary.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>   drivers/gpu/drm/tiny/bochs.c | 52 +++++++++++++++++-------------------
>>   1 file changed, 25 insertions(+), 27 deletions(-)
>>
>> [...]
>> @@ -606,6 +602,7 @@ static const struct dev_pm_ops bochs_pm_ops = {
>>     static int bochs_pci_probe(struct pci_dev *pdev, const struct 
>> pci_device_id *ent)
>>   {
>> +    struct bochs_device *bochs;
>>       struct drm_device *dev;
>>       unsigned long fbsize;
>>       int ret;
>> @@ -620,9 +617,10 @@ static int bochs_pci_probe(struct pci_dev *pdev, 
>> const struct pci_device_id *ent
>>       if (ret)
>>           return ret;
>>   -    dev = drm_dev_alloc(&bochs_driver, &pdev->dev);
>> -    if (IS_ERR(dev))
>> +    bochs = devm_drm_dev_alloc(&pdev->dev, &bochs_driver, struct 
>> bochs_device, dev);
>> +    if (IS_ERR(bochs))
>>           return PTR_ERR(dev);
>> +    dev = &bochs->dev;
> The assignment of dev comes after potential use of dev in PTR_ERR(dev).
> Did you perhaps meant to have PTR_ERR(&pdev->dev) ?

Thanks for reporting. That should return PTR_ERR(bochs).

Best regards
Thomas

>>         ret = pcim_enable_device(pdev);
>>       if (ret)
>> @@ -630,7 +628,7 @@ static int bochs_pci_probe(struct pci_dev *pdev, 
>> const struct pci_device_id *ent
>>         pci_set_drvdata(pdev, dev);
>>   -    ret = bochs_load(dev);
>> +    ret = bochs_load(bochs);
>>       if (ret)
>>           goto err_free_dev;
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
index 61b2b7aa03cb..5679f1b090af 100644
--- a/drivers/gpu/drm/tiny/bochs.c
+++ b/drivers/gpu/drm/tiny/bochs.c
@@ -71,6 +71,8 @@  enum bochs_types {
 };
 
 struct bochs_device {
+	struct drm_device dev;
+
 	/* hw */
 	void __iomem   *mmio;
 	int            ioports;
@@ -87,14 +89,13 @@  struct bochs_device {
 	u32 bpp;
 
 	/* drm */
-	struct drm_device *dev;
 	struct drm_simple_display_pipe pipe;
 	struct drm_connector connector;
 };
 
 static struct bochs_device *to_bochs_device(const struct drm_device *dev)
 {
-	return (struct bochs_device *)dev->dev_private;
+	return container_of(dev, struct bochs_device, dev);
 }
 
 /* ---------------------------------------------------------------------- */
@@ -211,7 +212,7 @@  static const struct drm_edid *bochs_hw_read_edid(struct drm_connector *connector
 
 static int bochs_hw_init(struct bochs_device *bochs)
 {
-	struct drm_device *dev = bochs->dev;
+	struct drm_device *dev = &bochs->dev;
 	struct pci_dev *pdev = to_pci_dev(dev->dev);
 	unsigned long addr, size, mem, ioaddr, iosize;
 	u16 id;
@@ -306,7 +307,7 @@  static void bochs_hw_setmode(struct bochs_device *bochs, struct drm_display_mode
 {
 	int idx;
 
-	if (!drm_dev_enter(bochs->dev, &idx))
+	if (!drm_dev_enter(&bochs->dev, &idx))
 		return;
 
 	bochs->xres = mode->hdisplay;
@@ -342,7 +343,7 @@  static void bochs_hw_setformat(struct bochs_device *bochs, const struct drm_form
 {
 	int idx;
 
-	if (!drm_dev_enter(bochs->dev, &idx))
+	if (!drm_dev_enter(&bochs->dev, &idx))
 		return;
 
 	DRM_DEBUG_DRIVER("format %c%c%c%c\n",
@@ -373,7 +374,7 @@  static void bochs_hw_setbase(struct bochs_device *bochs, int x, int y, int strid
 	unsigned long offset;
 	unsigned int vx, vy, vwidth, idx;
 
-	if (!drm_dev_enter(bochs->dev, &idx))
+	if (!drm_dev_enter(&bochs->dev, &idx))
 		return;
 
 	bochs->stride = stride;
@@ -488,7 +489,7 @@  static const struct drm_connector_funcs bochs_connector_connector_funcs = {
 
 static void bochs_connector_init(struct bochs_device *bochs)
 {
-	struct drm_device *dev = bochs->dev;
+	struct drm_device *dev = &bochs->dev;
 	struct drm_connector *connector = &bochs->connector;
 
 	drm_connector_init(dev, connector, &bochs_connector_connector_funcs,
@@ -506,23 +507,24 @@  static const struct drm_mode_config_funcs bochs_mode_funcs = {
 
 static int bochs_kms_init(struct bochs_device *bochs)
 {
+	struct drm_device *dev = &bochs->dev;
 	int ret;
 
-	ret = drmm_mode_config_init(bochs->dev);
+	ret = drmm_mode_config_init(dev);
 	if (ret)
 		return ret;
 
-	bochs->dev->mode_config.max_width = 8192;
-	bochs->dev->mode_config.max_height = 8192;
+	dev->mode_config.max_width = 8192;
+	dev->mode_config.max_height = 8192;
 
-	bochs->dev->mode_config.preferred_depth = 24;
-	bochs->dev->mode_config.prefer_shadow = 0;
-	bochs->dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
+	dev->mode_config.preferred_depth = 24;
+	dev->mode_config.prefer_shadow = 0;
+	dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
 
-	bochs->dev->mode_config.funcs = &bochs_mode_funcs;
+	dev->mode_config.funcs = &bochs_mode_funcs;
 
 	bochs_connector_init(bochs);
-	drm_simple_display_pipe_init(bochs->dev,
+	drm_simple_display_pipe_init(dev,
 				     &bochs->pipe,
 				     &bochs_pipe_funcs,
 				     bochs_formats,
@@ -530,7 +532,7 @@  static int bochs_kms_init(struct bochs_device *bochs)
 				     NULL,
 				     &bochs->connector);
 
-	drm_mode_config_reset(bochs->dev);
+	drm_mode_config_reset(dev);
 
 	return 0;
 }
@@ -538,17 +540,11 @@  static int bochs_kms_init(struct bochs_device *bochs)
 /* ---------------------------------------------------------------------- */
 /* drm interface                                                          */
 
-static int bochs_load(struct drm_device *dev)
+static int bochs_load(struct bochs_device *bochs)
 {
-	struct bochs_device *bochs;
+	struct drm_device *dev = &bochs->dev;
 	int ret;
 
-	bochs = drmm_kzalloc(dev, sizeof(*bochs), GFP_KERNEL);
-	if (bochs == NULL)
-		return -ENOMEM;
-	dev->dev_private = bochs;
-	bochs->dev = dev;
-
 	ret = bochs_hw_init(bochs);
 	if (ret)
 		return ret;
@@ -606,6 +602,7 @@  static const struct dev_pm_ops bochs_pm_ops = {
 
 static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
+	struct bochs_device *bochs;
 	struct drm_device *dev;
 	unsigned long fbsize;
 	int ret;
@@ -620,9 +617,10 @@  static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent
 	if (ret)
 		return ret;
 
-	dev = drm_dev_alloc(&bochs_driver, &pdev->dev);
-	if (IS_ERR(dev))
+	bochs = devm_drm_dev_alloc(&pdev->dev, &bochs_driver, struct bochs_device, dev);
+	if (IS_ERR(bochs))
 		return PTR_ERR(dev);
+	dev = &bochs->dev;
 
 	ret = pcim_enable_device(pdev);
 	if (ret)
@@ -630,7 +628,7 @@  static int bochs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent
 
 	pci_set_drvdata(pdev, dev);
 
-	ret = bochs_load(dev);
+	ret = bochs_load(bochs);
 	if (ret)
 		goto err_free_dev;