linuxkpi: Fix uses of pmap_change_attr()
[Why]
This function takes an offset and a length as argument, not a physical
address and a number of pages.
This misuse caused the set_memory_*() and
arch_io_reserve_memtype_wc() functions to return EINVAL.
Another problem was the fact that they returned errors as a positive
integer, whereas Linux uses negative integers.
[How]
Physical addresses and number of pages are converted to offset+length in
the set_memory_*() functions.
arch_io_reserve_memtype_wc() now calls pmap_change_attr() directly
instead of using set_memory_wc().
Reviewed by: manu
Approved by: manu
Differential Revision: https://reviews.freebsd.org/D42053
(cherry picked from commit 1e99b2ee90956f275c3668e92a408400f2dada1c)