From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wei, Gang" Subject: RE: [PATCH]CPUFREQ: Fix two racing issues during cpu hotplug Date: Mon, 12 Apr 2010 15:40:32 +0800 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_002_E6467867A6B05E4FA831B7DF29925F5C40F16C41shzsmsx502ccrco_" Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser , "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --_002_E6467867A6B05E4FA831B7DF29925F5C40F16C41shzsmsx502ccrco_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Resend. CPUFREQ: fix racing issue for cpu hotplug To eliminate racing between dbs timer handler and cpufreq_del_cpu, using ki= ll_timer instead of stop_timer to make sure timer handler execution finishe= d before other stuff in cpufreq_del_cpu. BTW, fix a lost point of cpufreq_statistic_lock taking sequence. Signed-off-by: Wei Gang diff -r 824d35c72a8d xen/drivers/acpi/pmstat.c --- a/xen/drivers/acpi/pmstat.c Mon Apr 12 15:32:32 2010 +0800 +++ b/xen/drivers/acpi/pmstat.c Mon Apr 12 15:33:00 2010 +0800 @@ -86,12 +86,13 @@ int do_get_pm_info(struct xen_sysctl_get case PMSTAT_get_pxstat: { uint32_t ct; - struct pm_px *pxpt =3D cpufreq_statistic_data[op->cpuid]; + struct pm_px *pxpt; spinlock_t *cpufreq_statistic_lock =3D=20 &per_cpu(cpufreq_statistic_lock, op->cpuid); =20 spin_lock(cpufreq_statistic_lock); =20 + pxpt =3D cpufreq_statistic_data[op->cpuid]; if ( !pxpt || !pxpt->u.pt || !pxpt->u.trans_pt ) { spin_unlock(cpufreq_statistic_lock); diff -r 824d35c72a8d xen/drivers/cpufreq/cpufreq_ondemand.c --- a/xen/drivers/cpufreq/cpufreq_ondemand.c Mon Apr 12 15:32:32 2010 +0800 +++ b/xen/drivers/cpufreq/cpufreq_ondemand.c Mon Apr 12 15:33:17 2010 +0800 @@ -196,9 +196,8 @@ static void dbs_timer_init(struct cpu_db { dbs_info->enable =3D 1; =20 - if ( !dbs_timer[dbs_info->cpu].function ) - init_timer(&dbs_timer[dbs_info->cpu], do_dbs_timer,=20 - (void *)dbs_info, dbs_info->cpu); + init_timer(&dbs_timer[dbs_info->cpu], do_dbs_timer,=20 + (void *)dbs_info, dbs_info->cpu); =20 set_timer(&dbs_timer[dbs_info->cpu], NOW()+dbs_tuners_ins.sampling_rat= e); =20 @@ -213,7 +212,7 @@ static void dbs_timer_exit(struct cpu_db { dbs_info->enable =3D 0; dbs_info->stoppable =3D 0; - stop_timer(&dbs_timer[dbs_info->cpu]); + kill_timer(&dbs_timer[dbs_info->cpu]); } =20 int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event= )= --_002_E6467867A6B05E4FA831B7DF29925F5C40F16C41shzsmsx502ccrco_ Content-Type: application/octet-stream; name="dbs-timer-fix-v2.patch" Content-Description: dbs-timer-fix-v2.patch Content-Disposition: attachment; filename="dbs-timer-fix-v2.patch"; size=1999; creation-date="Thu, 08 Apr 2010 10:38:41 GMT"; modification-date="Mon, 12 Apr 2010 15:38:54 GMT" Content-Transfer-Encoding: base64 Q1BVRlJFUTogZml4IHJhY2luZyBpc3N1ZSBmb3IgY3B1IGhvdHBsdWcKClRvIGVsaW1pbmF0ZSBy YWNpbmcgYmV0d2VlbiBkYnMgdGltZXIgaGFuZGxlciBhbmQgY3B1ZnJlcV9kZWxfY3B1LCB1c2lu ZyBraWxsX3RpbWVyIGluc3RlYWQgb2Ygc3RvcF90aW1lciB0byBtYWtlIHN1cmUgdGltZXIgaGFu ZGxlciBleGVjdXRpb24gZmluaXNoZWQgYmVmb3JlIG90aGVyIHN0dWZmIGluIGNwdWZyZXFfZGVs X2NwdS4KCkJUVywgZml4IGEgbG9zdCBwb2ludCBvZiBjcHVmcmVxX3N0YXRpc3RpY19sb2NrIHRh a2luZyBzZXF1ZW5jZS4KClNpZ25lZC1vZmYtYnk6IFdlaSBHYW5nIDxnYW5nLndlaUBpbnRlbC5j b20+CgpkaWZmIC1yIDgyNGQzNWM3MmE4ZCB4ZW4vZHJpdmVycy9hY3BpL3Btc3RhdC5jCi0tLSBh L3hlbi9kcml2ZXJzL2FjcGkvcG1zdGF0LmMJTW9uIEFwciAxMiAxNTozMjozMiAyMDEwICswODAw CisrKyBiL3hlbi9kcml2ZXJzL2FjcGkvcG1zdGF0LmMJTW9uIEFwciAxMiAxNTozMzowMCAyMDEw ICswODAwCkBAIC04NiwxMiArODYsMTMgQEAgaW50IGRvX2dldF9wbV9pbmZvKHN0cnVjdCB4ZW5f c3lzY3RsX2dldAogICAgIGNhc2UgUE1TVEFUX2dldF9weHN0YXQ6CiAgICAgewogICAgICAgICB1 aW50MzJfdCBjdDsKLSAgICAgICAgc3RydWN0IHBtX3B4ICpweHB0ID0gY3B1ZnJlcV9zdGF0aXN0 aWNfZGF0YVtvcC0+Y3B1aWRdOworICAgICAgICBzdHJ1Y3QgcG1fcHggKnB4cHQ7CiAgICAgICAg IHNwaW5sb2NrX3QgKmNwdWZyZXFfc3RhdGlzdGljX2xvY2sgPSAKICAgICAgICAgICAgICAgICAg ICAmcGVyX2NwdShjcHVmcmVxX3N0YXRpc3RpY19sb2NrLCBvcC0+Y3B1aWQpOwogCiAgICAgICAg IHNwaW5fbG9jayhjcHVmcmVxX3N0YXRpc3RpY19sb2NrKTsKIAorICAgICAgICBweHB0ID0gY3B1 ZnJlcV9zdGF0aXN0aWNfZGF0YVtvcC0+Y3B1aWRdOwogICAgICAgICBpZiAoICFweHB0IHx8ICFw eHB0LT51LnB0IHx8ICFweHB0LT51LnRyYW5zX3B0ICkKICAgICAgICAgewogICAgICAgICAgICAg c3Bpbl91bmxvY2soY3B1ZnJlcV9zdGF0aXN0aWNfbG9jayk7CmRpZmYgLXIgODI0ZDM1YzcyYThk IHhlbi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCi0tLSBhL3hlbi9kcml2ZXJz L2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCU1vbiBBcHIgMTIgMTU6MzI6MzIgMjAxMCArMDgw MAorKysgYi94ZW4vZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwlNb24gQXByIDEy IDE1OjMzOjE3IDIwMTAgKzA4MDAKQEAgLTE5Niw5ICsxOTYsOCBAQCBzdGF0aWMgdm9pZCBkYnNf dGltZXJfaW5pdChzdHJ1Y3QgY3B1X2RiCiB7CiAgICAgZGJzX2luZm8tPmVuYWJsZSA9IDE7CiAK LSAgICBpZiAoICFkYnNfdGltZXJbZGJzX2luZm8tPmNwdV0uZnVuY3Rpb24gKQotICAgICAgICBp bml0X3RpbWVyKCZkYnNfdGltZXJbZGJzX2luZm8tPmNwdV0sIGRvX2Ric190aW1lciwgCi0gICAg ICAgICAgICAodm9pZCAqKWRic19pbmZvLCBkYnNfaW5mby0+Y3B1KTsKKyAgICBpbml0X3RpbWVy KCZkYnNfdGltZXJbZGJzX2luZm8tPmNwdV0sIGRvX2Ric190aW1lciwgCisgICAgICAgICh2b2lk ICopZGJzX2luZm8sIGRic19pbmZvLT5jcHUpOwogCiAgICAgc2V0X3RpbWVyKCZkYnNfdGltZXJb ZGJzX2luZm8tPmNwdV0sIE5PVygpK2Ric190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOwogCkBA IC0yMTMsNyArMjEyLDcgQEAgc3RhdGljIHZvaWQgZGJzX3RpbWVyX2V4aXQoc3RydWN0IGNwdV9k YgogewogICAgIGRic19pbmZvLT5lbmFibGUgPSAwOwogICAgIGRic19pbmZvLT5zdG9wcGFibGUg PSAwOwotICAgIHN0b3BfdGltZXIoJmRic190aW1lcltkYnNfaW5mby0+Y3B1XSk7CisgICAga2ls bF90aW1lcigmZGJzX3RpbWVyW2Ric19pbmZvLT5jcHVdKTsKIH0KIAogaW50IGNwdWZyZXFfZ292 ZXJub3JfZGJzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgZXZl bnQpCg== --_002_E6467867A6B05E4FA831B7DF29925F5C40F16C41shzsmsx502ccrco_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --_002_E6467867A6B05E4FA831B7DF29925F5C40F16C41shzsmsx502ccrco_--