Message ID | 945CA011AD5F084CBEA3E851C0AB28894B8A94D5@SHSMSX101.ccr.corp.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 05.05.16 at 12:18, <quan.xu@intel.com> 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
On May 06, 2016 3:03 PM, Jan Beulich <JBeulich@suse.com> wrote: > >>> On 05.05.16 at 12:18, <quan.xu@intel.com> 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. > Thanks. I'll try it in next v4. -Quan
--- 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);