On Thu, 16 Nov 2017, Jan Kiszka wrote:
>  
>  static void __init jailhouse_init_platform(void)
>  {
> +     struct ioapic_domain_cfg ioapic_cfg = {
> +             .type = IOAPIC_DOMAIN_STRICT,
> +             .ops = &mp_ioapic_irqdomain_ops,
> +     };
> +     struct mpc_intsrc mp_irq = {
> +             .type = MP_INTSRC,
> +             .irqtype = mp_INT,
> +     };
>       u64 pa_data = boot_params.hdr.setup_data;
>       struct jailhouse_setup_data *data;
>       unsigned int cpu;
> @@ -189,6 +198,17 @@ static void __init jailhouse_init_platform(void)
>                                      boot_cpu_apic_version);
>       smp_found_config = 1;
>  
> +     if (data->standard_ioapic) {
> +             mp_register_ioapic(0, 0xfec00000, gsi_top, &ioapic_cfg);
> +
> +             /* Register 1:1 mapping for legacy UART IRQs 3 and 4 */
> +             mp_irq.srcbusirq = mp_irq.dstirq = 3;
> +             mp_save_irq(&mp_irq);
> +
> +             mp_irq.srcbusirq = mp_irq.dstirq = 4;
> +             mp_save_irq(&mp_irq);

Again, that can run later. And please split out initialization for
particular features into separate functions. Otherwise the parse function
will become a kitchen sink of all sorts.

Thanks,

        tglx

Reply via email to