Thread (55 messages) 55 messages, 6 authors, 2014-02-24

Lifecycle

  1. Posted linux@arm.linux.org.uk (Russell King - ARM Linux)

[PATCH RFC 07/31] mmc: sdhci: push card_tasklet into threaded irq handler

From: Russell King - ARM Linux <hidden>
Date: 2014-02-20 10:59:03
Also in: linux-mmc

On Wed, Feb 19, 2014 at 04:25:12PM +0530, Viresh Kumar wrote:
Absolutely, it will work.

Thanks for your efforts in cleaning up this stuff..
I'll send a few patches in a moment.  First through, I've just found this
gem:

static int sdhci_probe(struct platform_device *pdev)
{
...
        sdhci = devm_kzalloc(&pdev->dev, sizeof(*sdhci), GFP_KERNEL);
...
        if (np) {
...
        } else {
                sdhci->data = dev_get_platdata(&pdev->dev);
        }

        pdev->dev.platform_data = sdhci;
...
	... some paths which can cause probe to return an error code ...
...
static int sdhci_remove(struct platform_device *pdev)
{
        struct sdhci_host *host = platform_get_drvdata(pdev);
        struct spear_sdhci *sdhci = dev_get_platdata(&pdev->dev);
...
        clk_disable_unprepare(sdhci->clk);
        clk_put(sdhci->clk);

So, what happens if we hit an error such as -EPROBEDEFER after that
assignment to pdev->dev.platform_data, and then re-probe the driver
later?

This is just horribly broken.

What's wrong with using the facilities in sdhci to allow you to have
your own private data after the sdhci_host structure?

-- 
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up.  Estimation
in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad.
Estimate before purchase was "up to 13.2Mbit".
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help