[PATCH] x86/ACPI: Fix build error when tboot is disabled

Costin Lupu posted 1 patch 2 years, 11 months ago
Test gitlab-ci passed
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/79df12ade0840338590f440cd064052a961fe23b.1619698239.git.costin.lupu@cs.pub.ro
xen/arch/x86/acpi/power.c | 4 ++++
1 file changed, 4 insertions(+)
[PATCH] x86/ACPI: Fix build error when tboot is disabled
Posted by Costin Lupu 2 years, 11 months ago
When tboot is disabled via menuconfig we get undefined reference error for
g_tboot_shared. This patch fixes that by disabling the causing source code
when tboot is disabled.

Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro>
---
 xen/arch/x86/acpi/power.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/xen/arch/x86/acpi/power.c b/xen/arch/x86/acpi/power.c
index 91a8c4d0bd..29d9775aed 100644
--- a/xen/arch/x86/acpi/power.c
+++ b/xen/arch/x86/acpi/power.c
@@ -407,6 +407,7 @@ static int acpi_get_wake_status(void)
     return val;
 }
 
+#ifdef CONFIG_TBOOT
 static void tboot_sleep(u8 sleep_state)
 {
     uint32_t shutdown_type;
@@ -451,18 +452,21 @@ static void tboot_sleep(u8 sleep_state)
 
     tboot_shutdown(shutdown_type);
 }
+#endif
 
 /* System is really put into sleep state by this stub */
 acpi_status acpi_enter_sleep_state(u8 sleep_state)
 {
     acpi_status status;
 
+#ifdef CONFIG_TBOOT
     if ( tboot_in_measured_env() )
     {
         tboot_sleep(sleep_state);
         printk(XENLOG_ERR "TBOOT failed entering s3 state\n");
         return_ACPI_STATUS(AE_ERROR);
     }
+#endif
 
     ACPI_FLUSH_CPU_CACHE();
 
-- 
2.20.1


Re: [PATCH] x86/ACPI: Fix build error when tboot is disabled
Posted by Jan Beulich 2 years, 11 months ago
On 29.04.2021 14:11, Costin Lupu wrote:
> When tboot is disabled via menuconfig we get undefined reference error for
> g_tboot_shared. This patch fixes that by disabling the causing source code
> when tboot is disabled.

There must be more to this: Our shim config also builds with tboot
disabled, without running into any build issue. Furthermore ...

> --- a/xen/arch/x86/acpi/power.c
> +++ b/xen/arch/x86/acpi/power.c
> @@ -407,6 +407,7 @@ static int acpi_get_wake_status(void)
>      return val;
>  }
>  
> +#ifdef CONFIG_TBOOT
>  static void tboot_sleep(u8 sleep_state)
>  {
>      uint32_t shutdown_type;
> @@ -451,18 +452,21 @@ static void tboot_sleep(u8 sleep_state)
>  
>      tboot_shutdown(shutdown_type);
>  }
> +#endif
>  
>  /* System is really put into sleep state by this stub */
>  acpi_status acpi_enter_sleep_state(u8 sleep_state)
>  {
>      acpi_status status;
>  
> +#ifdef CONFIG_TBOOT
>      if ( tboot_in_measured_env() )
>      {
>          tboot_sleep(sleep_state);
>          printk(XENLOG_ERR "TBOOT failed entering s3 state\n");
>          return_ACPI_STATUS(AE_ERROR);
>      }
> +#endif

... tboot_in_measured_env() already has a stub returning 0 when
!TBOOT (which is what I would have recommended instead of the
#ifdef-ary).

If there is a specific case where the compiler fails to DCE the
offending code, then you need to describe this in sufficient
detail.

Jan

Re: [PATCH] x86/ACPI: Fix build error when tboot is disabled
Posted by Costin Lupu 2 years, 11 months ago
On 4/29/21 3:40 PM, Jan Beulich wrote:
> On 29.04.2021 14:11, Costin Lupu wrote:
>> When tboot is disabled via menuconfig we get undefined reference error for
>> g_tboot_shared. This patch fixes that by disabling the causing source code
>> when tboot is disabled.
> 
> There must be more to this: Our shim config also builds with tboot
> disabled, without running into any build issue. Furthermore ...
> 
>> --- a/xen/arch/x86/acpi/power.c
>> +++ b/xen/arch/x86/acpi/power.c
>> @@ -407,6 +407,7 @@ static int acpi_get_wake_status(void)
>>      return val;
>>  }
>>  
>> +#ifdef CONFIG_TBOOT
>>  static void tboot_sleep(u8 sleep_state)
>>  {
>>      uint32_t shutdown_type;
>> @@ -451,18 +452,21 @@ static void tboot_sleep(u8 sleep_state)
>>  
>>      tboot_shutdown(shutdown_type);
>>  }
>> +#endif
>>  
>>  /* System is really put into sleep state by this stub */
>>  acpi_status acpi_enter_sleep_state(u8 sleep_state)
>>  {
>>      acpi_status status;
>>  
>> +#ifdef CONFIG_TBOOT
>>      if ( tboot_in_measured_env() )
>>      {
>>          tboot_sleep(sleep_state);
>>          printk(XENLOG_ERR "TBOOT failed entering s3 state\n");
>>          return_ACPI_STATUS(AE_ERROR);
>>      }
>> +#endif
> 
> ... tboot_in_measured_env() already has a stub returning 0 when
> !TBOOT (which is what I would have recommended instead of the
> #ifdef-ary).
> 
> If there is a specific case where the compiler fails to DCE the
> offending code, then you need to describe this in sufficient
> detail.

Yes, indeed. My bad, it is for a debug build with -O0, so without DCE.

Cheers,
Costin

Re: [PATCH] x86/ACPI: Fix build error when tboot is disabled
Posted by Jan Beulich 2 years, 11 months ago
On 29.04.2021 15:22, Costin Lupu wrote:
> On 4/29/21 3:40 PM, Jan Beulich wrote:
>> If there is a specific case where the compiler fails to DCE the
>> offending code, then you need to describe this in sufficient
>> detail.
> 
> Yes, indeed. My bad, it is for a debug build with -O0, so without DCE.

Iirc there's a series pending to switch to -Og; I don't think we
build with -O0 under any circumstances (for this very reason).

Jan

Re: [PATCH] x86/ACPI: Fix build error when tboot is disabled
Posted by Andrew Cooper 2 years, 11 months ago
On 29/04/2021 14:42, Jan Beulich wrote:
> On 29.04.2021 15:22, Costin Lupu wrote:
>> On 4/29/21 3:40 PM, Jan Beulich wrote:
>>> If there is a specific case where the compiler fails to DCE the
>>> offending code, then you need to describe this in sufficient
>>> detail.
>> Yes, indeed. My bad, it is for a debug build with -O0, so without DCE.
> Iirc there's a series pending to switch to -Og; I don't think we
> build with -O0 under any circumstances (for this very reason).

-Og is roughly about -O0.9.  There is certainly some trivial DCE
involved, but no optimisations which radically rearrange the code
structure.  The -Og series did survive some randconfig testing, but I
can't guarantee that it was comprehensive.

As for -O0, I think causality is the other way around there.  Wei
elected to rely on DCE for conditional compilation because we didn't
seem to care about compiling at -O0.


Part of me thinks that we ought to cope compiling at any optimisation
level, including -O0, but I doubt I'd like the extra ifdef-ary required
to make that work.

I think we absolutely should have Kconfig to select between -Og/1/2/3,
as well as binutils new microarch levels

~Andrew