|
@@ -3427,6 +3427,16 @@ static int redist_disable_lpis(void)
|
|
u64 timeout = USEC_PER_SEC;
|
|
u64 timeout = USEC_PER_SEC;
|
|
u64 val;
|
|
u64 val;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * If coming via a CPU hotplug event, we don't need to disable
|
|
|
|
+ * LPIs before trying to re-enable them. They are already
|
|
|
|
+ * configured and all is well in the world. Detect this case
|
|
|
|
+ * by checking the allocation of the pending table for the
|
|
|
|
+ * current CPU.
|
|
|
|
+ */
|
|
|
|
+ if (gic_data_rdist()->pend_page)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (!gic_rdists_supports_plpis()) {
|
|
if (!gic_rdists_supports_plpis()) {
|
|
pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
|
|
pr_info("CPU%d: LPIs not supported\n", smp_processor_id());
|
|
return -ENXIO;
|
|
return -ENXIO;
|