5a358b39f5
If QEMU is compiled with clang-7 it results in the warning: hw/display/qxl.c:1884:19: error: misaligned or large atomic operation may incur significant performance penalty [-Werror,-Watomic-alignment] old_pending = atomic_fetch_or(&d->ram->int_pending, le_events); ^ This is because the Spice headers forgot to define the QXLRam struct with the '__aligned__(4)' attribute. clang 7 and newer will thus warn that the access here to int_pending might not be 4-aligned (because the QXLRam object d->ram points at might start at a misaligned address). In fact we set up d->ram in init_qxl_ram() so it always starts at a 4K boundary, so we know the atomic access here is OK. Newer Spice versions (with Spice commit beda5ec7a6848be20c0cac2a9a8ef2a41e8069c1) will fix the bug; for older Spice versions, work around it by telling the compiler explicitly that the alignment is OK using __builtin_assume_aligned(). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20180927155538.699-1-peter.maydell@linaro.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> |
||
---|---|---|
.. | ||
acl.h | ||
atomic.h | ||
base64.h | ||
bcd.h | ||
bitmap.h | ||
bitops.h | ||
bswap.h | ||
buffer.h | ||
compiler.h | ||
config-file.h | ||
coroutine_int.h | ||
coroutine.h | ||
cpuid.h | ||
crc32c.h | ||
cutils.h | ||
drm.h | ||
envlist.h | ||
error-report.h | ||
event_notifier.h | ||
fifo8.h | ||
fifo32.h | ||
fprintf-fn.h | ||
futex.h | ||
hbitmap.h | ||
help_option.h | ||
host-utils.h | ||
id.h | ||
int128.h | ||
iov.h | ||
iova-tree.h | ||
jhash.h | ||
job.h | ||
lockable.h | ||
log-for-trace.h | ||
log.h | ||
main-loop.h | ||
memfd.h | ||
mmap-alloc.h | ||
module.h | ||
notify.h | ||
option_int.h | ||
option.h | ||
osdep.h | ||
path.h | ||
pmem.h | ||
processor.h | ||
qdist.h | ||
qht.h | ||
qsp.h | ||
queue.h | ||
range.h | ||
ratelimit.h | ||
rcu_queue.h | ||
rcu.h | ||
readline.h | ||
seqlock.h | ||
sockets.h | ||
stats64.h | ||
sys_membarrier.h | ||
systemd.h | ||
thread-posix.h | ||
thread-win32.h | ||
thread.h | ||
throttle-options.h | ||
throttle.h | ||
timed-average.h | ||
timer.h | ||
typedefs.h | ||
unicode.h | ||
units.h | ||
uri.h | ||
uuid.h | ||
vfio-helpers.h | ||
win_dump_defs.h | ||
xattr.h |