Message ID | 1433185940-24770-2-git-send-email-zjzhang@codeaurora.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Delegated to: | Andy Gross |
Headers | show |
(Cc'ing Tony for ia64 input) On Mon, 01 Jun, at 12:12:18PM, Jonathan (Zhixiong) Zhang wrote: > From: "Jonathan (Zhixiong) Zhang" <zjzhang@codeaurora.org> > > Both x86 and ia64 implemented efi_mem_attributs(), which is architecture > agnositc. This function is moved from arch/x86 and arch/ia64 to > drivers/firmware/efi. > > Signed-off-by: Jonathan (Zhixiong) Zhang <zjzhang@codeaurora.org> > --- > arch/ia64/kernel/efi.c | 11 ----------- > arch/x86/platform/efi/efi.c | 18 ------------------ > drivers/firmware/efi/efi.c | 18 ++++++++++++++++++ > 3 files changed, 18 insertions(+), 29 deletions(-) > > diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c > index c52d7540dc05..ef20ec784b04 100644 > --- a/arch/ia64/kernel/efi.c > +++ b/arch/ia64/kernel/efi.c > @@ -771,17 +771,6 @@ efi_mem_type (unsigned long phys_addr) > } > > u64 > -efi_mem_attributes (unsigned long phys_addr) > -{ > - efi_memory_desc_t *md = efi_memory_descriptor(phys_addr); > - > - if (md) > - return md->attribute; > - return 0; > -} > -EXPORT_SYMBOL(efi_mem_attributes); > - > -u64 > efi_mem_attribute (unsigned long phys_addr, unsigned long size) > { > unsigned long end = phys_addr + size; > diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c > index 02744df576d5..10bd5289c593 100644 > --- a/arch/x86/platform/efi/efi.c > +++ b/arch/x86/platform/efi/efi.c > @@ -926,24 +926,6 @@ u32 efi_mem_type(unsigned long phys_addr) > return 0; > } > > -u64 efi_mem_attributes(unsigned long phys_addr) > -{ > - efi_memory_desc_t *md; > - void *p; > - > - if (!efi_enabled(EFI_MEMMAP)) > - return 0; > - > - for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { > - md = p; > - if ((md->phys_addr <= phys_addr) && > - (phys_addr < (md->phys_addr + > - (md->num_pages << EFI_PAGE_SHIFT)))) > - return md->attribute; > - } > - return 0; > -} > - > static int __init arch_parse_efi_cmdline(char *str) > { > if (parse_option_str(str, "old_map")) > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index 3061bb8629dc..86da85368778 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -517,3 +517,21 @@ char * __init efi_md_typeattr_format(char *buf, size_t size, > attr & EFI_MEMORY_UC ? "UC" : ""); > return buf; > } > + > +u64 efi_mem_attributes(unsigned long phys_addr) > +{ > + efi_memory_desc_t *md; > + void *p; > + > + if (!efi_enabled(EFI_MEMMAP)) > + return 0; > + Umm... ia64 doesn't appear to set EFI_MEMMAP. So doesn't this change actively break ia64? While I like the idea of de-duplication, the two implementations of efi_mem_attributes() are not equivalent.
Thank you for the feedback, Matt. Given that IA64 does not set EFI_MEMMAP, it appears to me there are following options: A. Keep status quota and copy x86's efi_mem_attributes() code to arm64. B. In efi subsystem, provide week default efi_mem_attributes(). In the mean time, IA64 continues to have its own implementation. C. Add EFI_MEMMAP support (and related bits) in IA64. Which option do you prefer? Once there is a consensus, I am willing to submit patch accordingly for review. Regards, Jonathan On 6/2/2015 6:36 AM, Matt Fleming wrote: > (Cc'ing Tony for ia64 input) > > On Mon, 01 Jun, at 12:12:18PM, Jonathan (Zhixiong) Zhang wrote: >> From: "Jonathan (Zhixiong) Zhang" <zjzhang@codeaurora.org> >> >> Both x86 and ia64 implemented efi_mem_attributs(), which is architecture >> agnositc. This function is moved from arch/x86 and arch/ia64 to >> drivers/firmware/efi. >> >> Signed-off-by: Jonathan (Zhixiong) Zhang <zjzhang@codeaurora.org> >> --- >> arch/ia64/kernel/efi.c | 11 ----------- >> arch/x86/platform/efi/efi.c | 18 ------------------ >> drivers/firmware/efi/efi.c | 18 ++++++++++++++++++ >> 3 files changed, 18 insertions(+), 29 deletions(-) >> >> diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c >> index c52d7540dc05..ef20ec784b04 100644 >> --- a/arch/ia64/kernel/efi.c >> +++ b/arch/ia64/kernel/efi.c >> @@ -771,17 +771,6 @@ efi_mem_type (unsigned long phys_addr) >> } >> >> u64 >> -efi_mem_attributes (unsigned long phys_addr) >> -{ >> - efi_memory_desc_t *md = efi_memory_descriptor(phys_addr); >> - >> - if (md) >> - return md->attribute; >> - return 0; >> -} >> -EXPORT_SYMBOL(efi_mem_attributes); >> - >> -u64 >> efi_mem_attribute (unsigned long phys_addr, unsigned long size) >> { >> unsigned long end = phys_addr + size; >> diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c >> index 02744df576d5..10bd5289c593 100644 >> --- a/arch/x86/platform/efi/efi.c >> +++ b/arch/x86/platform/efi/efi.c >> @@ -926,24 +926,6 @@ u32 efi_mem_type(unsigned long phys_addr) >> return 0; >> } >> >> -u64 efi_mem_attributes(unsigned long phys_addr) >> -{ >> - efi_memory_desc_t *md; >> - void *p; >> - >> - if (!efi_enabled(EFI_MEMMAP)) >> - return 0; >> - >> - for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { >> - md = p; >> - if ((md->phys_addr <= phys_addr) && >> - (phys_addr < (md->phys_addr + >> - (md->num_pages << EFI_PAGE_SHIFT)))) >> - return md->attribute; >> - } >> - return 0; >> -} >> - >> static int __init arch_parse_efi_cmdline(char *str) >> { >> if (parse_option_str(str, "old_map")) >> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c >> index 3061bb8629dc..86da85368778 100644 >> --- a/drivers/firmware/efi/efi.c >> +++ b/drivers/firmware/efi/efi.c >> @@ -517,3 +517,21 @@ char * __init efi_md_typeattr_format(char *buf, size_t size, >> attr & EFI_MEMORY_UC ? "UC" : ""); >> return buf; >> } >> + >> +u64 efi_mem_attributes(unsigned long phys_addr) >> +{ >> + efi_memory_desc_t *md; >> + void *p; >> + >> + if (!efi_enabled(EFI_MEMMAP)) >> + return 0; >> + > > Umm... ia64 doesn't appear to set EFI_MEMMAP. So doesn't this change > actively break ia64? > > While I like the idea of de-duplication, the two implementations of > efi_mem_attributes() are not equivalent. >
On Tue, 02 Jun, at 05:09:14PM, Zhang, Jonathan Zhixiong wrote: > Thank you for the feedback, Matt. > > Given that IA64 does not set EFI_MEMMAP, it appears to me there > are following options: > A. Keep status quota and copy x86's efi_mem_attributes() code > to arm64. Let's avoid this option. > B. In efi subsystem, provide week default efi_mem_attributes(). > In the mean time, IA64 continues to have its own implementation. While I'm not a huge fan of using __weak this makes the most sense to me because the alternative is to rename either the ia64 or x86 implementation and that just seems silly. > C. Add EFI_MEMMAP support (and related bits) in IA64. C. isn't an option because the ia64 memory map doesn't work the same way as x86 and arm64. > Which option do you prefer? Once there is a consensus, I am > willing to submit patch accordingly for review. Let's go with B. but please provide a comment above the weak implementation explaining *why* it's declared as weak and that any new architecture probably doesn't want to override it. Explain that the ia64 EFI memory map is special.
Sure, I will got with B with clear comment. Thanks, Jonathan On 6/5/2015 2:23 AM, Matt Fleming wrote: > On Tue, 02 Jun, at 05:09:14PM, Zhang, Jonathan Zhixiong wrote: >> Thank you for the feedback, Matt. >> >> Given that IA64 does not set EFI_MEMMAP, it appears to me there >> are following options: >> A. Keep status quota and copy x86's efi_mem_attributes() code >> to arm64. > > Let's avoid this option. > >> B. In efi subsystem, provide week default efi_mem_attributes(). >> In the mean time, IA64 continues to have its own implementation. > > While I'm not a huge fan of using __weak this makes the most sense to me > because the alternative is to rename either the ia64 or x86 > implementation and that just seems silly. > >> C. Add EFI_MEMMAP support (and related bits) in IA64. > > C. isn't an option because the ia64 memory map doesn't work the same way > as x86 and arm64. > >> Which option do you prefer? Once there is a consensus, I am >> willing to submit patch accordingly for review. > > Let's go with B. but please provide a comment above the weak > implementation explaining *why* it's declared as weak and that any new > architecture probably doesn't want to override it. Explain that the ia64 > EFI memory map is special. >
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index c52d7540dc05..ef20ec784b04 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c @@ -771,17 +771,6 @@ efi_mem_type (unsigned long phys_addr) } u64 -efi_mem_attributes (unsigned long phys_addr) -{ - efi_memory_desc_t *md = efi_memory_descriptor(phys_addr); - - if (md) - return md->attribute; - return 0; -} -EXPORT_SYMBOL(efi_mem_attributes); - -u64 efi_mem_attribute (unsigned long phys_addr, unsigned long size) { unsigned long end = phys_addr + size; diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 02744df576d5..10bd5289c593 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -926,24 +926,6 @@ u32 efi_mem_type(unsigned long phys_addr) return 0; } -u64 efi_mem_attributes(unsigned long phys_addr) -{ - efi_memory_desc_t *md; - void *p; - - if (!efi_enabled(EFI_MEMMAP)) - return 0; - - for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { - md = p; - if ((md->phys_addr <= phys_addr) && - (phys_addr < (md->phys_addr + - (md->num_pages << EFI_PAGE_SHIFT)))) - return md->attribute; - } - return 0; -} - static int __init arch_parse_efi_cmdline(char *str) { if (parse_option_str(str, "old_map")) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 3061bb8629dc..86da85368778 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -517,3 +517,21 @@ char * __init efi_md_typeattr_format(char *buf, size_t size, attr & EFI_MEMORY_UC ? "UC" : ""); return buf; } + +u64 efi_mem_attributes(unsigned long phys_addr) +{ + efi_memory_desc_t *md; + void *p; + + if (!efi_enabled(EFI_MEMMAP)) + return 0; + + for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { + md = p; + if ((md->phys_addr <= phys_addr) && + (phys_addr < (md->phys_addr + + (md->num_pages << EFI_PAGE_SHIFT)))) + return md->attribute; + } + return 0; +}