Re: [PATCH v2] ide/macide: Convert Mac IDE driver to platform driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Finn,

On Thu, Sep 24, 2020 at 3:07 AM Finn Thain <fthain@xxxxxxxxxxxxxxxxxxx> wrote:
On Wed, 16 Sep 2020, Finn Thain wrote:
On Tue, 15 Sep 2020, Geert Uytterhoeven wrote:
--- a/drivers/ide/macide.c
+++ b/drivers/ide/macide.c

@@ -109,42 +110,61 @@ static const char *mac_ide_name[] =
  * Probe for a Macintosh IDE interface
  */

-static int __init macide_init(void)
+static int mac_ide_probe(struct platform_device *pdev)
 {

        printk(KERN_INFO "ide: Macintosh %s IDE controller\n",
                         mac_ide_name[macintosh_config->ide_type - 1]);

-       macide_setup_ports(&hw, base, irq);
+       macide_setup_ports(&hw, mem->start, irq->start);

-       return ide_host_add(&d, hws, 1, NULL);
+       rc = ide_host_add(&d, hws, 1, &host);
+       if (rc)
+               return rc;
+
+       platform_set_drvdata(pdev, host);

Move one up, to play it safe?


You mean, before calling ide_host_add? The 'host' pointer is
uninitialized prior to that call.

Oh right, so the IDE subsystem doesn't let you use the drvdata inside
your driver (besides in remove()) in a safe way :-(


The IDE subsystem does allow other patterns here. I could have changed
ide_host_alloc() into ide_host_register() followed by ide_host_add() but
I could not see any benefit from that change.


Sorry, I meant to say, "I could have changed ide_host_add() into
ide_host_alloc() followed by ide_host_register() ..."

A quick search for "platform_device" shows that the driver does not use
any uninitialized driver_data pointer (because ide_ifr is a global). In
your message of September 9th you readily reached the same conclusion
when you reviewed v1.

If mac_ide_probe() followed the usual pattern it might make review
easier (as reviewers may not wish to consider the entire driver) but
does that really make the code more "safe"?

I still think that "if it ain't broke, don't fix it" is actually the
"safe" option for macide.c. But I'm happy to make additional changes, test
them and send v5 if that's preferred.

I'm fine with keeping this as-is, as it doesn't really matter for this
particular
driver.

Looking further at the drivers using ide_host_register(), I see that
falconide.c is missing a set_drvdata() call, while tx4939ide.c calls
set_drvdata() after ide_host_register(). The latter example is not a bug.

The pattern I used, that is, calling set_drvdata() after ide_host_add(),
is actually more popular among IDE drivers than the pattern you suggested,
that is, set_drvdata() followed by ide_host_register(). Either way, I
don't see any bugs besides the one in falconide.c.

Regarding falconide.c, my inclination is to send a fix following the more
common pattern (among IDE drivers), as below. I guess that may prompt the
subsystem maintainers to make known their views on the style question.

Please do so. Thanks!


Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux