[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