From: Keir Fraser Date: Wed, 7 Jan 2009 11:21:50 +0000 (+0000) Subject: cpufreq: stats_lock doesn't appear to need to be irq-safe. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14014^2~104 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b988ec6b11dab6a5048c6c39b5119fb50c5928fa;p=xen.git cpufreq: stats_lock doesn't appear to need to be irq-safe. Changing this fixes some bugchecks (xmalloc() with irqs disabled). Signed-off-by: Keir Fraser --- diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c index e1faae3b33..78b5fdf143 100644 --- a/xen/drivers/acpi/pmstat.c +++ b/xen/drivers/acpi/pmstat.c @@ -92,11 +92,11 @@ int do_get_pm_info(struct xen_sysctl_get_pmstat *op) spinlock_t *cpufreq_statistic_lock = &per_cpu(cpufreq_statistic_lock, op->cpuid); - spin_lock_irq(cpufreq_statistic_lock); + spin_lock(cpufreq_statistic_lock); if ( !pxpt || !pxpt->u.pt || !pxpt->u.trans_pt ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return -ENODATA; } @@ -107,14 +107,14 @@ int do_get_pm_info(struct xen_sysctl_get_pmstat *op) ct = pmpt->perf.state_count; if ( copy_to_guest(op->u.getpx.trans_pt, pxpt->u.trans_pt, ct*ct) ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); ret = -EFAULT; break; } if ( copy_to_guest(op->u.getpx.pt, pxpt->u.pt, ct) ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); ret = -EFAULT; break; } @@ -124,7 +124,7 @@ int do_get_pm_info(struct xen_sysctl_get_pmstat *op) op->u.getpx.last = pxpt->u.last; op->u.getpx.cur = pxpt->u.cur; - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); break; } diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c index 24e070deda..91225b9199 100644 --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -68,10 +68,10 @@ void cpufreq_statistic_update(unsigned int cpu, uint8_t from, uint8_t to) spinlock_t *cpufreq_statistic_lock = &per_cpu(cpufreq_statistic_lock, cpu); - spin_lock_irq(cpufreq_statistic_lock); + spin_lock(cpufreq_statistic_lock); if ( !pxpt || !pmpt ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return; } @@ -83,7 +83,7 @@ void cpufreq_statistic_update(unsigned int cpu, uint8_t from, uint8_t to) (*(pxpt->u.trans_pt + from * pmpt->perf.state_count + to))++; - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); } int cpufreq_statistic_init(unsigned int cpuid) @@ -97,10 +97,10 @@ int cpufreq_statistic_init(unsigned int cpuid) if ( !pmpt ) return -EINVAL; - spin_lock_irq(cpufreq_statistic_lock); + spin_lock(cpufreq_statistic_lock); if ( pxpt ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return 0; } @@ -108,7 +108,7 @@ int cpufreq_statistic_init(unsigned int cpuid) pxpt = xmalloc(struct pm_px); if ( !pxpt ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return -ENOMEM; } memset(pxpt, 0, sizeof(*pxpt)); @@ -117,7 +117,7 @@ int cpufreq_statistic_init(unsigned int cpuid) pxpt->u.trans_pt = xmalloc_array(uint64_t, count * count); if (!pxpt->u.trans_pt) { xfree(pxpt); - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return -ENOMEM; } @@ -125,7 +125,7 @@ int cpufreq_statistic_init(unsigned int cpuid) if (!pxpt->u.pt) { xfree(pxpt->u.trans_pt); xfree(pxpt); - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return -ENOMEM; } @@ -141,7 +141,7 @@ int cpufreq_statistic_init(unsigned int cpuid) pxpt->prev_state_wall = NOW(); pxpt->prev_idle_wall = get_cpu_idle_time(cpuid); - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return 0; } @@ -152,10 +152,10 @@ void cpufreq_statistic_exit(unsigned int cpuid) spinlock_t *cpufreq_statistic_lock = &per_cpu(cpufreq_statistic_lock, cpuid); - spin_lock_irq(cpufreq_statistic_lock); + spin_lock(cpufreq_statistic_lock); if (!pxpt) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return; } @@ -164,7 +164,7 @@ void cpufreq_statistic_exit(unsigned int cpuid) xfree(pxpt); cpufreq_statistic_data[cpuid] = NULL; - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); } void cpufreq_statistic_reset(unsigned int cpuid) @@ -175,10 +175,10 @@ void cpufreq_statistic_reset(unsigned int cpuid) spinlock_t *cpufreq_statistic_lock = &per_cpu(cpufreq_statistic_lock, cpuid); - spin_lock_irq(cpufreq_statistic_lock); + spin_lock(cpufreq_statistic_lock); if ( !pmpt || !pxpt || !pxpt->u.pt || !pxpt->u.trans_pt ) { - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); return; } @@ -195,7 +195,7 @@ void cpufreq_statistic_reset(unsigned int cpuid) pxpt->prev_state_wall = NOW(); pxpt->prev_idle_wall = get_cpu_idle_time(cpuid); - spin_unlock_irq(cpufreq_statistic_lock); + spin_unlock(cpufreq_statistic_lock); }