[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 0/5] support unaligned access to xHCI Capability
From: |
Peter Maydell |
Subject: |
Re: [RFC PATCH 0/5] support unaligned access to xHCI Capability |
Date: |
Thu, 28 Nov 2024 11:15:22 +0000 |
On Thu, 28 Nov 2024 at 06:19, Tomoyuki HIROSE
<tomoyuki.hirose@igel.co.jp> wrote:
>
> Hi, thank you for your comment.
>
> On 2024/11/27 20:23, Peter Maydell wrote:
> > On Wed, 27 Nov 2024 at 04:34, Tomoyuki HIROSE
> > <tomoyuki.hirose@igel.co.jp> wrote:
> >> I would be happy to receive your comments.
> >> ping.
> > Hi; this one is on my to-review list (along, sadly, with 23 other
> > series); I had a quick look a while back and it seemed good
> > (the testing support you've added looks great), but I need
> > to sit down and review the implementation more carefully.
> >
> > The one concern I did have was the big long list of macro
> > invocations in the memaccess-testdev device. I wonder if it
> > would be more readable and more compact to fill in MemoryRegionOps
> > structs at runtime using loops in C code, rather than trying to do
> > it all at compile time with macros ?
>
> I also want to do as you say. But I don't know how to generate
> MemoryRegionOps structs at runtime. We need to set read/write function
> to each structs, but I don't know a simple method how to generate a
> function at runtime. Sorry for my lack C knowledge. Do you know about
> any method how to generate a function at runtime in C ?
Your code doesn't generate any functions in the macros, though --
the functions are always memaccess_testdev_{read,write}_{big,little},
which are defined outside any macro.
The macros are only creating structures. Those you can populate
at runtime using normal assignments:
for (valid_max = 1; valid_max < 16; valid_max <<= 1) {
[other loops on valid_min, impl_max, etc, go here]
MemoryRegionOps *memops = whatever;
memops->read = memaccess_testdev_read_little;
memops->write = memaccess_testdev_write_little;
memops->valid.max_access_size = valid_max;
etc...
}
It just happens that for almost all MemoryRegionOps in
QEMU the contents are known at compile time and so we
make them static const at file scope.
thanks
-- PMM
- [RFC PATCH 0/5] support unaligned access to xHCI Capability, Tomoyuki HIROSE, 2024/11/07
- [RFC PATCH 1/5] hw/nvme/ctrl: specify the 'valid' field in MemoryRegionOps, Tomoyuki HIROSE, 2024/11/07
- [RFC PATCH 2/5] system/memory: support unaligned access, Tomoyuki HIROSE, 2024/11/07
- [RFC PATCH 3/5] hw/misc: add test device for memory access, Tomoyuki HIROSE, 2024/11/07
- [RFC PATCH 4/5] tests/qtest: add test for memory region access, Tomoyuki HIROSE, 2024/11/07
- [RFC PATCH 5/5] hw/usb/hcd-xhci: allow unaligned access to Capability Registers, Tomoyuki HIROSE, 2024/11/07
- Re: [RFC PATCH 0/5] support unaligned access to xHCI Capability, Tomoyuki HIROSE, 2024/11/26