Skip to content
Snippets Groups Projects
  • Markus Armbruster's avatar
    1b53ecd9
    memory: Fix type of IOMMUMemoryRegionClass member @parent_class · 1b53ecd9
    Markus Armbruster authored
    
    TYPE_IOMMU_MEMORY_REGION is a direct subtype of TYPE_MEMORY_REGION.
    Its instance struct is IOMMUMemoryRegion, and its first member is a
    MemoryRegion.  Correct.  Its class struct is IOMMUMemoryRegionClass,
    and its first member is a DeviceClass.  Wrong.  Messed up when commit
    1221a474 introduced the QOM type.  It even included hw/qdev-core.h
    just for that.
    
    TYPE_MEMORY_REGION doesn't bother to define a class struct.  This is
    fine, it simply defaults to its super-type TYPE_OBJECT's class struct
    ObjectClass.  Changing IOMMUMemoryRegionClass's first member's type to
    ObjectClass would be a minimal fix, if a bit brittle: if
    TYPE_MEMORY_REGION ever acquired own class struct, we'd have to update
    IOMMUMemoryRegionClass to use it.
    
    Fix it the clean and robust way instead: give TYPE_MEMORY_REGION its
    own class struct MemoryRegionClass now, and use it for
    IOMMUMemoryRegionClass's first member.
    
    Revert the include of hw/qdev-core.h, and fix the few files that have
    come to rely on it.
    
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Tested-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Acked-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-Id: <20190812052359.30071-5-armbru@redhat.com>
    1b53ecd9
    History
    memory: Fix type of IOMMUMemoryRegionClass member @parent_class
    Markus Armbruster authored
    
    TYPE_IOMMU_MEMORY_REGION is a direct subtype of TYPE_MEMORY_REGION.
    Its instance struct is IOMMUMemoryRegion, and its first member is a
    MemoryRegion.  Correct.  Its class struct is IOMMUMemoryRegionClass,
    and its first member is a DeviceClass.  Wrong.  Messed up when commit
    1221a474 introduced the QOM type.  It even included hw/qdev-core.h
    just for that.
    
    TYPE_MEMORY_REGION doesn't bother to define a class struct.  This is
    fine, it simply defaults to its super-type TYPE_OBJECT's class struct
    ObjectClass.  Changing IOMMUMemoryRegionClass's first member's type to
    ObjectClass would be a minimal fix, if a bit brittle: if
    TYPE_MEMORY_REGION ever acquired own class struct, we'd have to update
    IOMMUMemoryRegionClass to use it.
    
    Fix it the clean and robust way instead: give TYPE_MEMORY_REGION its
    own class struct MemoryRegionClass now, and use it for
    IOMMUMemoryRegionClass's first member.
    
    Revert the include of hw/qdev-core.h, and fix the few files that have
    come to rely on it.
    
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Tested-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
    Acked-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-Id: <20190812052359.30071-5-armbru@redhat.com>
memory.c 100.52 KiB