* [PULL 0/3] loongarch-to-apply queue @ 2024-05-09 8:06 Song Gao 2024-05-09 8:06 ` [PULL 1/3] hw/loongarch: Refine default numa id calculation Song Gao ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Song Gao @ 2024-05-09 8:06 UTC (permalink / raw) To: qemu-devel; +Cc: richard.henderson The following changes since commit 4e66a08546a2588a4667766a1edab9caccf24ce3: Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging (2024-05-07 09:26:30 -0700) are available in the Git repository at: https://gitlab.com/gaosong/qemu.git tags/pull-loongarch-20240509 for you to fetch changes up to 5872966db7abaa7f8753541b7a9f242df9752b50: target/loongarch: Put cpucfg operation before CSR register (2024-05-09 15:19:22 +0800) ---------------------------------------------------------------- pull-loongarch-20240509 ---------------------------------------------------------------- Bibo Mao (3): hw/loongarch: Refine default numa id calculation target/loongarch: Add TCG macro in structure CPUArchState target/loongarch: Put cpucfg operation before CSR register hw/loongarch/virt.c | 11 +++++------ target/loongarch/cpu.c | 7 +++++-- target/loongarch/cpu.h | 16 ++++++++++------ target/loongarch/cpu_helper.c | 9 +++++++++ target/loongarch/kvm/kvm.c | 16 ++++++++-------- target/loongarch/machine.c | 30 +++++++++++++++++++++++++----- 6 files changed, 62 insertions(+), 27 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PULL 1/3] hw/loongarch: Refine default numa id calculation 2024-05-09 8:06 [PULL 0/3] loongarch-to-apply queue Song Gao @ 2024-05-09 8:06 ` Song Gao 2024-05-09 8:06 ` [PULL 2/3] target/loongarch: Add TCG macro in structure CPUArchState Song Gao ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Song Gao @ 2024-05-09 8:06 UTC (permalink / raw) To: qemu-devel; +Cc: richard.henderson, Bibo Mao From: Bibo Mao <maobibo@loongson.cn> With numa_test test case, there is subcase named test_def_cpu_split(), there are 8 sockets and 2 numa nodes. Here is command line: "-machine smp.cpus=8,smp.sockets=8 -numa node,memdev=ram -numa node" The required result is: node 0 cpus: 0 2 4 6 node 1 cpus: 1 3 5 7 Test case numa_test fails on LoongArch, since the actual result is: node 0 cpus: 0 1 2 3 node 1 cpus: 4 5 6 7 It will be better if all the cpus in one socket share the same numa node. Here socket id is used to calculate numa id in function virt_get_default_cpu_node_id(). Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn> Message-Id: <20240319022606.2994565-1-maobibo@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn> --- hw/loongarch/virt.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index c0999878df..12d20055fe 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -1192,15 +1192,14 @@ virt_cpu_index_to_props(MachineState *ms, unsigned cpu_index) static int64_t virt_get_default_cpu_node_id(const MachineState *ms, int idx) { - int64_t nidx = 0; + int64_t socket_id; if (ms->numa_state->num_nodes) { - nidx = idx / (ms->smp.cpus / ms->numa_state->num_nodes); - if (ms->numa_state->num_nodes <= nidx) { - nidx = ms->numa_state->num_nodes - 1; - } + socket_id = ms->possible_cpus->cpus[idx].props.socket_id; + return socket_id % ms->numa_state->num_nodes; + } else { + return 0; } - return nidx; } static void loongarch_class_init(ObjectClass *oc, void *data) -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PULL 2/3] target/loongarch: Add TCG macro in structure CPUArchState 2024-05-09 8:06 [PULL 0/3] loongarch-to-apply queue Song Gao 2024-05-09 8:06 ` [PULL 1/3] hw/loongarch: Refine default numa id calculation Song Gao @ 2024-05-09 8:06 ` Song Gao 2024-05-09 8:06 ` [PULL 3/3] target/loongarch: Put cpucfg operation before CSR register Song Gao 2024-05-10 5:39 ` [PULL 0/3] loongarch-to-apply queue Richard Henderson 3 siblings, 0 replies; 7+ messages in thread From: Song Gao @ 2024-05-09 8:06 UTC (permalink / raw) To: qemu-devel; +Cc: richard.henderson, Bibo Mao From: Bibo Mao <maobibo@loongson.cn> In structure CPUArchState some struct elements are only used in TCG mode, and it is not used in KVM mode. Macro CONFIG_TCG is added to make it simpiler in KVM mode, also there is the same modification in c code when these structure elements are used. When VM runs in KVM mode, TLB entries are not used and do not need migrate. It is only useful when it runs in TCG mode. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20240506011912.2108842-1-maobibo@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn> --- target/loongarch/cpu.c | 7 +++++-- target/loongarch/cpu.h | 16 ++++++++++------ target/loongarch/cpu_helper.c | 9 +++++++++ target/loongarch/machine.c | 30 +++++++++++++++++++++++++----- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c index 96da1a685e..a0cad53676 100644 --- a/target/loongarch/cpu.c +++ b/target/loongarch/cpu.c @@ -505,7 +505,9 @@ static void loongarch_cpu_reset_hold(Object *obj, ResetType type) lacc->parent_phases.hold(obj, type); } +#ifdef CONFIG_TCG env->fcsr0_mask = FCSR0_M1 | FCSR0_M2 | FCSR0_M3; +#endif env->fcsr0 = 0x0; int n; @@ -550,7 +552,9 @@ static void loongarch_cpu_reset_hold(Object *obj, ResetType type) #ifndef CONFIG_USER_ONLY env->pc = 0x1c000000; +#ifdef CONFIG_TCG memset(env->tlb, 0, sizeof(env->tlb)); +#endif if (kvm_enabled()) { kvm_arch_reset_vcpu(env); } @@ -686,8 +690,7 @@ void loongarch_cpu_dump_state(CPUState *cs, FILE *f, int flags) int i; qemu_fprintf(f, " PC=%016" PRIx64 " ", env->pc); - qemu_fprintf(f, " FCSR0 0x%08x fp_status 0x%02x\n", env->fcsr0, - get_float_exception_flags(&env->fp_status)); + qemu_fprintf(f, " FCSR0 0x%08x\n", env->fcsr0); /* gpr */ for (i = 0; i < 32; i++) { diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h index c5722670f5..41b8e6d96d 100644 --- a/target/loongarch/cpu.h +++ b/target/loongarch/cpu.h @@ -270,6 +270,7 @@ union fpr_t { VReg vreg; }; +#ifdef CONFIG_TCG struct LoongArchTLB { uint64_t tlb_misc; /* Fields corresponding to CSR_TLBELO0/1 */ @@ -277,23 +278,18 @@ struct LoongArchTLB { uint64_t tlb_entry1; }; typedef struct LoongArchTLB LoongArchTLB; +#endif typedef struct CPUArchState { uint64_t gpr[32]; uint64_t pc; fpr_t fpr[32]; - float_status fp_status; bool cf[8]; - uint32_t fcsr0; - uint32_t fcsr0_mask; uint32_t cpucfg[21]; - uint64_t lladdr; /* LL virtual address compared against SC */ - uint64_t llval; - /* LoongArch CSRs */ uint64_t CSR_CRMD; uint64_t CSR_PRMD; @@ -350,8 +346,16 @@ typedef struct CPUArchState { uint64_t CSR_DERA; uint64_t CSR_DSAVE; +#ifdef CONFIG_TCG + float_status fp_status; + uint32_t fcsr0_mask; + uint64_t lladdr; /* LL virtual address compared against SC */ + uint64_t llval; +#endif #ifndef CONFIG_USER_ONLY +#ifdef CONFIG_TCG LoongArchTLB tlb[LOONGARCH_TLB_MAX]; +#endif AddressSpace *address_space_iocsr; bool load_elf; diff --git a/target/loongarch/cpu_helper.c b/target/loongarch/cpu_helper.c index 960eec9567..580362ac3e 100644 --- a/target/loongarch/cpu_helper.c +++ b/target/loongarch/cpu_helper.c @@ -11,6 +11,7 @@ #include "internals.h" #include "cpu-csr.h" +#ifdef CONFIG_TCG static int loongarch_map_tlb_entry(CPULoongArchState *env, hwaddr *physical, int *prot, target_ulong address, int access_type, int index, int mmu_idx) @@ -154,6 +155,14 @@ static int loongarch_map_address(CPULoongArchState *env, hwaddr *physical, return TLBRET_NOMATCH; } +#else +static int loongarch_map_address(CPULoongArchState *env, hwaddr *physical, + int *prot, target_ulong address, + MMUAccessType access_type, int mmu_idx) +{ + return TLBRET_NOMATCH; +} +#endif static hwaddr dmw_va2pa(CPULoongArchState *env, target_ulong va, target_ulong dmw) diff --git a/target/loongarch/machine.c b/target/loongarch/machine.c index c7029fb9b4..9cd9e848d6 100644 --- a/target/loongarch/machine.c +++ b/target/loongarch/machine.c @@ -8,6 +8,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "migration/cpu.h" +#include "sysemu/tcg.h" #include "vec.h" static const VMStateDescription vmstate_fpu_reg = { @@ -109,9 +110,15 @@ static const VMStateDescription vmstate_lasx = { }, }; +#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY) +static bool tlb_needed(void *opaque) +{ + return tcg_enabled(); +} + /* TLB state */ -const VMStateDescription vmstate_tlb = { - .name = "cpu/tlb", +static const VMStateDescription vmstate_tlb_entry = { + .name = "cpu/tlb_entry", .version_id = 0, .minimum_version_id = 0, .fields = (const VMStateField[]) { @@ -122,6 +129,19 @@ const VMStateDescription vmstate_tlb = { } }; +static const VMStateDescription vmstate_tlb = { + .name = "cpu/tlb", + .version_id = 0, + .minimum_version_id = 0, + .needed = tlb_needed, + .fields = (const VMStateField[]) { + VMSTATE_STRUCT_ARRAY(env.tlb, LoongArchCPU, LOONGARCH_TLB_MAX, + 0, vmstate_tlb_entry, LoongArchTLB), + VMSTATE_END_OF_LIST() + } +}; +#endif + /* LoongArch CPU state */ const VMStateDescription vmstate_loongarch_cpu = { .name = "cpu", @@ -187,9 +207,6 @@ const VMStateDescription vmstate_loongarch_cpu = { VMSTATE_UINT64(env.CSR_DBG, LoongArchCPU), VMSTATE_UINT64(env.CSR_DERA, LoongArchCPU), VMSTATE_UINT64(env.CSR_DSAVE, LoongArchCPU), - /* TLB */ - VMSTATE_STRUCT_ARRAY(env.tlb, LoongArchCPU, LOONGARCH_TLB_MAX, - 0, vmstate_tlb, LoongArchTLB), VMSTATE_END_OF_LIST() }, @@ -197,6 +214,9 @@ const VMStateDescription vmstate_loongarch_cpu = { &vmstate_fpu, &vmstate_lsx, &vmstate_lasx, +#if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY) + &vmstate_tlb, +#endif NULL } }; -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PULL 3/3] target/loongarch: Put cpucfg operation before CSR register 2024-05-09 8:06 [PULL 0/3] loongarch-to-apply queue Song Gao 2024-05-09 8:06 ` [PULL 1/3] hw/loongarch: Refine default numa id calculation Song Gao 2024-05-09 8:06 ` [PULL 2/3] target/loongarch: Add TCG macro in structure CPUArchState Song Gao @ 2024-05-09 8:06 ` Song Gao 2024-05-10 5:39 ` [PULL 0/3] loongarch-to-apply queue Richard Henderson 3 siblings, 0 replies; 7+ messages in thread From: Song Gao @ 2024-05-09 8:06 UTC (permalink / raw) To: qemu-devel; +Cc: richard.henderson, Bibo Mao From: Bibo Mao <maobibo@loongson.cn> On Loongarch, cpucfg is register for cpu feature, some other registers depend on cpucfg feature such as perf CSR registers. Here put cpucfg read/write operations before CSR register, so that KVM knows how many perf CSR registers are valid from pre-set cpucfg feature information. Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Song Gao <gaosong@loongson.cn> Message-Id: <20240428031651.1354587-1-maobibo@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn> --- target/loongarch/kvm/kvm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 8224d94333..bc75552d0f 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -587,22 +587,22 @@ int kvm_arch_get_registers(CPUState *cs) return ret; } - ret = kvm_loongarch_get_csr(cs); + ret = kvm_loongarch_get_cpucfg(cs); if (ret) { return ret; } - ret = kvm_loongarch_get_regs_fp(cs); + ret = kvm_loongarch_get_csr(cs); if (ret) { return ret; } - ret = kvm_loongarch_get_mpstate(cs); + ret = kvm_loongarch_get_regs_fp(cs); if (ret) { return ret; } - ret = kvm_loongarch_get_cpucfg(cs); + ret = kvm_loongarch_get_mpstate(cs); return ret; } @@ -615,22 +615,22 @@ int kvm_arch_put_registers(CPUState *cs, int level) return ret; } - ret = kvm_loongarch_put_csr(cs, level); + ret = kvm_loongarch_put_cpucfg(cs); if (ret) { return ret; } - ret = kvm_loongarch_put_regs_fp(cs); + ret = kvm_loongarch_put_csr(cs, level); if (ret) { return ret; } - ret = kvm_loongarch_put_mpstate(cs); + ret = kvm_loongarch_put_regs_fp(cs); if (ret) { return ret; } - ret = kvm_loongarch_put_cpucfg(cs); + ret = kvm_loongarch_put_mpstate(cs); return ret; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PULL 0/3] loongarch-to-apply queue 2024-05-09 8:06 [PULL 0/3] loongarch-to-apply queue Song Gao ` (2 preceding siblings ...) 2024-05-09 8:06 ` [PULL 3/3] target/loongarch: Put cpucfg operation before CSR register Song Gao @ 2024-05-10 5:39 ` Richard Henderson 3 siblings, 0 replies; 7+ messages in thread From: Richard Henderson @ 2024-05-10 5:39 UTC (permalink / raw) To: Song Gao, qemu-devel On 5/9/24 10:06, Song Gao wrote: > The following changes since commit 4e66a08546a2588a4667766a1edab9caccf24ce3: > > Merge tag 'for-upstream' ofhttps://gitlab.com/bonzini/qemu into staging (2024-05-07 09:26:30 -0700) > > are available in the Git repository at: > > https://gitlab.com/gaosong/qemu.git tags/pull-loongarch-20240509 > > for you to fetch changes up to 5872966db7abaa7f8753541b7a9f242df9752b50: > > target/loongarch: Put cpucfg operation before CSR register (2024-05-09 15:19:22 +0800) > > ---------------------------------------------------------------- > pull-loongarch-20240509 Applied, thanks. Please update https://wiki.qemu.org/ChangeLog/9.1 as appropriate. r~ ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PULL 0/3] loongarch-to-apply queue @ 2023-01-06 6:33 Song Gao 2023-01-07 21:29 ` Peter Maydell 0 siblings, 1 reply; 7+ messages in thread From: Song Gao @ 2023-01-06 6:33 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, richard.henderson The following changes since commit d1852caab131ea898134fdcea8c14bc2ee75fbe9: Merge tag 'python-pull-request' of https://gitlab.com/jsnow/qemu into staging (2023-01-05 16:59:22 +0000) are available in the Git repository at: https://gitlab.com/gaosong/qemu.git pull-loongarch-20230106 for you to fetch changes up to f4d10ce8aa545266a0b6df223a7f8ea2afca18b2: hw/intc/loongarch_pch: Change default irq number of pch irq controller (2023-01-06 14:12:43 +0800) ---------------------------------------------------------------- Add irq number property for loongarch pch interrupt controller ---------------------------------------------------------------- Tianrui Zhao (3): hw/intc/loongarch_pch_msi: add irq number property hw/intc/loongarch_pch_pic: add irq number property hw/intc/loongarch_pch: Change default irq number of pch irq controller hw/intc/loongarch_pch_msi.c | 29 ++++++++++++++++++++++++++--- hw/intc/loongarch_pch_pic.c | 35 +++++++++++++++++++++++++++++++---- hw/loongarch/virt.c | 19 ++++++++++++------- include/hw/intc/loongarch_pch_msi.h | 9 +++++---- include/hw/intc/loongarch_pch_pic.h | 6 ++---- include/hw/pci-host/ls7a.h | 2 +- 6 files changed, 77 insertions(+), 23 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PULL 0/3] loongarch-to-apply queue 2023-01-06 6:33 Song Gao @ 2023-01-07 21:29 ` Peter Maydell 0 siblings, 0 replies; 7+ messages in thread From: Peter Maydell @ 2023-01-07 21:29 UTC (permalink / raw) To: Song Gao; +Cc: qemu-devel, richard.henderson On Fri, 6 Jan 2023 at 06:33, Song Gao <gaosong@loongson.cn> wrote: > > The following changes since commit d1852caab131ea898134fdcea8c14bc2ee75fbe9: > > Merge tag 'python-pull-request' of https://gitlab.com/jsnow/qemu into staging (2023-01-05 16:59:22 +0000) > > are available in the Git repository at: > > https://gitlab.com/gaosong/qemu.git pull-loongarch-20230106 > > for you to fetch changes up to f4d10ce8aa545266a0b6df223a7f8ea2afca18b2: > > hw/intc/loongarch_pch: Change default irq number of pch irq controller (2023-01-06 14:12:43 +0800) > > ---------------------------------------------------------------- > > Add irq number property for loongarch pch interrupt controller > > ---------------------------------------------------------------- Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/8.0 for any user-visible changes. -- PMM ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-05-10 5:40 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-05-09 8:06 [PULL 0/3] loongarch-to-apply queue Song Gao 2024-05-09 8:06 ` [PULL 1/3] hw/loongarch: Refine default numa id calculation Song Gao 2024-05-09 8:06 ` [PULL 2/3] target/loongarch: Add TCG macro in structure CPUArchState Song Gao 2024-05-09 8:06 ` [PULL 3/3] target/loongarch: Put cpucfg operation before CSR register Song Gao 2024-05-10 5:39 ` [PULL 0/3] loongarch-to-apply queue Richard Henderson -- strict thread matches above, loose matches on Subject: below -- 2023-01-06 6:33 Song Gao 2023-01-07 21:29 ` Peter Maydell
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.