Building Mesa's Perfetto requires including the panfrost drm uAPI header in C++ code, but the C++ compiler requires anonymous unions to have only public non-static data members. Commit 730c2bf4ad39 ("drm/panfrost: Add support for devcoredump") introduces one such union, breaking the Mesa build. Give it a name, and also rename pan_reg_hdr structure because it will always be prefixed by the union name. Bug: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7195 Signed-off-by: Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> --- drivers/gpu/drm/panfrost/panfrost_dump.c | 20 ++++++++++---------- include/uapi/drm/panfrost_drm.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/panfrost/panfrost_dump.c index 89056a1aac7d..e40b6eace187 100644 --- a/drivers/gpu/drm/panfrost/panfrost_dump.c +++ b/drivers/gpu/drm/panfrost/panfrost_dump.c @@ -177,11 +177,11 @@ void panfrost_core_dump(struct panfrost_job *job) * For now, we write the job identifier in the register dump header, * so that we can decode the entire dump later with pandecode */ - iter.hdr->reghdr.jc = cpu_to_le64(job->jc); - iter.hdr->reghdr.major = cpu_to_le32(PANFROSTDUMP_MAJOR); - iter.hdr->reghdr.minor = cpu_to_le32(PANFROSTDUMP_MINOR); - iter.hdr->reghdr.gpu_id = cpu_to_le32(pfdev->features.id); - iter.hdr->reghdr.nbos = cpu_to_le64(job->bo_count); + iter.hdr->pan_hdr.regs.jc = cpu_to_le64(job->jc); + iter.hdr->pan_hdr.regs.major = cpu_to_le32(PANFROSTDUMP_MAJOR); + iter.hdr->pan_hdr.regs.minor = cpu_to_le32(PANFROSTDUMP_MINOR); + iter.hdr->pan_hdr.regs.gpu_id = cpu_to_le32(pfdev->features.id); + iter.hdr->pan_hdr.regs.nbos = cpu_to_le64(job->bo_count); panfrost_core_dump_registers(&iter, pfdev, as_nr, slot); @@ -205,20 +205,20 @@ void panfrost_core_dump(struct panfrost_job *job) if (!bo->base.sgt) { dev_err(pfdev->dev, "Panfrost Dump: BO has no sgt, cannot dump\n"); - iter.hdr->bomap.valid = 0; + iter.hdr->pan_hdr.bomap.valid = 0; goto dump_header; } ret = drm_gem_shmem_vmap(&bo->base, &map); if (ret) { dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n"); - iter.hdr->bomap.valid = 0; + iter.hdr->pan_hdr.bomap.valid = 0; goto dump_header; } WARN_ON(!mapping->active); - iter.hdr->bomap.data[0] = cpu_to_le32((bomap - bomap_start)); + iter.hdr->pan_hdr.bomap.data[0] = cpu_to_le32((bomap - bomap_start)); for_each_sgtable_page(bo->base.sgt, &page_iter, 0) { struct page *page = sg_page_iter_page(&page_iter); @@ -231,14 +231,14 @@ void panfrost_core_dump(struct panfrost_job *job) } } - iter.hdr->bomap.iova = cpu_to_le64(mapping->mmnode.start << PAGE_SHIFT); + iter.hdr->pan_hdr.bomap.iova = cpu_to_le64(mapping->mmnode.start << PAGE_SHIFT); vaddr = map.vaddr; memcpy(iter.data, vaddr, bo->base.base.size); drm_gem_shmem_vunmap(&bo->base, &map); - iter.hdr->bomap.valid = cpu_to_le32(1); + iter.hdr->pan_hdr.bomap.valid = cpu_to_le32(1); dump_header: panfrost_core_dump_header(&iter, PANFROSTDUMP_BUF_BO, iter.data + bo->base.base.size); diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h index eac87310b348..4da33e4d7e2c 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -248,7 +248,7 @@ struct panfrost_dump_object_header { __le32 major; __le32 minor; __le64 nbos; - } reghdr; + } regs; struct pan_bomap_hdr { __le32 valid; @@ -262,7 +262,7 @@ struct panfrost_dump_object_header { */ __le32 sizer[496]; - }; + } pan_hdr; }; /* Registers object, an array of these */ -- 2.37.0