Re: [BUG] Bad page map in process ibv_devinfo

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 17, 2011 at 1:49 PM, David Miller <davem@xxxxxxxxxxxxx> wrote:
>> I'm wondering if the bug is in the mlx4 code or in the sparc
>> io_remap_pfn_range()
>> code.  From the "Bad page map" pte value, if I understand sparc mm correctly,
>> the PTE is seen as not present.

> The not-present test is essentially testing the PTE against zero.

Isn't the pte_present assembly checking if the _PAGE_PRESENT_4V bit
is set, not whether it's completely 0?

> This bug check is making sure that there are not already existing mappings
> at that address when the io_remap_pfn_range() call occurs.

But the call trace is in the munmap() call -- it's just printing where the
bad map was set up initially.  We're somewhere in unmap_vmas(),
probably one of the tests in zap_pte_range().  Since we got

    [ 9305.698663] swap_free: Bad swap file entry 100005e000061800

I'm guessing somehow we reached

		} else {
			swp_entry_t entry = pte_to_swp_entry(ptent);

			if (!non_swap_entry(entry))
				rss[MM_SWAPENTS]--;
			if (unlikely(!free_swap_and_cache(entry)))
				print_bad_pte(vma, addr, ptent, NULL);
		}

which shouldn't be possible if pte_present() were set.

 > The only thing I can come up with is that perhaps there is an assumption
 > hiding around somewhere that PAGE_SIZE is 4096.

It's a good idea.  But I don't see how we get past:

static int mlx4_ib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
{
	struct mlx4_ib_dev *dev = to_mdev(context->device);

	if (vma->vm_end - vma->vm_start != PAGE_SIZE)
		return -EINVAL;

 - R.
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux