lkml.org 
[lkml]   [2012]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH] PM / MTD: Fix regressions related to mtd_suspend()
    From
    Date
    On Sun, 2012-01-15 at 14:43 +0100, Rafael J. Wysocki wrote:
    > From: Rafael J. Wysocki <rjw@sisk.pl>
    >
    > Commit 3fe4bae88460869a8e553397cd9057a4ee7ca341 (mtd: introduce
    > mtd_suspend interface) introduced the mtd_suspend() routine
    > which didn't check whether or not mtd and mtd->suspend were
    > both valid pointers. Later commit 079c985e7a6f4ce60f931cebfdd5ee3c3
    > (mtd: do not use mtd->suspend and mtd->resume directly) added the
    > check for mtd->suspend, but still it failed to check mtd. Moreover,
    > it caused mtd_suspend() to return an error code for NULL
    > mtd->suspend, which makes system suspend fail on one of my test
    > systems on every attempt and which is a regression from v3.2.
    >
    > Fix mtd_suspend() by making it check if mtd is not NULL and
    > return 0 if mtd or mtd->suspend is NULL, which shouldn't prevent
    > the system from suspending.
    >
    > Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    > ---
    > include/linux/mtd/mtd.h | 4 +---
    > 1 file changed, 1 insertion(+), 3 deletions(-)
    >
    > Index: linux/include/linux/mtd/mtd.h
    > ===================================================================
    > --- linux.orig/include/linux/mtd/mtd.h
    > +++ linux/include/linux/mtd/mtd.h
    > @@ -427,9 +427,7 @@ static inline int mtd_is_locked(struct m
    >
    > static inline int mtd_suspend(struct mtd_info *mtd)
    > {
    > - if (!mtd->suspend)
    > - return -EOPNOTSUPP;
    > - return mtd->suspend(mtd);
    > + return mtd && mtd->suspend ? mtd->suspend(mtd) : 0;
    > }

    Thanks! But All the MTD API functions assume that the "mtd" pointer is
    non-NULL, and this function should to the same for consistency.

    Would you please give this patch a test?

    diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
    index b265188..de96865 100644
    --- a/drivers/mtd/mtdcore.c
    +++ b/drivers/mtd/mtdcore.c
    @@ -119,7 +119,7 @@ static int mtd_cls_suspend(struct device *dev, pm_message_t state)
    {
    struct mtd_info *mtd = dev_get_drvdata(dev);

    - return mtd_suspend(mtd);
    + return mtd ? mtd_suspend(mtd) : 0;
    }

    static int mtd_cls_resume(struct device *dev)
    diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
    index 1a81fde..d8c7aad 100644
    --- a/include/linux/mtd/mtd.h
    +++ b/include/linux/mtd/mtd.h
    @@ -427,9 +427,7 @@ static inline int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)

    static inline int mtd_suspend(struct mtd_info *mtd)
    {
    - if (!mtd->suspend)
    - return -EOPNOTSUPP;
    - return mtd->suspend(mtd);
    + return mtd->suspend ? mtd->suspend(mtd) : 0;
    }

    --
    Best Regards,
    Artem Bityutskiy[unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-01-15 15:25    [W:0.025 / U:1.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site