diff mbox

[1/2] arm: cpu: Soften no-EL2 virt IRQ error condition.

Message ID 74a5ec02619e78867fa4052ae45f4183d9c1656b.1437197974.git.crosthwaite.peter@gmail.com
State New
Headers show

Commit Message

Peter Crosthwaite July 18, 2015, 6 a.m. UTC
Replace the hw_error for no-EL2 VIRQ with a LOG_UNIMP. This is more
accurate and handles the corner case where the user defeatures EL2
using overrides in a system that would otherwise have EL2
connectivity.

Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
---
I'm primarily interested in getting rid of the hw_error() more than
anything. If my use-case seems invalid and a stronger error is
preffered, it can be redone as an assert and the code will still work
for me.
---
 target-arm/cpu.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Peter Maydell July 18, 2015, 9:03 a.m. UTC | #1
On 18 July 2015 at 07:00, Peter Crosthwaite <crosthwaitepeter@gmail.com> wrote:
> Replace the hw_error for no-EL2 VIRQ with a LOG_UNIMP. This is more
> accurate and handles the corner case where the user defeatures EL2
> using overrides in a system that would otherwise have EL2
> connectivity.
>
> Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> ---
> I'm primarily interested in getting rid of the hw_error() more than
> anything. If my use-case seems invalid and a stronger error is
> preffered, it can be redone as an assert and the code will still work
> for me.
> ---
>  target-arm/cpu.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/target-arm/cpu.c b/target-arm/cpu.c
> index 29b7eca..c4b8448 100644
> --- a/target-arm/cpu.c
> +++ b/target-arm/cpu.c
> @@ -310,8 +310,10 @@ static void arm_cpu_set_irq(void *opaque, int irq, int level)
>      case ARM_CPU_VIRQ:
>      case ARM_CPU_VFIQ:
>          if (!arm_feature(env, ARM_FEATURE_EL2)) {
> -            hw_error("%s: Virtual interrupt line %d with no EL2 support\n",
> -                     __func__, irq);
> +            qemu_log_mask(LOG_UNIMP,
> +                          "%s: Virtual interrupt line %d with no EL2 support\n",
> +                          __func__, irq);
> +            return;

My inclination is to say we should assert. If the board
model has put together a system where it creates a CPU
with no EL2 support and then wires up the VIRQ/VFIQ
lines to something, then that sounds like a board model
bug to me. LOG_UNIMP is for "this is legitimate guest
behaviour but we haven't written the code to support it".

thanks
-- PMM
diff mbox

Patch

diff --git a/target-arm/cpu.c b/target-arm/cpu.c
index 29b7eca..c4b8448 100644
--- a/target-arm/cpu.c
+++ b/target-arm/cpu.c
@@ -310,8 +310,10 @@  static void arm_cpu_set_irq(void *opaque, int irq, int level)
     case ARM_CPU_VIRQ:
     case ARM_CPU_VFIQ:
         if (!arm_feature(env, ARM_FEATURE_EL2)) {
-            hw_error("%s: Virtual interrupt line %d with no EL2 support\n",
-                     __func__, irq);
+            qemu_log_mask(LOG_UNIMP,
+                          "%s: Virtual interrupt line %d with no EL2 support\n",
+                          __func__, irq);
+            return;
         }
         /* fall through */
     case ARM_CPU_IRQ: