diff options
author | Alexey Kardashevskiy <aik@ozlabs.ru> | 2019-07-18 15:11:36 +1000 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2019-08-19 13:20:23 +1000 |
commit | 56090a3902c80c296e822d11acdb6a101b322c52 (patch) | |
tree | e28bf46263ab7b6f0a9dd4fb6a40c0b0959be343 /arch/powerpc/sysdev/dart_iommu.c | |
parent | c784be435d5dae28d3b03db31753dd7a18733f0c (diff) | |
download | linux-56090a3902c80c296e822d11acdb6a101b322c52.tar.gz linux-56090a3902c80c296e822d11acdb6a101b322c52.tar.bz2 linux-56090a3902c80c296e822d11acdb6a101b322c52.zip |
powerpc/powernv/ioda: Fix race in TCE level allocation
pnv_tce() returns a pointer to a TCE entry and originally a TCE table
would be pre-allocated. For the default case of 2GB window the table
needs only a single level and that is fine. However if more levels are
requested, it is possible to get a race when 2 threads want a pointer
to a TCE entry from the same page of TCEs.
This adds cmpxchg to handle the race. Note that once TCE is non-zero,
it cannot become zero again.
Fixes: a68bd1267b72 ("powerpc/powernv/ioda: Allocate indirect TCE levels on demand")
CC: stable@vger.kernel.org # v4.19+
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190718051139.74787-2-aik@ozlabs.ru
Diffstat (limited to 'arch/powerpc/sysdev/dart_iommu.c')
0 files changed, 0 insertions, 0 deletions