[PATCH 4/5] MTD: implement mtd_get_unmapped_area() using the point method

Richard Weinberger richard.weinberger at gmail.com
Wed Oct 11 13:51:43 PDT 2017


On Wed, Oct 11, 2017 at 5:26 AM, Nicolas Pitre <nicolas.pitre at linaro.org> wrote:
> The mtd->_point method is a superset of mtd->_get_unmapped_area.
> Especially in the NOR flash case, the point method ensures the flash
> memory is in array (data) mode and that it will stay that way which
> is precisely what callers of mtd_get_unmapped_area() would expect.
>
> Implement mtd_get_unmapped_area() in terms of mtd->_point now that all
> drivers that provided a _get_unmapped_area method also have the _point
> method implemented.
>
> Signed-off-by: Nicolas Pitre <nico at linaro.org>
> ---
>  drivers/mtd/mtdcore.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
> index e7ea842ba3..ecb0380158 100644
> --- a/drivers/mtd/mtdcore.c
> +++ b/drivers/mtd/mtdcore.c
> @@ -1022,11 +1022,18 @@ EXPORT_SYMBOL_GPL(mtd_unpoint);
>  unsigned long mtd_get_unmapped_area(struct mtd_info *mtd, unsigned long len,
>                                     unsigned long offset, unsigned long flags)
>  {
> -       if (!mtd->_get_unmapped_area)
> -               return -EOPNOTSUPP;
> -       if (offset >= mtd->size || len > mtd->size - offset)
> -               return -EINVAL;
> -       return mtd->_get_unmapped_area(mtd, len, offset, flags);
> +       size_t retlen;
> +       void *virt;
> +       int ret;
> +
> +       ret = mtd_point(mtd, offset, len, &retlen, &virt, NULL);
> +       if (ret)
> +               return ret;
> +       if (retlen != len) {
> +               mtd_unpoint(mtd, offset, retlen);
> +               return -ENOSYS;
> +       }
> +       return (unsigned long)virt;
>  }
>  EXPORT_SYMBOL_GPL(mtd_get_unmapped_area);

Reviewed-by: Richard Weinberger <richard at nod.at>

-- 
Thanks,
//richard



More information about the linux-mtd mailing list