mm: BUG_ON with NUMA_BALANCING (kernel BUG at include/linux/swapops.h:131!)
Haren Myneni
hmyneni at gmail.com
Mon May 18 17:32:29 AEST 2015
Mel,
I am hitting this issue with 4.0 kernel and even with 3.19 and
3.17 kernels. I will also try with previous versions. Please let me
know any suggestions on the debugging.
Thanks
Haren
On 5/14/15, Haren Myneni <hmyneni at gmail.com> wrote:
> On 5/14/15, Mel Gorman <mgorman at suse.de> wrote:
>> On Wed, May 13, 2015 at 01:17:54AM -0700, Haren Myneni wrote:
>>> Hi,
>>>
>>> I am getting BUG_ON in migration_entry_to_page() with 4.1.0-rc2
>>> kernel on powerpc system which has 512 CPUs (64 cores - 16 nodes) and
>>> 1.6 TB memory. We can easily recreate this issue with kernel compile
>>> (make -j500). But I could not reproduce with numa_balancing=disable.
>>>
>>
>> Is this patched in any way? I ask because line 134 on 4.1.0-rc2 does not
>> match up with a BUG_ON. It's close to a PageLocked check but I want to
>> be sure there are no other modifications.
>
> Mel, Thanks for your help. I added some printks and dump_page() to get
> the page struct and swp_entry information.
>
>>
>> Otherwise, when was the last time this worked? Was 4.0 ok? As it can be
>> easily reproduced, can the problem be bisected please?
>
> I did not try previous versions other than RHEL kernel (3.10.*). I
> will try with previous versions.
>
> In the failure case, also noticed pte and address values are matched
> in try_to_unmap_one() and remove_migration_pte(), but entry
> (swp_entry_t) value is different. So looks like page strut address in
> migration_entry_to_page() is not valid.
>
> try_to_unmap_one()
> {
>
> ...
> } else if (IS_ENABLED(CONFIG_MIGRATION)) {
> /*
> * Store the pfn of the page in a special migration
> * pte. do_swap_page() will wait until the
> migration
> * pte is removed and then restart fault handling.
> */
> BUG_ON(!(flags & TTU_MIGRATION));
> entry = make_migration_entry(page,
> pte_write(pteval));
> }
> swp_pte = swp_entry_to_pte(entry);
> if (pte_soft_dirty(pteval))
> swp_pte = pte_swp_mksoft_dirty(swp_pte);
> set_pte_at(mm, address, pte, swp_pte);
>
> /*pte=0xb16b8d0f80000000 address=0x100008150000
> page=0xf000000513f3e1e0 entry=0x3e0000000ec5ae34 */
> ...
> }
>
> remove_migration_pte()
> {
> ...
> /* address=0x100008150000 pte=0xb16b8d0f80000000
> *old=0xf000000513f3e1e0 */
> if (!is_migration_entry(entry) ||
> migration_entry_to_page(entry) != old)
> goto unlock;
> ...
> }
>
> migration_entry_to_page() {
> pte=0xb16b8d0f80000000 entry=0x3e00000002c5ae34
> page=0xf0000000f3f3e1e0
> }
>
>
> Thanks
> Haren
>
>>
>> --
>> Mel Gorman
>> SUSE Labs
>>
>
More information about the Linuxppc-dev
mailing list