On Thu, 5 Dec 2024 at 18:30, Paolo Bonzini <pbonz...@redhat.com> wrote: > > On 12/5/24 19:15, Richard Henderson wrote: > > On 12/5/24 00:07, Zhao Liu wrote: > >> The MemTxAttrs structure is composed of bitfield members, and bindgen is > >> unable to generate an equivalent macro definition for > >> MEMTXATTRS_UNSPECIFIED. > > > > I'm happy to move away from bit fields to uint32_t or suchlike to enable > > MEMTXATTRS_UNSPECIFIED be a compile-time constant. > > Yeah, if we go from > > typedef struct MemTxAttrs { > unsigned int unspecified:1; > unsigned int secure:1; > unsigned int space:2; > unsigned int user:1; > unsigned int memory:1; > unsigned int requester_id:16; > unsigned int pid:8; > } MemTxAttrs; > > to > > typedef struct MemTxAttrs { > uint8_t unspecified; > uint8_t secure; > uint8_t space; > uint8_t user; > uint8_t memory; > uint8_t pid; > uint16_t requester_id; > } MemTxAttrs; > > is still decently packed and simplifies things a lot.
The old struct is 4 bytes, and the new one is 8 bytes. We do a lot of directly passing 'struct MemTxAttrs' arguments around as arguments to functions (i.e. not passing pointers to them), so increasing it in size is not completely free. thanks -- PMM