MFC: r262333

Simplify the way the end of a singly linked list is followed (for adding
items), so it is more obvious that we aren't going to indirect through
a NULL pointer.

PR:             144723
Submitted by:   Garrett Cooper <yaneurabeya at gmail.com>
Obtained from:  NetBSD r1.19
MFC vm_page_alloc_contig()

This function will be used by TTM, a memory manager used by the Radeon
KMS driver.

Compared to HEAD, the type of the "boundary" argument to several functions
is left as "unsigned long" (instead of "vm_paddr_t" in HEAD) to prevent an
API change in a stable branch.

The following revisions were merged in this single commit:

MFC r226928:
  Eliminate vm_phys_bootstrap_alloc().  It was a failed attempt at
  eliminating duplicated code in the various pmap implementations.

  Micro-optimize vm_phys_free_pages().

  Introduce vm_phys_free_contig().  It is fast routine for freeing an
  arbitrary number of physically contiguous pages.  In particular, it
  doesn't require the number of pages to be a power of two.

  Use "u_long" instead of "unsigned long".

  Bruce Evans (bde@) has convinced me that the "boundary" parameters
  to kmem_alloc_contig(), vm_phys_alloc_contig(), and
  vm_reserv_reclaim_contig() should be of type "vm_paddr_t" and not
  "u_long".  Make this change.

MFC r227012:
  Add support for VM_ALLOC_WIRED and VM_ALLOC_ZERO to vm_page_alloc_freelist()
  and use these new options in the mips pmap.

  Wake up the page daemon in vm_page_alloc_freelist() if the number of free
  and cached pages becomes too low.

  Tidy up vm_page_alloc_init().  In particular, add a comment about an
  important restriction on its use.

  Tested by:	jchandra@

MFC r227072:
  Simplify the implementation of the failure case in kmem_alloc_attr().

MFC r227127:
  Wake up the page daemon in vm_page_alloc_freelist() if it couldn't
  allocate the requested page because too few pages are cached or free.

  Document the VM_ALLOC_COUNT() option to vm_page_alloc() and
  vm_page_alloc_freelist().

  Make style changes to vm_page_alloc() and vm_page_alloc_freelist(),
  such as using a variable name that more closely corresponds to the
  comments.

MFC r227568:
  Refactor the code that performs physically contiguous memory allocation,
  yielding a new public interface, vm_page_alloc_contig().  This new function
  addresses some of the limitations of the current interfaces, contigmalloc()
  and kmem_alloc_contig().  For example, the physically contiguous memory that
  is allocated with those interfaces can only be allocated to the kernel vm
  object and must be mapped into the kernel virtual address space.  It also
  provides functionality that vm_phys_alloc_contig() doesn't, such as wiring
  the returned pages.  Moreover, unlike that function, it respects the low
  water marks on the paging queues and wakes up the page daemon when
  necessary.  That said, at present, this new function can't be applied to all
  types of vm objects.  However, that restriction will be eliminated in the
  coming weeks.

  From a design standpoint, this change also addresses an inconsistency
  between vm_phys_alloc_contig() and the other vm_phys_alloc*() functions.
  Specifically, vm_phys_alloc_contig() manipulated vm_page fields that other
  functions in vm/vm_phys.c didn't.  Moreover, vm_phys_alloc_contig() knew
  about vnodes and reservations.  Now, vm_page_alloc_contig() is responsible
  for these things.

  Reviewed by:	        kib
  Discussed with:	jhb
MFC	r262869:

ext2fs: Fix a bug when sorting htree entries.

This a typo introduced when bringing the original code from NetBSD.

Reported by:	Mike Ma
[automated] Merge in upstream-github/stable/9