Thread (148 messages) 148 messages, 20 authors, 2019-03-12

Re: [PATCH 1/3] mm/mincore: make mincore() more conservative

From: Jiri Kosina <jikos@kernel.org>
Date: 2019-03-07 05:46:09
Also in: linux-mm, lkml

On Thu, 7 Mar 2019, Dominique Martinet wrote:
quoted
quoted
	addr = 4095
	vma->vm_end = 4096
	pages = 1000

then `end' is 4096 and `(end - addr) << PAGE_SHIFT' is zero, but it
should have been 1.
Good catch! It should rather be something like

	unsigned long pages = (end >> PAGE_SHIFT) - (addr >> PAGE_SHIFT);
That would be 0 for addr = 0 and vma->vm_end = 1; I assume we would
still want to count that as one page.
Yeah, that was bogus as well, ETOOTIRED yesterday, sorry for the noise. 
Both the variants are off.
I'm not too familiar with this area of the code, but I think there's a
handy macro we can use for this, perhaps
  DIV_ROUND_UP(end - addr, PAGE_SIZE) ?

kernel/kexec_core.c has defined PAGE_COUNT() which seems more
appropriate but I do not see a global equivalent
#define PAGE_COUNT(x) (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT)
I'll fix that up when doing the other changes requested by Andrew.

Thanks,

-- 
Jiri Kosina
SUSE Labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help