2014-07-30 08:52:52

by Chintan Pandya

[permalink] [raw]
Subject: [PATCH] mm: BUG when __kmap_atomic_idx crosses boundary

__kmap_atomic_idx >= KM_TYPE_NR or < ZERO is a bug.
Report it even if CONFIG_DEBUG_HIGHMEM is not enabled.
That saves much debugging efforts.

Signed-off-by: Chintan Pandya <[email protected]>
---
include/linux/highmem.h | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 7fb31da..f42cafd 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -93,8 +93,8 @@ static inline int kmap_atomic_idx_push(void)

#ifdef CONFIG_DEBUG_HIGHMEM
WARN_ON_ONCE(in_irq() && !irqs_disabled());
- BUG_ON(idx > KM_TYPE_NR);
#endif
+ BUG_ON(idx >= KM_TYPE_NR);
return idx;
}

@@ -105,13 +105,9 @@ static inline int kmap_atomic_idx(void)

static inline void kmap_atomic_idx_pop(void)
{
-#ifdef CONFIG_DEBUG_HIGHMEM
int idx = __this_cpu_dec_return(__kmap_atomic_idx);

BUG_ON(idx < 0);
-#else
- __this_cpu_dec(__kmap_atomic_idx);
-#endif
}

#endif
--
Chintan Pandya

QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member of the Code Aurora Forum, hosted by The Linux Foundation


2014-07-30 09:03:56

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] mm: BUG when __kmap_atomic_idx crosses boundary

On Wed, 30 Jul 2014 14:22:35 +0530 Chintan Pandya <[email protected]> wrote:

> __kmap_atomic_idx >= KM_TYPE_NR or < ZERO is a bug.
> Report it even if CONFIG_DEBUG_HIGHMEM is not enabled.
> That saves much debugging efforts.

Please take considerably more care when preparing patch changelogs.

kmap_atomic() is a very commonly called function so we'll need much
more detail than this to justify adding overhead to it.

I don't think CONFIG_DEBUG_HIGHMEM really needs to exist. We could do
s/CONFIG_DEBUG_HIGHMEM/CONFIG_DEBUG_VM/g and perhaps your secret bug
whatever it was would have been found more easily.

2014-07-30 10:37:24

by Davidlohr Bueso

[permalink] [raw]
Subject: Re: [PATCH] mm: BUG when __kmap_atomic_idx crosses boundary


On Wed, 2014-07-30 at 02:06 -0700, Andrew Morton wrote:
> On Wed, 30 Jul 2014 14:22:35 +0530 Chintan Pandya <[email protected]> wrote:
>
> > __kmap_atomic_idx >= KM_TYPE_NR or < ZERO is a bug.
> > Report it even if CONFIG_DEBUG_HIGHMEM is not enabled.
> > That saves much debugging efforts.
>
> Please take considerably more care when preparing patch changelogs.
>
> kmap_atomic() is a very commonly called function so we'll need much
> more detail than this to justify adding overhead to it.
>
> I don't think CONFIG_DEBUG_HIGHMEM really needs to exist. We could do
> s/CONFIG_DEBUG_HIGHMEM/CONFIG_DEBUG_VM/g and perhaps your secret bug
> whatever it was would have been found more easily.

Agreed, it would be nice to fold DEBUG_HIGHMEM into DEBUG_VM. However
you'd still need some kind of intermediate option as DEBUG_VM must still
exist if !HIGHMEM.

Thanks,
Davidlohr

2014-07-30 10:52:55

by Davidlohr Bueso

[permalink] [raw]
Subject: Re: [PATCH] mm: BUG when __kmap_atomic_idx crosses boundary

On Wed, 2014-07-30 at 03:37 -0700, Davidlohr Bueso wrote:
> On Wed, 2014-07-30 at 02:06 -0700, Andrew Morton wrote:
> > On Wed, 30 Jul 2014 14:22:35 +0530 Chintan Pandya <[email protected]> wrote:
> >
> > > __kmap_atomic_idx >= KM_TYPE_NR or < ZERO is a bug.
> > > Report it even if CONFIG_DEBUG_HIGHMEM is not enabled.
> > > That saves much debugging efforts.
> >
> > Please take considerably more care when preparing patch changelogs.
> >
> > kmap_atomic() is a very commonly called function so we'll need much
> > more detail than this to justify adding overhead to it.
> >
> > I don't think CONFIG_DEBUG_HIGHMEM really needs to exist. We could do
> > s/CONFIG_DEBUG_HIGHMEM/CONFIG_DEBUG_VM/g and perhaps your secret bug
> > whatever it was would have been found more easily.
>
> Agreed, it would be nice to fold DEBUG_HIGHMEM into DEBUG_VM. However
> you'd still need some kind of intermediate option as DEBUG_VM must still
> exist if !HIGHMEM.

Actually no, it's a lot more straightforward than I thought.

2014-07-31 05:36:35

by Chintan Pandya

[permalink] [raw]
Subject: Re: [PATCH] mm: BUG when __kmap_atomic_idx crosses boundary

On 07/30/2014 02:36 PM, Andrew Morton wrote:
> On Wed, 30 Jul 2014 14:22:35 +0530 Chintan Pandya<[email protected]> wrote:
>
>> __kmap_atomic_idx>= KM_TYPE_NR or< ZERO is a bug.
>> Report it even if CONFIG_DEBUG_HIGHMEM is not enabled.
>> That saves much debugging efforts.
>
> Please take considerably more care when preparing patch changelogs.
Okay. I will prepare new commit message.
>
> kmap_atomic() is a very commonly called function so we'll need much
> more detail than this to justify adding overhead to it.
>
> I don't think CONFIG_DEBUG_HIGHMEM really needs to exist. We could do
> s/CONFIG_DEBUG_HIGHMEM/CONFIG_DEBUG_VM/g and perhaps your secret bug
> whatever it was would have been found more easily.
Um, we didn't get bug directly hitting here.
>

__kmap_atomic_idx should not be equal to KM_TYPE_NR anyway. So, at least
I will share that patch. For changing DEBUG_HIGHMEM to DEBUG_VM, I will
work on it.

--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member of the Code Aurora Forum, hosted by The Linux Foundation