Message ID | 1470319275-9465-1-git-send-email-Sandeep_Jain@mentor.com |
---|---|
State | Accepted |
Commit | 445caaa20c4d6da74f426464f90513b81157ad77 |
Headers | show |
On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: > From: Steve Longerbeam <steve_longerbeam@mentor.com> > > The MTD backing dev info objects mtd_bdi was statically allocated. > So when MTD is built as a loadable module, this object fall in the > vmalloc address space. > > The problem with that, is that the BDI APIs use wake_up_bit(), which calls > virt_to_page() to retrieve the memory zone of the page containing the > wait_queue to wake up, and virt_to_page() is not valid for vmalloc or > highmem addresses. > > Fix this by allocating the BDI objects dynamically with kmalloc. The > objects now fall in the logical address space so that BDI APIs will > work in all cases (mtd builtin or module). > > Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> > Signed-off-by: Jim Baxter <jim_baxter@mentor.com> > Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> Reviewed-by: Richard Weinberger <richard@nod.at>
Dear Maintainers, This patch is reviewed by Richard. Requesting for Maintainer's attention for patch merge. Thanks & Regards, Sandeep Jain On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: > On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: > > From: Steve Longerbeam <steve_longerbeam@mentor.com> > > > > The MTD backing dev info objects mtd_bdi was statically allocated. > > So when MTD is built as a loadable module, this object fall in the > > vmalloc address space. > > > > The problem with that, is that the BDI APIs use wake_up_bit(), which calls > > virt_to_page() to retrieve the memory zone of the page containing the > > wait_queue to wake up, and virt_to_page() is not valid for vmalloc or > > highmem addresses. > > > > Fix this by allocating the BDI objects dynamically with kmalloc. The > > objects now fall in the logical address space so that BDI APIs will > > work in all cases (mtd builtin or module). > > > > Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> > > Signed-off-by: Jim Baxter <jim_baxter@mentor.com> > > Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> > > Reviewed-by: Richard Weinberger <richard@nod.at> > > -- > Thanks, > //richard
On 11/03/2016 12:34 PM, Sandeep Jain wrote: > Dear Maintainers, > This patch is reviewed by Richard. > Requesting for Maintainer's attention for patch merge. > > Thanks & Regards, > Sandeep Jain > > On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: >> On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: >>> From: Steve Longerbeam <steve_longerbeam@mentor.com> >>> >>> The MTD backing dev info objects mtd_bdi was statically allocated. >>> So when MTD is built as a loadable module, this object fall in the >>> vmalloc address space. >>> >>> The problem with that, is that the BDI APIs use wake_up_bit(), which calls >>> virt_to_page() to retrieve the memory zone of the page containing the >>> wait_queue to wake up, and virt_to_page() is not valid for vmalloc or >>> highmem addresses. >>> >>> Fix this by allocating the BDI objects dynamically with kmalloc. The >>> objects now fall in the logical address space so that BDI APIs will >>> work in all cases (mtd builtin or module). >>> >>> Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> >>> Signed-off-by: Jim Baxter <jim_baxter@mentor.com> >>> Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> >> >> Reviewed-by: Richard Weinberger <richard@nod.at> I don't see any obvious problem either: Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
Dear Maintainers, This patch is already reviewed twice with no issues. Requesting your attention for patch merge. Thanks & Regards, Sandeep Jain On Sat, Nov 05, 2016 at 08:22:31AM +0100, Marek Vasut wrote: > On 11/03/2016 12:34 PM, Sandeep Jain wrote: > > Dear Maintainers, > > This patch is reviewed by Richard. > > Requesting for Maintainer's attention for patch merge. > > > > Thanks & Regards, > > Sandeep Jain > > > > On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: > >> On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: > >>> From: Steve Longerbeam <steve_longerbeam@mentor.com> > >>> > >>> The MTD backing dev info objects mtd_bdi was statically allocated. > >>> So when MTD is built as a loadable module, this object fall in the > >>> vmalloc address space. > >>> > >>> The problem with that, is that the BDI APIs use wake_up_bit(), which calls > >>> virt_to_page() to retrieve the memory zone of the page containing the > >>> wait_queue to wake up, and virt_to_page() is not valid for vmalloc or > >>> highmem addresses. > >>> > >>> Fix this by allocating the BDI objects dynamically with kmalloc. The > >>> objects now fall in the logical address space so that BDI APIs will > >>> work in all cases (mtd builtin or module). > >>> > >>> Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> > >>> Signed-off-by: Jim Baxter <jim_baxter@mentor.com> > >>> Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> > >> > >> Reviewed-by: Richard Weinberger <richard@nod.at> > > I don't see any obvious problem either: > Reviewed-by: Marek Vasut <marek.vasut@gmail.com> > > -- > Best regards, > Marek Vasut
On 11/29/2016 09:12 AM, Sandeep Jain wrote: > Dear Maintainers, > This patch is already reviewed twice with no issues. > Requesting your attention for patch merge. > > Thanks & Regards, > Sandeep Jain > > On Sat, Nov 05, 2016 at 08:22:31AM +0100, Marek Vasut wrote: >> On 11/03/2016 12:34 PM, Sandeep Jain wrote: >>> Dear Maintainers, >>> This patch is reviewed by Richard. >>> Requesting for Maintainer's attention for patch merge. >>> >>> Thanks & Regards, >>> Sandeep Jain >>> >>> On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: >>>> On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: >>>>> From: Steve Longerbeam <steve_longerbeam@mentor.com> >>>>> >>>>> The MTD backing dev info objects mtd_bdi was statically allocated. >>>>> So when MTD is built as a loadable module, this object fall in the >>>>> vmalloc address space. >>>>> >>>>> The problem with that, is that the BDI APIs use wake_up_bit(), which calls >>>>> virt_to_page() to retrieve the memory zone of the page containing the >>>>> wait_queue to wake up, and virt_to_page() is not valid for vmalloc or >>>>> highmem addresses. >>>>> >>>>> Fix this by allocating the BDI objects dynamically with kmalloc. The >>>>> objects now fall in the logical address space so that BDI APIs will >>>>> work in all cases (mtd builtin or module). >>>>> >>>>> Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> >>>>> Signed-off-by: Jim Baxter <jim_baxter@mentor.com> >>>>> Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> >>>> >>>> Reviewed-by: Richard Weinberger <richard@nod.at> >> >> I don't see any obvious problem either: >> Reviewed-by: Marek Vasut <marek.vasut@gmail.com> Bump?
On Thu, Dec 01, 2016 at 04:39:23PM +0100, Marek Vasut wrote: > On 11/29/2016 09:12 AM, Sandeep Jain wrote: > > On Sat, Nov 05, 2016 at 08:22:31AM +0100, Marek Vasut wrote: > >> On 11/03/2016 12:34 PM, Sandeep Jain wrote: > >>> On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: > >>>> On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: > >>>>> From: Steve Longerbeam <steve_longerbeam@mentor.com> > >>>>> > >>>>> The MTD backing dev info objects mtd_bdi was statically allocated. > >>>>> So when MTD is built as a loadable module, this object fall in the > >>>>> vmalloc address space. > >>>>> > >>>>> The problem with that, is that the BDI APIs use wake_up_bit(), which calls > >>>>> virt_to_page() to retrieve the memory zone of the page containing the > >>>>> wait_queue to wake up, and virt_to_page() is not valid for vmalloc or > >>>>> highmem addresses. > >>>>> > >>>>> Fix this by allocating the BDI objects dynamically with kmalloc. The > >>>>> objects now fall in the logical address space so that BDI APIs will > >>>>> work in all cases (mtd builtin or module). > >>>>> > >>>>> Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> > >>>>> Signed-off-by: Jim Baxter <jim_baxter@mentor.com> > >>>>> Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> > >>>> > >>>> Reviewed-by: Richard Weinberger <richard@nod.at> > >> > >> I don't see any obvious problem either: > >> Reviewed-by: Marek Vasut <marek.vasut@gmail.com> > > Bump? Applied to l2-mtd.git.
On 12/01/2016 07:14 PM, Brian Norris wrote: > On Thu, Dec 01, 2016 at 04:39:23PM +0100, Marek Vasut wrote: >> On 11/29/2016 09:12 AM, Sandeep Jain wrote: >>> On Sat, Nov 05, 2016 at 08:22:31AM +0100, Marek Vasut wrote: >>>> On 11/03/2016 12:34 PM, Sandeep Jain wrote: >>>>> On Sat, Sep 17, 2016 at 04:41:47PM +0200, Richard Weinberger wrote: >>>>>> On Thu, Aug 4, 2016 at 4:01 PM, Sandeep Jain <Sandeep_Jain@mentor.com> wrote: >>>>>>> From: Steve Longerbeam <steve_longerbeam@mentor.com> >>>>>>> >>>>>>> The MTD backing dev info objects mtd_bdi was statically allocated. >>>>>>> So when MTD is built as a loadable module, this object fall in the >>>>>>> vmalloc address space. >>>>>>> >>>>>>> The problem with that, is that the BDI APIs use wake_up_bit(), which calls >>>>>>> virt_to_page() to retrieve the memory zone of the page containing the >>>>>>> wait_queue to wake up, and virt_to_page() is not valid for vmalloc or >>>>>>> highmem addresses. >>>>>>> >>>>>>> Fix this by allocating the BDI objects dynamically with kmalloc. The >>>>>>> objects now fall in the logical address space so that BDI APIs will >>>>>>> work in all cases (mtd builtin or module). >>>>>>> >>>>>>> Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> >>>>>>> Signed-off-by: Jim Baxter <jim_baxter@mentor.com> >>>>>>> Signed-off-by: Sandeep Jain <Sandeep_Jain@mentor.com> >>>>>> >>>>>> Reviewed-by: Richard Weinberger <richard@nod.at> >>>> >>>> I don't see any obvious problem either: >>>> Reviewed-by: Marek Vasut <marek.vasut@gmail.com> >> >> Bump? > > Applied to l2-mtd.git. > Thanks !
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index e3936b8..9015b94 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -47,8 +47,7 @@ #include "mtdcore.h" -static struct backing_dev_info mtd_bdi = { -}; +static struct backing_dev_info *mtd_bdi; #ifdef CONFIG_PM_SLEEP @@ -397,7 +396,7 @@ int add_mtd_device(struct mtd_info *mtd) if (WARN_ONCE(mtd->backing_dev_info, "MTD already registered\n")) return -EEXIST; - mtd->backing_dev_info = &mtd_bdi; + mtd->backing_dev_info = mtd_bdi; BUG_ON(mtd->writesize == 0); mutex_lock(&mtd_table_mutex); @@ -1668,18 +1667,20 @@ static const struct file_operations mtd_proc_ops = { /*====================================================================*/ /* Init code */ -static int __init mtd_bdi_init(struct backing_dev_info *bdi, const char *name) +static struct backing_dev_info * __init mtd_bdi_init(char *name) { + struct backing_dev_info *bdi; int ret; - ret = bdi_init(bdi); - if (!ret) - ret = bdi_register(bdi, NULL, "%s", name); + bdi = kzalloc(sizeof(*bdi), GFP_KERNEL); + if (!bdi) + return ERR_PTR(-ENOMEM); + ret = bdi_setup_and_register(bdi, name); if (ret) - bdi_destroy(bdi); + kfree(bdi); - return ret; + return ret ? ERR_PTR(ret) : bdi; } static struct proc_dir_entry *proc_mtd; @@ -1692,9 +1693,11 @@ static int __init init_mtd(void) if (ret) goto err_reg; - ret = mtd_bdi_init(&mtd_bdi, "mtd"); - if (ret) + mtd_bdi = mtd_bdi_init("mtd"); + if (IS_ERR(mtd_bdi)) { + ret = PTR_ERR(mtd_bdi); goto err_bdi; + } proc_mtd = proc_create("mtd", 0, NULL, &mtd_proc_ops); @@ -1707,6 +1710,8 @@ static int __init init_mtd(void) out_procfs: if (proc_mtd) remove_proc_entry("mtd", NULL); + bdi_destroy(mtd_bdi); + kfree(mtd_bdi); err_bdi: class_unregister(&mtd_class); err_reg: @@ -1720,7 +1725,8 @@ static void __exit cleanup_mtd(void) if (proc_mtd) remove_proc_entry("mtd", NULL); class_unregister(&mtd_class); - bdi_destroy(&mtd_bdi); + bdi_destroy(mtd_bdi); + kfree(mtd_bdi); idr_destroy(&mtd_idr); }