[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 09/10] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU suspending



>>> On 05.05.16 at 12:18, <quan.xu@xxxxxxxxx> wrote:
> What about this one as below:

If done properly (coding style, comments to silence Coverity,
consistency throughout not just your change, but its effects on
the rest of the code in that file), that's certainly an option.

Jan

> --- a/xen/arch/x86/acpi/power.c
> +++ b/xen/arch/x86/acpi/power.c
> @@ -43,6 +43,17 @@ struct acpi_sleep_info acpi_sinfo;
> 
>  void do_suspend_lowlevel(void);
> 
> +enum dev_power_type {
> +    TYPE_ALL,
> +    TYPE_CONSOLE,
> +    TYPE_TIME,
> +    TYPE_I8259A,
> +    TYPE_IOAPIC,
> +    TYPE_IOMMU,
> +    TYPE_LAPIC,
> +    TYPE_UNKNOWN
> +};
> +
>  static int device_power_down(void)
>  {
>      console_suspend();
> @@ -53,26 +64,35 @@ static int device_power_down(void)
> 
>      ioapic_suspend();
> 
> -    iommu_suspend();
> +    if ( iommu_suspend() )
> +        return TYPE_IOMMU;
> 
>      lapic_suspend();
> 
>      return 0;
>  }
> 
> -static void device_power_up(void)
> +static void device_power_up(enum dev_power_type type)
>  {
> -    lapic_resume();
> -
> -    iommu_resume();
> -
> -    ioapic_resume();
> -
> -    i8259A_resume();
> -
> -    time_resume();
> -
> -    console_resume();
> +    switch ( type ) {
> +    case TYPE_ALL:
> +    case TYPE_LAPIC:
> +        lapic_resume();
> +    case TYPE_IOMMU:
> +        iommu_resume();
> +    case TYPE_IOAPIC:
> +        ioapic_resume();
> +    case TYPE_I8259A:
> +        i8259A_resume();
> +    case TYPE_TIME:
> +        time_resume();
> +    case TYPE_CONSOLE:
> +        console_resume();
> +        break;
> +    default:
> +        BUG();
> +        break;
> +    }
>  }
> 
>  static void freeze_domains(void)
> @@ -169,6 +189,7 @@ static int enter_state(u32 state)
>      {
>          printk(XENLOG_ERR "Some devices failed to power down.");
>          system_state = SYS_STATE_resume;
> +        device_power_up(error);
>          goto done;
>      }
> 
> @@ -196,7 +217,7 @@ static int enter_state(u32 state)
>      write_cr4(cr4 & ~X86_CR4_MCE);
>      write_efer(read_efer());
> 
> -    device_power_up();
> +    device_power_up(TYPE_ALL);
> 
>      mcheck_init(&boot_cpu_data, 0);
>      write_cr4(cr4);
> 
> --
> Quan




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.