On Thu, 11 Jul 2024 17:16:23 +0200 Alexander Gordeev <agordeev@xxxxxxxxxxxxx> wrote: > On Wed, Jul 03, 2024 at 05:59:00PM +0200, Claudio Imbrenda wrote: > > Hi Claudio, > > > Once in a separate header, the structs become available everywhere. One > > possible usecase is to merge them in the s390 > > definitions, which is left as an exercise for the reader. > > Is my understanding correct that you potentially see page_table_entry::val / > region?_table_entry.*::val / segment_table_entry.* merged with pte_t::pte / > p?d_t::p?d? > > Thanks! that depends on how you want to do the merge you could do: typedef union { unsigned long pte; union page_table_entry hw; union page_table_entry_softbits sw; } pte_t; then you would have pte_t::pte and pte_t::hw::val; unfortunately it's not possible to anonymously merge a named type.. this would be great but can't be done*: typedef union { unsigned long pte; union page_table_entry; } pte_t; [*] gcc actually supports it with an additional feature switch, but it's not standard C and I seriously doubt we should even think about doing it another possibility is a plain typedef union page_table_entry pte_t; and then fix pte_val() and similar, but then you won't have the softbits. in the end, it's up to you how you want to merge them. I will have my own unions that I will use only inside KVM, that's enough for me.