diff mbox

[V2,1/3] efi: arch, x86: arch, ia64: move efi_mem_attributes()

Message ID 1433185940-24770-2-git-send-email-zjzhang@codeaurora.org (mailing list archive)
State Not Applicable, archived
Delegated to: Andy Gross
Headers show

Commit Message

Jonathan (Zhixiong) Zhang June 1, 2015, 7:12 p.m. UTC
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(-)

Comments

Matt Fleming June 2, 2015, 1:36 p.m. UTC | #1
(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.
Jonathan (Zhixiong) Zhang June 3, 2015, 12:09 a.m. UTC | #2
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.
>
Matt Fleming June 5, 2015, 9:23 a.m. UTC | #3
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.
Jonathan (Zhixiong) Zhang June 5, 2015, 4:44 p.m. UTC | #4
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 mbox

Patch

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;
+}