On 8/30/23 02:34, Daniel Henrique Barboza wrote:
TBH I'm bothered why this doesn't work:
diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c
index 592c3ce768..251e08ddc4 100644
--- a/hw/intc/riscv_aplic.c
+++ b/hw/intc/riscv_aplic.c
@@ -839,12 +839,16 @@ static void riscv_aplic_realize(DeviceState *dev, Error
**errp)
* Only root APLICs have hardware IRQ lines. All non-root APLICs
* have IRQ lines delegated by their parent APLIC.
*/
- if (!aplic->parent) {
- if (is_kvm_aia(aplic->msimode)) {
- qdev_init_gpio_in(dev, riscv_kvm_aplic_request, aplic->num_irqs);
- } else {
- qdev_init_gpio_in(dev, riscv_aplic_request, aplic->num_irqs);
+ if (kvm_enabled()) {
+ if (!aplic->parent) {
+ if (is_kvm_aia(aplic->msimode)) {
+ qdev_init_gpio_in(dev, riscv_kvm_aplic_request,
aplic->num_irqs);
+ } else {
+ qdev_init_gpio_in(dev, riscv_aplic_request, aplic->num_irqs);
+ }
}
+ } else if (!aplic->parent) {
+ qdev_init_gpio_in(dev, riscv_aplic_request, aplic->num_irqs);
}
Why is the compiler refusing to crop an "if kvm_enabled()" block? There's no
other
conditionals to handle, and it is able to crop "if (kvm_enabled() &&
virt_use_kvm_aia(s))".
Is this solely because riscv_kvm_aplic_request() will be an unused function if
the crop
happens and, as you said above, "the compiler won't eliminate entire unused
functions with
-O0"?
Yes, exactly.
r~