On 14.02.2024 13:11, Oleksii wrote: > On Tue, 2024-02-13 at 12:36 +0100, Jan Beulich wrote: >> On 05.02.2024 16:32, Oleksii Kurochko wrote: >>> --- /dev/null >>> +++ b/xen/arch/riscv/include/asm/atomic.h >>> @@ -0,0 +1,395 @@ >>> +/* SPDX-License-Identifier: GPL-2.0-only */ >>> +/* >>> + * Taken and modified from Linux. >>> + * >>> + * atomic##prefix##_*xchg_*(atomic##prefix##_t *v, c_t n) were >>> updated to use >>> + * __*xchg_generic() >>> + * >>> + * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. >>> + * Copyright (C) 2012 Regents of the University of California >>> + * Copyright (C) 2017 SiFive >>> + * Copyright (C) 2021 Vates SAS >>> + */ >>> + >>> +#ifndef _ASM_RISCV_ATOMIC_H >>> +#define _ASM_RISCV_ATOMIC_H >>> + >>> +#include <xen/atomic.h> >>> +#include <asm/cmpxchg.h> >>> +#include <asm/fence.h> >>> +#include <asm/io.h> >>> +#include <asm/system.h> >>> + >>> +void __bad_atomic_size(void); >>> + >>> +static always_inline void read_atomic_size(const volatile void *p, >>> + void *res, >>> + unsigned int size) >>> +{ >>> + switch ( size ) >>> + { >>> + case 1: *(uint8_t *)res = readb(p); break; >>> + case 2: *(uint16_t *)res = readw(p); break; >>> + case 4: *(uint32_t *)res = readl(p); break; >>> + case 8: *(uint32_t *)res = readq(p); break; >> >> Why is it the MMIO primitives you use here, i.e. not read<X>_cpu()? >> It's RAM you're accessing after all. > Legacy from Linux kernel. For some reason they wanted to have ordered > read/write access.
Wants expressing in a comment then, or at the very least in the patch description. Jan