Message ID | 20170418211831.10190.80158.stgit@tlendack-t1.amdoffice.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Apr 18, 2017 at 04:18:31PM -0500, Tom Lendacky wrote: > Add a function that will return the E820 type associated with an address > range. ... > @@ -110,9 +111,28 @@ bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) > * coverage of the desired range exists: > */ > if (start >= end) > - return 1; > + return entry; > } > - return 0; > + > + return NULL; > +} > + > +/* > + * This function checks if the entire range <start,end> is mapped with type. > + */ > +bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) > +{ > + return __e820__mapped_all(start, end, type) ? 1 : 0; return !!__e820__mapped_all(start, end, type);
On 5 May 2017 at 18:11, Borislav Petkov <bp@alien8.de> wrote: > On Tue, Apr 18, 2017 at 04:18:31PM -0500, Tom Lendacky wrote: >> Add a function that will return the E820 type associated with an address >> range. > > ... > >> @@ -110,9 +111,28 @@ bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) >> * coverage of the desired range exists: >> */ >> if (start >= end) >> - return 1; >> + return entry; >> } >> - return 0; >> + >> + return NULL; >> +} >> + >> +/* >> + * This function checks if the entire range <start,end> is mapped with type. >> + */ >> +bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) >> +{ >> + return __e820__mapped_all(start, end, type) ? 1 : 0; > > return !!__e820__mapped_all(start, end, type); > Even the !! double negation is redundant, given that the function returns bool.
diff --git a/arch/x86/include/asm/e820/api.h b/arch/x86/include/asm/e820/api.h index 8e0f8b8..3641f5f 100644 --- a/arch/x86/include/asm/e820/api.h +++ b/arch/x86/include/asm/e820/api.h @@ -38,6 +38,8 @@ extern void e820__reallocate_tables(void); extern void e820__register_nosave_regions(unsigned long limit_pfn); +extern int e820__get_entry_type(u64 start, u64 end); + /* * Returns true iff the specified range [start,end) is completely contained inside * the ISA region. diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index d78a586..8d68666 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -84,7 +84,8 @@ bool e820__mapped_any(u64 start, u64 end, enum e820_type type) * Note: this function only works correctly once the E820 table is sorted and * not-overlapping (at least for the range specified), which is the case normally. */ -bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) +static struct e820_entry *__e820__mapped_all(u64 start, u64 end, + enum e820_type type) { int i; @@ -110,9 +111,28 @@ bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) * coverage of the desired range exists: */ if (start >= end) - return 1; + return entry; } - return 0; + + return NULL; +} + +/* + * This function checks if the entire range <start,end> is mapped with type. + */ +bool __init e820__mapped_all(u64 start, u64 end, enum e820_type type) +{ + return __e820__mapped_all(start, end, type) ? 1 : 0; +} + +/* + * This function returns the type associated with the range <start,end>. + */ +int e820__get_entry_type(u64 start, u64 end) +{ + struct e820_entry *entry = __e820__mapped_all(start, end, 0); + + return entry ? entry->type : -EINVAL; } /*
Add a function that will return the E820 type associated with an address range. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> --- arch/x86/include/asm/e820/api.h | 2 ++ arch/x86/kernel/e820.c | 26 +++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-)