Thread (1 message) 1 message, 1 author, 2021-08-10

Re: [patch] x86/pat: pass correct address to sanitize_phys

From: Jeff Moyer <hidden>
Date: 2021-08-10 19:21:02
Also in: linux-mm, lkml

Thomas Gleixner [off-list ref] writes:
Jeff,

On Wed, Jul 21 2021 at 15:48, Jeff Moyer wrote:

Please write function names with brackets, i.e. sanitize_phys().
OK, will do.
quoted
memtype_reserve takes an address range of the form [start, end).  It
[start, end]
Start is inclusive, end is exclusive, so start <= x < end.  I used the
notation found here:

  https://en.wikipedia.org/wiki/Interval_(mathematics)

If that's too confusing, I can stick to inclusive vs exclusive verbiage.
quoted
then passes the start and end addresses to sanitize_phys, which is meant
to operate on the inclusive addresses.  If end falls at the end of the
physical address space, sanitize_phys will return 0.  This can result in
drivers failing to load:

[   10.000087] mpt3sas_cm0: unable to map adapter memory! or resource not found
[   10.000334] mpt3sas_cm0: failure at drivers/scsi/mpt3sas/mpt3sas_scsih.c:10597/_scsih_probe()!
Doesn't this trigger the WARN() right below that offending line?
It does.  I'll include the warning message in the v2 posting.
quoted
Fix this by passing the inclusive end address to sanitize_phys.

Fixes: 510ee090abc3 ("x86/mm/pat: Prepare {reserve, free}_memtype() for "decoy" addresses")
Signed-off-by: Jeff Moyer <redacted>
--
It might be worth adding a comment, here.  If there are any suggestions
on what a sane wording would be, I'm all ears.
See below.
quoted
diff --git a/arch/x86/mm/pat/memtype.c b/arch/x86/mm/pat/memtype.c
index 3112ca7786ed..482557905294 100644
--- a/arch/x86/mm/pat/memtype.c
+++ b/arch/x86/mm/pat/memtype.c
@@ -583,7 +583,7 @@ int memtype_reserve(u64 start, u64 end, enum page_cache_mode req_type,
 	int err = 0;
 
 	start = sanitize_phys(start);
-	end = sanitize_phys(end);
        /*
         * [start, end] is an exclusive address range, but
         * sanitize_phys() expects an inclusive end address
         */
That works for me (modulo the interval notation), thanks for the
suggestion.

Thanks!
Jeff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help