vm_phys_enq_range: no alignment assert for npages==0
Do not assume that when vm_phys_enq_range is passed npages==0 that the vm_page argument is valid in any way, much less that it has a page-aligned address. Just don't look at it. Assert nothing about it. Reported by: karels Differential Revision: https://reviews.freebsd.org/D41317
This commit is contained in:
+5
-3
@@ -690,15 +690,17 @@ vm_phys_split_pages(vm_page_t m, int oind, struct vm_freelist *fl, int order,
|
|||||||
* term fragmentation by promoting contemporaneous allocation and (hopefully)
|
* term fragmentation by promoting contemporaneous allocation and (hopefully)
|
||||||
* deallocation.
|
* deallocation.
|
||||||
*
|
*
|
||||||
* The physical page m's buddy must not be free.
|
* If npages is zero, this function does nothing and ignores the physical page
|
||||||
|
* parameter m. Otherwise, the physical page m's buddy must not be free.
|
||||||
*/
|
*/
|
||||||
static vm_page_t
|
static vm_page_t
|
||||||
vm_phys_enq_range(vm_page_t m, u_int npages, struct vm_freelist *fl, int tail)
|
vm_phys_enq_range(vm_page_t m, u_int npages, struct vm_freelist *fl, int tail)
|
||||||
{
|
{
|
||||||
int order;
|
int order;
|
||||||
|
|
||||||
KASSERT(((VM_PAGE_TO_PHYS(m) + npages * PAGE_SIZE) &
|
KASSERT(npages == 0 ||
|
||||||
((PAGE_SIZE << fls(npages / 2)) - 1)) == 0,
|
((VM_PAGE_TO_PHYS(m) + npages * PAGE_SIZE) &
|
||||||
|
((PAGE_SIZE << (fls(npages) - 1)) - 1)) == 0,
|
||||||
("vm_phys_enq_range: page %p and npages %u are misaligned",
|
("vm_phys_enq_range: page %p and npages %u are misaligned",
|
||||||
m, npages));
|
m, npages));
|
||||||
while (npages > 0) {
|
while (npages > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user