qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 0/3] Introduce CXL type-2 device emulation


From: Zhi Wang
Subject: Re: [PATCH 0/3] Introduce CXL type-2 device emulation
Date: Fri, 31 Jan 2025 10:37:03 +0000

On 21/01/2025 17.34, Jonathan Cameron wrote:
> On Thu, 12 Dec 2024 18:10:10 +0000
> Zhi Wang <zhiw@nvidia.com> wrote:
> 
>> On 12/12/2024 18.49, Alejandro Lucero Palau wrote:
>>>
>>> On 12/12/24 13:04, Zhi Wang wrote:
>>>> Hi folks:
>>>>
>>>> Per the discussion with Ira/Jonathan in the LPC 2024 and in the CXL
>>>> discord channel, we are trying to introduce a CXL type-2 device emulation
>>>> in QEMU, as there are work currently on supporting CXL type-2 device [1]
>>>> in Linux kernel and CXL type-2 device virtualization [2].
>>>>
>>>> It provides a bare minimum base for folks who would like to:
>>>>
>>>> - Contribute and test the CXL type-2 device support in the linux kernel
>>>>     and CXL type-2 virtualization without having an actual HW.
>>>> - Introduce more emulated features to prototype the kernel CXL type-2
>>>>     device features and CXL type-2 virtualization.
>>>>
>>>> To test this patchset, please refer to steps in [3]. Use this patcheset
>>>> with the latest QEMU repo to be the QEMU host. It achieves the same
>>>> output
>>>> as in the demo video [4]: The VFIO CXL core and VFIO CXL sample variant
>>>> driver can be attached to the emulated device in the L1 guest and
>>>> assigned
>>>> to the L2 guest. The sample driver in the L2 guest can attach to the
>>>> pass-thrued device and create the CXL region.
>>>>
>>>> Tested on the CXL type-2 virtualization RFC patches [3] with an extra
>>>> fix [5].
>>>>
>>>> [1] https://nam11.safelinks.protection.outlook.com/?
>>>> url=https%3A%2F%2Flore.kernel.org%2Flinux-
>>>> cxl%2F20241209185429.54054-1-alejandro.lucero-
>>>> palau%40amd.com%2FT%2F%23t&data=05%7C02%7Czhiw%40nvidia.com%7C3a61139bf3554f4f38f408dd1accf1b9%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C638696189761390919%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=6WziKnwMlZJQ4yxT2jLn7W1So0OfqYss78fOosuLiwA%3D&reserved=0
>>>> [2] https://nam11.safelinks.protection.outlook.com/?
>>>> url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3De5OW1pR84Zs&data=05%7C02%7Czhiw%40nvidia.com%7C3a61139bf3554f4f38f408dd1accf1b9%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C638696189761413039%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=hTF%2F1I%2B4fYPQeCz7NhM0uvWd%2FrWfIzaKdcteD5%2BrcZ0%3D&reserved=0
>>>> [3] https://nam11.safelinks.protection.outlook.com/?
>>>> url=https%3A%2F%2Flore.kernel.org%2Fkvm%2F20240920223446.1908673-3-
>>>> zhiw%40nvidia.com%2FT%2F&data=05%7C02%7Czhiw%40nvidia.com%7C3a61139bf3554f4f38f408dd1accf1b9%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C638696189761425646%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=Wq3mr0mXZCbG3cXRKlibq%2BksTuwL8RGqiUS9jBFDfDY%3D&reserved=0
>>>> [4] https://nam11.safelinks.protection.outlook.com/?
>>>> url=https%3A%2F%2Fyoutu.be%2Fzlk_ecX9bxs%3Fsi%3Dpf9CttcGT5KwUgiH&data=05%7C02%7Czhiw%40nvidia.com%7C3a61139bf3554f4f38f408dd1accf1b9%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C638696189761437780%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=SReTnBUC1bIhBwC%2BvASCXX%2F0ltIYcfWAkHXMmi%2FTRRg%3D&reserved=0
>>>> [5] https://nam11.safelinks.protection.outlook.com/?
>>>> url=https%3A%2F%2Flore.kernel.org%2Flinux-
>>>> cxl%2F20241212123959.68514-1-
>>>> zhiw%40nvidia.com%2FT%2F%23u&data=05%7C02%7Czhiw%40nvidia.com%7C3a61139bf3554f4f38f408dd1accf1b9%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C638696189761449589%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=pmZ8JNctUlcLFwQLivNMkHj7fMt2PR24e%2BuHY%2Bk7bNA%3D&reserved=0
>>>>
>>>> Zhi Wang (3):
>>>>     hw/cxl: factor out cxl_host_addr_to_dpa()
>>>>     hw/cxl: introduce cxl_component_update_dvsec()
>>>>     hw/cxl: introduce CXL type-2 device emulation
>>>>
>>>>    MAINTAINERS                    |   1 +
>>>>    docs/system/devices/cxl.rst    |  11 ++
>>>>    hw/cxl/cxl-component-utils.c   | 103 ++++++++++-
>>>>    hw/cxl/cxl-host.c              |  19 +-
>>>>    hw/mem/Kconfig                 |   5 +
>>>>    hw/mem/cxl_accel.c             | 319 +++++++++++++++++++++++++++++++++
>>>>    hw/mem/cxl_type3.c             |  61 +------
>>>>    hw/mem/meson.build             |   1 +
>>>>    include/hw/cxl/cxl_component.h |   7 +
>>>>    include/hw/cxl/cxl_device.h    |  25 +++
>>>>    include/hw/pci/pci_ids.h       |   1 +
>>>>    11 files changed, 484 insertions(+), 69 deletions(-)
>>>>    create mode 100644 hw/mem/cxl_accel.c
>>>>   
>>>
>>> Hi Zhi,
>>>
>>>
>>> Thank you for this patchset.
>>>
>>>
>>> I  have a similar work done for helping in the Type2 support work, but
>>> it is all quick-and-dirty changes.
>>>
>>>
>>> My main concern here is with the optional features for Type2: how to
>>> create an easy way for configuring Type2 devices using some qemu cxl
>>> param. I'm afraid I did not work on that so no suggestions at all!
>>>    
>>
>> Hi Alejandro:
>>
>> No worries. The work is to provide a minimum base for CXL folks and CXL
>> type-2 folks to start with, e.g. introducing more emulated features. As
>> the type-3 emulation has been quite complicated and I was thinking maybe
>> having a clean start would help. For re-factoring, I was mostly thinking
>> of a step by step style: E.g. when both emulation of devices are
>> reaching a point to have the common routines, then we re-factor them or
>> draw a glue layer.
>>
>> Also, the patchset is good enough for people to test our works.
>>
>> If folks are OK on this minimum emulation, I think the next thing would
>> be meaningful for us is aligning the plan for what features that we want
>> to plug into this, so that we can share the efforts.
>>
>> The items on my list are:
>>
>> - Locked HDM decoder
>> - CDAT and DOE
>>
>> I remembered you were talking about the configuration params, I think it
>> can be very helpful on prototyping different features in the kernel as
>> well. Feel free to reach out for discussions.
>>
> Rather than try to support every combination under the sun, I'd suggest
> a couple of representative choices.   Anyone developing the kernel can
> come and tweak if they need other combinations of features.
> 
> Typical test cases, so everything on, everything off, a mix or
> two of features on.
> 
> Trying to make something really configurable via parameters will end
> up with nonsense combinations and just revealing bugs in the qemu emulation
> rather than what we actually want to test.
> 
> If you want to go really general though feel free to pitch it and we'll
> see how bad it is.
> 

Agree.

I am learning towards the switches should be use-case/device-feature 
oriented and that would be more aligned with the purpose of test and the 
requirement in reality. If there are really some special case of adding 
a quirk or something, we can justify them case by case.

Z.
> Jonathan
> 
>> Z.
>>
>>>
>>> Thank you
>>>    
>>
> 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]