On Fri, 23 Oct 2026 at 11:21, Daniel P. Berrangé <[email protected]> wrote:
>
> On Thu, Oct 22, 2026 at 02:58:16PM +0200, Markus Armbruster wrote:
> > My build of qemu-system-x86_64 has device sgx-epc:
> >
> >  --> {"execute": "qom-list-types", "arguments": {"implements": "sgx-epc"}}
> >  <-- {"return": [{"name": "sgx-epc", "parent": "device"}]}
> >
> > The device as a link property to a memory-backend-epc:
> >
> >  --> {"execute": "qom-list-properties", "arguments": {"typename": 
> > "sgx-epc"}}
> >  <-- {"return": [...
> >                  {"name": "memdev", "type": "link<memory-backend-epc>"},
> >                  ...]}
> >
> > However, type memory-backend-epc does not exist:

> There is some rather dubious code that conditionally registers
> the type
>
> static void register_types(void)
> {
>     int fd = qemu_open_old("/dev/sgx_vepc", O_RDWR);
>     if (fd >= 0) {
>         close(fd);
>
>         type_register_static(&sgx_epc_backed_info);
>     }
> }
>
>
> Normal practice is for types to be unconditionally registered.  Do we
> have any examples outside of this SGX case where we conditionally
> register types ?   Should we change this to follow normal practice ?

TYPE_MEMORY_BACKEND_MEMFD does the same. I did a quick grep for
"calls to type_register not indented by exactly 4 spaces" and
I think the other cases are "misindented" or "data-driven
type registration" rather than trying to do things conditionally
(but I didn't actually look at all of them, instead making
guesses based on variable names, so maybe there's one or two
more I missed).

I guess maybe this is trying to work around the fact that the
memory backend API doesn't give a backend any place to say
"this is never going to work" early, because instance_init isn't
allowed to fail, these objects aren't TYPE_DEVICE so they
don't have "realize", and so the only other option is
"fail every alloc call" ?

thanks
-- PMM

Reply via email to