Commit c2f4fce5 authored by Michael Ellerman's avatar Michael Ellerman Committed by Juerg Haefliger

UBUNTU: SAUCE: rfi-flush: Make it possible to call setup_rfi_flush() again

BugLink: https://bugs.launchpad.net/bugs/1744173

For PowerVM migration we want to be able to call setup_rfi_flush()
again after we've migrated the partition.

To support that we need to check that we're not trying to allocate the
fallback flush area after memblock has gone away. If so we just fail,
we don't support migrating from a patched to an unpatched machine. Or
we do support it, but there will be no RFI flush enabled on the
destination.
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarBreno Leitao <brenohl@br.ibm.com>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
Acked-by: default avatarAndy Whitcroft <apw@canonical.com>
Acked-by: default avatarKhalid Elmously <khalid.elmously@canonical.com>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
parent e23e24ae
......@@ -961,14 +961,22 @@ void setup_stf_barrier(void)
stf_barrier_enable(enable);
}
static void init_fallback_flush(void)
static bool init_fallback_flush(void)
{
u64 l1d_size, limit;
int cpu;
/* Only allocate the fallback flush area once (at boot time). */
if (l1d_flush_fallback_area)
return;
return true;
/*
* Once the slab allocator is up it's too late to allocate the fallback
* flush area, so return an error. This could happen if we migrated from
* a patched machine to an unpatched machine.
*/
if (slab_is_available())
return false;
l1d_size = ppc64_caches.dsize;
limit = min(safe_stack_limit(), ppc64_rma_size);
......@@ -985,13 +993,19 @@ static void init_fallback_flush(void)
paca[cpu].rfi_flush_fallback_area = l1d_flush_fallback_area;
paca[cpu].l1d_flush_size = l1d_size;
}
return true;
}
void setup_rfi_flush(enum l1d_flush_type types, bool enable)
{
if (types & L1D_FLUSH_FALLBACK) {
pr_info("rfi-flush: fallback displacement flush available\n");
init_fallback_flush();
if (init_fallback_flush())
pr_info("rfi-flush: Using fallback displacement flush\n");
else {
pr_warn("rfi-flush: Error unable to use fallback displacement flush!\n");
types &= ~L1D_FLUSH_FALLBACK;
}
}
if (types & L1D_FLUSH_ORI)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment