lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d9942e20-3c40-934e-9685-f63b4bedd95e@loongson.cn>
Date:   Fri, 16 Jun 2023 11:52:49 +0800
From:   zhaotianrui <zhaotianrui@...ngson.cn>
To:     Huacai Chen <chenhuacai@...nel.org>
Cc:     linux-kernel@...r.kernel.org, kvm@...r.kernel.org,
        Paolo Bonzini <pbonzini@...hat.com>,
        WANG Xuerui <kernel@...0n.name>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        loongarch@...ts.linux.dev, Jens Axboe <axboe@...nel.dk>,
        Mark Brown <broonie@...nel.org>,
        Alex Deucher <alexander.deucher@....com>,
        Oliver Upton <oliver.upton@...ux.dev>, maobibo@...ngson.cn,
        Xi Ruoyao <xry111@...111.site>, tangyouling@...ngson.cn
Subject: Re: [PATCH v13 29/30] LoongArch: KVM: Supplement kvm document about
 LoongArch-specific part


在 2023/6/16 上午10:59, Huacai Chen 写道:
> On Fri, Jun 16, 2023 at 10:39 AM zhaotianrui <zhaotianrui@...ngson.cn> wrote:
>>
>> 在 2023/6/15 下午5:42, Huacai Chen 写道:
>>> Hi, Tianrui,
>>>
>>> On Fri, Jun 9, 2023 at 5:09 PM Tianrui Zhao <zhaotianrui@...ngson.cn> wrote:
>>>> Supplement kvm document about LoongArch-specific part, such as add
>>>> api introduction for GET/SET_ONE_REG, GET/SET_FPU, GET/SET_MP_STATE,
>>>> etc.
>>>>
>>>> Signed-off-by: Tianrui Zhao <zhaotianrui@...ngson.cn>
>>>> ---
>>>>    Documentation/virt/kvm/api.rst | 71 +++++++++++++++++++++++++++++-----
>>>>    1 file changed, 62 insertions(+), 9 deletions(-)
>>>>
>>>> diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
>>>> index add067793b90..ad8e13eab48d 100644
>>>> --- a/Documentation/virt/kvm/api.rst
>>>> +++ b/Documentation/virt/kvm/api.rst
>>>> @@ -416,6 +416,12 @@ Reads the general purpose registers from the vcpu.
>>>>           __u64 pc;
>>>>      };
>>>>
>>>> +  /* LoongArch */
>>>> +  struct kvm_regs {
>>> Add a " /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */" line as others here?
>> Thanks, I will add this comment here.
>>
>> Tianrui Zhao
>>
>>>> +        unsigned long gpr[32];
>>>> +        unsigned long pc;
>>>> +  };
>>>> +
>>>>
>>>>    4.12 KVM_SET_REGS
>>>>    -----------------
>>>> @@ -506,7 +512,7 @@ translation mode.
>>>>    ------------------
>>>>
>>>>    :Capability: basic
>>>> -:Architectures: x86, ppc, mips, riscv
>>>> +:Architectures: x86, ppc, mips, riscv, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_interrupt (in)
>>>>    :Returns: 0 on success, negative on failure.
>>>> @@ -592,6 +598,14 @@ b) KVM_INTERRUPT_UNSET
>>>>
>>>>    This is an asynchronous vcpu ioctl and can be invoked from any thread.
>>>>
>>>> +LOONGARCH:
>>>> +^^^^^^^^^^
>>>> +
>>>> +Queues an external interrupt to be injected into the virtual CPU. A negative
>>>> +interrupt number dequeues the interrupt.
>>>> +
>>>> +This is an asynchronous vcpu ioctl and can be invoked from any thread.
>>>> +
>>>>
>>>>    4.17 KVM_DEBUG_GUEST
>>>>    --------------------
>>>> @@ -737,7 +751,7 @@ signal mask.
>>>>    ----------------
>>>>
>>>>    :Capability: basic
>>>> -:Architectures: x86
>>>> +:Architectures: x86, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_fpu (out)
>>>>    :Returns: 0 on success, -1 on error
>>>> @@ -746,7 +760,7 @@ Reads the floating point state from the vcpu.
>>>>
>>>>    ::
>>>>
>>>> -  /* for KVM_GET_FPU and KVM_SET_FPU */
>>>> +  /* x86: for KVM_GET_FPU and KVM_SET_FPU */
>>>>      struct kvm_fpu {
>>>>           __u8  fpr[8][16];
>>>>           __u16 fcw;
>>>> @@ -761,12 +775,22 @@ Reads the floating point state from the vcpu.
>>>>           __u32 pad2;
>>>>      };
>>>>
>>>> +  /* LoongArch: for KVM_GET_FPU and KVM_SET_FPU */
>>>> +  struct kvm_fpu {
>>>> +        __u32 fcsr;
>>>> +        __u32 none;
>>> Maybe use pad1 as x86 is better.
>>>
>>> Huacai
>> Thanks, this 'none' variable is meaningless, and I will remove it. As
>> this have already been removed in the actually kvm_fpu structure.
> Why remove? I think it is for alignment, just like pad1 for x86.
>
> Huacai

This 'none' variable is not for alignment but a unused register named 
vcsr in kvm_fpu, so I think it could be removed.

Tianrui Zhao

>> Tianrui Zhao
>>
>>>> +        __u64 fcc;
>>>> +        struct kvm_fpureg {
>>>> +                __u64 val64[4];
>>>> +        }fpr[32];
>>>> +  };
>>>> +
>>>>
>>>>    4.23 KVM_SET_FPU
>>>>    ----------------
>>>>
>>>>    :Capability: basic
>>>> -:Architectures: x86
>>>> +:Architectures: x86, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_fpu (in)
>>>>    :Returns: 0 on success, -1 on error
>>>> @@ -775,7 +799,7 @@ Writes the floating point state to the vcpu.
>>>>
>>>>    ::
>>>>
>>>> -  /* for KVM_GET_FPU and KVM_SET_FPU */
>>>> +  /* x86: for KVM_GET_FPU and KVM_SET_FPU */
>>>>      struct kvm_fpu {
>>>>           __u8  fpr[8][16];
>>>>           __u16 fcw;
>>>> @@ -790,6 +814,16 @@ Writes the floating point state to the vcpu.
>>>>           __u32 pad2;
>>>>      };
>>>>
>>>> +  /* LoongArch: for KVM_GET_FPU and KVM_SET_FPU */
>>>> +  struct kvm_fpu {
>>>> +        __u32 fcsr;
>>>> +        __u32 none;
>> I will also remove this 'none' variable.
>>
>> Tianrui Zhao
>>
>>>> +        __u64 fcc;
>>>> +        struct kvm_fpureg {
>>>> +                __u64 val64[4];
>>>> +        }fpr[32];
>>>> +  };
>>>> +
>>>>
>>>>    4.24 KVM_CREATE_IRQCHIP
>>>>    -----------------------
>>>> @@ -1387,7 +1421,7 @@ documentation when it pops into existence).
>>>>    -------------------
>>>>
>>>>    :Capability: KVM_CAP_ENABLE_CAP
>>>> -:Architectures: mips, ppc, s390, x86
>>>> +:Architectures: mips, ppc, s390, x86, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_enable_cap (in)
>>>>    :Returns: 0 on success; -1 on error
>>>> @@ -1442,7 +1476,7 @@ for vm-wide capabilities.
>>>>    ---------------------
>>>>
>>>>    :Capability: KVM_CAP_MP_STATE
>>>> -:Architectures: x86, s390, arm64, riscv
>>>> +:Architectures: x86, s390, arm64, riscv, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_mp_state (out)
>>>>    :Returns: 0 on success; -1 on error
>>>> @@ -1460,7 +1494,7 @@ Possible values are:
>>>>
>>>>       ==========================    ===============================================
>>>>       KVM_MP_STATE_RUNNABLE         the vcpu is currently running
>>>> -                                 [x86,arm64,riscv]
>>>> +                                 [x86,arm64,riscv,loongarch]
>>>>       KVM_MP_STATE_UNINITIALIZED    the vcpu is an application processor (AP)
>>>>                                     which has not yet received an INIT signal [x86]
>>>>       KVM_MP_STATE_INIT_RECEIVED    the vcpu has received an INIT signal, and is
>>>> @@ -1516,11 +1550,14 @@ For riscv:
>>>>    The only states that are valid are KVM_MP_STATE_STOPPED and
>>>>    KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not.
>>>>
>>>> +On LoongArch, only the KVM_MP_STATE_RUNNABLE state is used to reflect
>>>> +whether the vcpu is runnable.
>>>> +
>>>>    4.39 KVM_SET_MP_STATE
>>>>    ---------------------
>>>>
>>>>    :Capability: KVM_CAP_MP_STATE
>>>> -:Architectures: x86, s390, arm64, riscv
>>>> +:Architectures: x86, s390, arm64, riscv, loongarch
>>>>    :Type: vcpu ioctl
>>>>    :Parameters: struct kvm_mp_state (in)
>>>>    :Returns: 0 on success; -1 on error
>>>> @@ -1538,6 +1575,9 @@ For arm64/riscv:
>>>>    The only states that are valid are KVM_MP_STATE_STOPPED and
>>>>    KVM_MP_STATE_RUNNABLE which reflect if the vcpu should be paused or not.
>>>>
>>>> +On LoongArch, only the KVM_MP_STATE_RUNNABLE state is used to reflect
>>>> +whether the vcpu is runnable.
>>>> +
>>>>    4.40 KVM_SET_IDENTITY_MAP_ADDR
>>>>    ------------------------------
>>>>
>>>> @@ -2839,6 +2879,19 @@ Following are the RISC-V D-extension registers:
>>>>      0x8020 0000 0600 0020 fcsr      Floating point control and status register
>>>>    ======================= ========= =============================================
>>>>
>>>> +LoongArch registers are mapped using the lower 32 bits. The upper 16 bits of
>>>> +that is the register group type.
>>>> +
>>>> +LoongArch csr registers are used to control guest cpu or get status of guest
>>>> +cpu, and they have the following id bit patterns::
>>>> +
>>>> +  0x9030 0000 0001 00 <reg:5> <sel:3>   (64-bit)
>>>> +
>>>> +LoongArch KVM control registers are used to implement some new defined functions
>>>> +such as set vcpu counter or reset vcpu, and they have the following id bit patterns::
>>>> +
>>>> +  0x9030 0000 0002 <reg:16>
>>>> +
>>>>
>>>>    4.69 KVM_GET_ONE_REG
>>>>    --------------------
>>>> --
>>>> 2.39.1
>>>>
>>>>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ