Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Xen: Changelog
[xen-unstable] Introduce system_state variable.
 

Index | Next | Previous | View Flat


patchbot at xen

Mar 22, 2012, 2:33 PM


Views: 62
Permalink
[xen-unstable] Introduce system_state variable.

# HG changeset patch
# User Keir Fraser <keir [at] xen>
# Date 1332418813 0
# Node ID d5ccb2d1dbd1dce76f9d427073306941d48c3095
# Parent 8180cb3895af71d090fa82d66b012f1f65029055
Introduce system_state variable.

Use it to replace x86-specific early_boot boolean variable.

Also use it to detect suspend/resume case during cpu offline/online
to avoid unnecessarily breaking vcpu and cpupool affinities.

Signed-off-by: Keir Fraser <keir [at] xen>
Acked-by: Juergen Gross <juergen.gross [at] ts>
---


diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/arm/setup.c
--- a/xen/arch/arm/setup.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/arm/setup.c Thu Mar 22 12:20:13 2012 +0000
@@ -253,6 +253,8 @@
/* Hide UART from DOM0 if we're using it */
serial_endboot();

+ system_state = SYS_STATE_active;
+
domain_unpause_by_systemcontroller(dom0);

/* Switch on to the dynamically allocated stack for the idle vcpu
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/x86/acpi/power.c
--- a/xen/arch/x86/acpi/power.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/x86/acpi/power.c Thu Mar 22 12:20:13 2012 +0000
@@ -135,6 +135,9 @@
if ( !spin_trylock(&pm_lock) )
return -EBUSY;

+ BUG_ON(system_state != SYS_STATE_active);
+ system_state = SYS_STATE_suspend;
+
printk(XENLOG_INFO "Preparing system for ACPI S%d state.\n", state);

freeze_domains();
@@ -142,7 +145,10 @@
acpi_dmar_reinstate();

if ( (error = disable_nonboot_cpus()) )
+ {
+ system_state = SYS_STATE_resume;
goto enable_cpu;
+ }

cpufreq_del_cpu(0);

@@ -159,6 +165,7 @@
if ( (error = device_power_down()) )
{
printk(XENLOG_ERR "Some devices failed to power down.");
+ system_state = SYS_STATE_resume;
goto done;
}

@@ -179,6 +186,8 @@
break;
}

+ system_state = SYS_STATE_resume;
+
/* Restore CR4 and EFER from cached values. */
cr4 = read_cr4();
write_cr4(cr4 & ~X86_CR4_MCE);
@@ -212,6 +221,7 @@
mtrr_aps_sync_end();
acpi_dmar_zap();
thaw_domains();
+ system_state = SYS_STATE_active;
spin_unlock(&pm_lock);
return error;
}
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/x86/mm.c Thu Mar 22 12:20:13 2012 +0000
@@ -5316,7 +5316,7 @@

void free_xen_pagetable(void *v)
{
- if ( early_boot )
+ if ( system_state == SYS_STATE_early_boot )
return;

if ( is_xen_heap_page(virt_to_page(v)) )
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/x86/setup.c Thu Mar 22 12:20:13 2012 +0000
@@ -81,8 +81,6 @@
s8 __read_mostly xen_cpuidle = -1;
boolean_param("cpuidle", xen_cpuidle);

-bool_t __read_mostly early_boot = 1;
-
cpumask_t __read_mostly cpu_present_map;

unsigned long __read_mostly xen_phys_start;
@@ -271,7 +269,7 @@
void *ret;

#ifdef __x86_64__
- if ( !early_boot )
+ if ( system_state != SYS_STATE_early_boot )
return mod ? mfn_to_virt(mod->mod_start) : NULL;
#endif

@@ -1168,7 +1166,7 @@
#endif

end_boot_allocator();
- early_boot = 0;
+ system_state = SYS_STATE_boot;

#if defined(CONFIG_X86_64)
vesa_init();
@@ -1391,6 +1389,8 @@

dmi_end_boot();

+ system_state = SYS_STATE_active;
+
domain_unpause_by_systemcontroller(dom0);

reset_stack_and_jump(init_done);
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/x86/x86_32/mm.c
--- a/xen/arch/x86/x86_32/mm.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/x86/x86_32/mm.c Thu Mar 22 12:20:13 2012 +0000
@@ -43,7 +43,7 @@
{
unsigned long mfn;

- if ( !early_boot )
+ if ( system_state != SYS_STATE_early_boot )
{
void *v = alloc_xenheap_page();

diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/arch/x86/x86_64/mm.c Thu Mar 22 12:20:13 2012 +0000
@@ -85,7 +85,7 @@
{
unsigned long mfn;

- if ( !early_boot )
+ if ( system_state != SYS_STATE_early_boot )
{
struct page_info *pg = alloc_domheap_page(NULL, 0);

diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/common/cpupool.c
--- a/xen/common/cpupool.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/common/cpupool.c Thu Mar 22 12:20:13 2012 +0000
@@ -629,6 +629,10 @@
unsigned int cpu = (unsigned long)hcpu;
int rc = 0;

+ if ( (system_state == SYS_STATE_suspend) ||
+ (system_state == SYS_STATE_resume) )
+ goto out;
+
switch ( action )
{
case CPU_DOWN_FAILED:
@@ -642,6 +646,7 @@
break;
}

+out:
return !rc ? NOTIFY_DONE : notifier_from_errno(rc);
}

diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/common/kernel.c
--- a/xen/common/kernel.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/common/kernel.c Thu Mar 22 12:20:13 2012 +0000
@@ -20,6 +20,8 @@

#ifndef COMPAT

+enum system_state system_state = SYS_STATE_early_boot;
+
int tainted;

xen_commandline_t saved_cmdline;
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/common/schedule.c
--- a/xen/common/schedule.c Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/common/schedule.c Thu Mar 22 12:20:13 2012 +0000
@@ -538,7 +538,7 @@
int ret = 0;

c = per_cpu(cpupool, cpu);
- if ( c == NULL )
+ if ( (c == NULL) || (system_state == SYS_STATE_suspend) )
return ret;

for_each_domain_in_cpupool ( d, c )
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/include/asm-x86/setup.h
--- a/xen/include/asm-x86/setup.h Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/include/asm-x86/setup.h Thu Mar 22 12:20:13 2012 +0000
@@ -3,7 +3,6 @@

#include <xen/multiboot.h>

-extern bool_t early_boot;
extern unsigned long xenheap_initial_phys_start;

void early_cpu_init(void);
diff -r 8180cb3895af -r d5ccb2d1dbd1 xen/include/xen/kernel.h
--- a/xen/include/xen/kernel.h Thu Mar 22 10:26:45 2012 +0000
+++ b/xen/include/xen/kernel.h Thu Mar 22 12:20:13 2012 +0000
@@ -87,5 +87,13 @@
(__p >= _sinittext) && (__p < _einittext); \
})

+extern enum system_state {
+ SYS_STATE_early_boot,
+ SYS_STATE_boot,
+ SYS_STATE_active,
+ SYS_STATE_suspend,
+ SYS_STATE_resume
+} system_state;
+
#endif /* _LINUX_KERNEL_H */


_______________________________________________
Xen-changelog mailing list
Xen-changelog [at] lists
http://lists.xensource.com/xen-changelog

Subject User Time
[xen-unstable] Introduce system_state variable. patchbot at xen Mar 22, 2012, 2:33 PM

  Index | Next | Previous | View Flat
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.