[RFC PATCH v4 19/37] arm64: irq-gic: Replace unreachable() with -EINVAL

From: Chen Zhongjin
Date: Fri Apr 29 2022 - 05:46:00 EST


Using unreachable() at end of function generates an extra NOP for
.unreachable section. It can confuse objtool to warn this NOP as
fall through instruction.

Considering that these branches are actually unreachable, replace
unreachable() with returning a -EINVAL value.

Signed-off-by: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
---
arch/arm64/kvm/hyp/vgic-v3-sr.c | 7 +++----
drivers/irqchip/irq-gic-v3.c | 2 +-
2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c
index 4fb419f7b8b6..f3cee92c3038 100644
--- a/arch/arm64/kvm/hyp/vgic-v3-sr.c
+++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c
@@ -6,7 +6,6 @@

#include <hyp/adjust_pc.h>

-#include <linux/compiler.h>
#include <linux/irqchip/arm-gic-v3.h>
#include <linux/kvm_host.h>

@@ -55,7 +54,7 @@ static u64 __gic_v3_get_lr(unsigned int lr)
return read_gicreg(ICH_LR15_EL2);
}

- unreachable();
+ return -EINVAL;
}

static void __gic_v3_set_lr(u64 val, int lr)
@@ -166,7 +165,7 @@ static u32 __vgic_v3_read_ap0rn(int n)
val = read_gicreg(ICH_AP0R3_EL2);
break;
default:
- unreachable();
+ val = -EINVAL;
}

return val;
@@ -190,7 +189,7 @@ static u32 __vgic_v3_read_ap1rn(int n)
val = read_gicreg(ICH_AP1R3_EL2);
break;
default:
- unreachable();
+ val = -EINVAL;
}

return val;
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index b252d5534547..2ef98e32d257 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -475,7 +475,7 @@ static u32 __gic_get_ppi_index(irq_hw_number_t hwirq)
case EPPI_RANGE:
return hwirq - EPPI_BASE_INTID + 16;
default:
- unreachable();
+ return -EINVAL;
}
}

--
2.17.1