On Tue, 16 Jan 2018, Yu, Fenghua wrote:
> > From: Thomas Gleixner [mailto:<email address hidden>]
> Is this a Haswell specific issue?
>
> I run the following test forever without issue on Broadwell and 4.15.0-rc6 with rdt mounted:
> for ((;;)) do
> for ((i=1;i<88;i++)) do
> echo 0 >/sys/devices/system/cpu/cpu$i/online
> done
> echo "online cpus:"
> grep processor /proc/cpuinfo |wc
> for ((i=1;i<88;i++)) do
> echo 1 >/sys/devices/system/cpu/cpu$i/online
> done
> echo "online cpus:"
> grep processor /proc/cpuinfo|wc
> done
>
> I'm finding a Haswell to reproduce the issue.
Come on. This is crystal clear from the KASAN trace. And the fix is simple enough.
You simply do not run into it because on your machine
On Tue, 16 Jan 2018, Yu, Fenghua wrote: system/ cpu/cpu$ i/online system/ cpu/cpu$ i/online
> > From: Thomas Gleixner [mailto:<email address hidden>]
> Is this a Haswell specific issue?
>
> I run the following test forever without issue on Broadwell and 4.15.0-rc6 with rdt mounted:
> for ((;;)) do
> for ((i=1;i<88;i++)) do
> echo 0 >/sys/devices/
> done
> echo "online cpus:"
> grep processor /proc/cpuinfo |wc
> for ((i=1;i<88;i++)) do
> echo 1 >/sys/devices/
> done
> echo "online cpus:"
> grep processor /proc/cpuinfo|wc
> done
>
> I'm finding a Haswell to reproduce the issue.
Come on. This is crystal clear from the KASAN trace. And the fix is simple enough.
You simply do not run into it because on your machine
is_ llc_occupancy_ enabled( ) is false...
Thanks,
tglx
8<----- ------- ------- -
diff --git a/arch/ x86/kernel/ cpu/intel_ rdt.c b/arch/ x86/kernel/ cpu/intel_ rdt.c .99442370de40 100644 x86/kernel/ cpu/intel_ rdt.c x86/kernel/ cpu/intel_ rdt.c remove_ cpu(int cpu, struct rdt_resource *r) branch_ unlikely( &rdt_mon_ enable_ key)) mondata_ subdir_ allrdtgrp( r, d->id); >rmid_busy_ llc); >mbm_total) ; >mbm_local) ; del(&d- >list); delayed_ work(&d- >mbm_over) ; remove_ cpu(int cpu, struct rdt_resource *r) delayed_ work(&d- >cqm_limbo) ;
index 88dcf8479013.
--- a/arch/
+++ b/arch/
@@ -525,10 +525,6 @@ static void domain_
*/
if (static_
rmdir_
- kfree(d->ctrl_val);
- kfree(d-
- kfree(d-
- kfree(d-
list_
if (is_mbm_enabled())
cancel_
@@ -545,6 +541,10 @@ static void domain_
cancel_
}
+ kfree(d->ctrl_val); >rmid_busy_ llc); >mbm_total) ; >mbm_local) ;
+ kfree(d-
+ kfree(d-
+ kfree(d-
kfree(d);
return;
}