[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aa407944-588c-4514-9523-6f13a989f4ae@suswa.mountain>
Date: Tue, 24 Jun 2025 16:41:13 +0300
From: Dan Carpenter <dan.carpenter@...aro.org>
To: oe-kbuild@...ts.linux.dev, Badal Nilawar <badal.nilawar@...el.com>,
intel-xe@...ts.freedesktop.org, dri-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org
Cc: lkp@...el.com, oe-kbuild-all@...ts.linux.dev, anshuman.gupta@...el.com,
rodrigo.vivi@...el.com, alexander.usyskin@...el.com,
gregkh@...uxfoundation.org, daniele.ceraolospurio@...el.com,
jgg@...dia.com
Subject: Re: [PATCH v3 09/10] drm/xe/xe_late_bind_fw: Extract and print
version info
Hi Badal,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Badal-Nilawar/mei-bus-add-mei_cldev_mtu-interface/20250619-025825
base: https://gitlab.freedesktop.org/drm/xe/kernel.git drm-xe-next
patch link: https://lore.kernel.org/r/20250618190007.2932322-10-badal.nilawar%40intel.com
patch subject: [PATCH v3 09/10] drm/xe/xe_late_bind_fw: Extract and print version info
config: i386-randconfig-141-20250623 (https://download.01.org/0day-ci/archive/20250624/202506241449.WdiucfJp-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Reported-by: Dan Carpenter <dan.carpenter@...aro.org>
| Closes: https://lore.kernel.org/r/202506241449.WdiucfJp-lkp@intel.com/
New smatch warnings:
drivers/gpu/drm/xe/xe_late_bind_fw.c:90 parse_cpd_header() error: uninitialized symbol 'offset'.
drivers/gpu/drm/xe/xe_late_bind_fw.c:155 parse_lb_layout() error: uninitialized symbol 'offset'.
Old smatch warnings:
drivers/gpu/drm/xe/xe_late_bind_fw.c:195 xe_late_bind_wait_for_worker_completion() warn: inconsistent indenting
vim +/offset +90 drivers/gpu/drm/xe/xe_late_bind_fw.c
f9ea24fb9528adc Badal Nilawar 2025-06-19 49 static int parse_cpd_header(struct xe_late_bind *late_bind, u32 fw_id,
f9ea24fb9528adc Badal Nilawar 2025-06-19 50 const void *data, size_t size, const char *manifest_entry)
f9ea24fb9528adc Badal Nilawar 2025-06-19 51 {
f9ea24fb9528adc Badal Nilawar 2025-06-19 52 struct xe_device *xe = late_bind_to_xe(late_bind);
f9ea24fb9528adc Badal Nilawar 2025-06-19 53 const struct gsc_cpd_header_v2 *header = data;
f9ea24fb9528adc Badal Nilawar 2025-06-19 54 const struct gsc_manifest_header *manifest;
f9ea24fb9528adc Badal Nilawar 2025-06-19 55 const struct gsc_cpd_entry *entry;
f9ea24fb9528adc Badal Nilawar 2025-06-19 56 size_t min_size = sizeof(*header);
f9ea24fb9528adc Badal Nilawar 2025-06-19 57 struct xe_late_bind_fw *lb_fw;
f9ea24fb9528adc Badal Nilawar 2025-06-19 58 u32 offset;
^^^^^^^^^^^
f9ea24fb9528adc Badal Nilawar 2025-06-19 59 int i;
f9ea24fb9528adc Badal Nilawar 2025-06-19 60
f9ea24fb9528adc Badal Nilawar 2025-06-19 61 if (fw_id >= MAX_FW_ID)
f9ea24fb9528adc Badal Nilawar 2025-06-19 62 return -EINVAL;
f9ea24fb9528adc Badal Nilawar 2025-06-19 63 lb_fw = &late_bind->late_bind_fw[fw_id];
f9ea24fb9528adc Badal Nilawar 2025-06-19 64
f9ea24fb9528adc Badal Nilawar 2025-06-19 65 /* manifest_entry is mandatory */
f9ea24fb9528adc Badal Nilawar 2025-06-19 66 xe_assert(xe, manifest_entry);
f9ea24fb9528adc Badal Nilawar 2025-06-19 67
f9ea24fb9528adc Badal Nilawar 2025-06-19 68 if (size < min_size || header->header_marker != GSC_CPD_HEADER_MARKER)
f9ea24fb9528adc Badal Nilawar 2025-06-19 69 return -ENOENT;
f9ea24fb9528adc Badal Nilawar 2025-06-19 70
f9ea24fb9528adc Badal Nilawar 2025-06-19 71 if (header->header_length < sizeof(struct gsc_cpd_header_v2)) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 72 drm_err(&xe->drm, "%s late binding fw: Invalid CPD header length %u!\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 73 fw_id_to_name[lb_fw->id], header->header_length);
f9ea24fb9528adc Badal Nilawar 2025-06-19 74 return -EINVAL;
f9ea24fb9528adc Badal Nilawar 2025-06-19 75 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 76
f9ea24fb9528adc Badal Nilawar 2025-06-19 77 min_size = header->header_length + sizeof(struct gsc_cpd_entry) * header->num_of_entries;
f9ea24fb9528adc Badal Nilawar 2025-06-19 78 if (size < min_size) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 79 drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 80 fw_id_to_name[lb_fw->id], size, min_size);
f9ea24fb9528adc Badal Nilawar 2025-06-19 81 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 82 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 83
f9ea24fb9528adc Badal Nilawar 2025-06-19 84 /* Look for the manifest first */
f9ea24fb9528adc Badal Nilawar 2025-06-19 85 entry = (void *)header + header->header_length;
f9ea24fb9528adc Badal Nilawar 2025-06-19 86 for (i = 0; i < header->num_of_entries; i++, entry++)
f9ea24fb9528adc Badal Nilawar 2025-06-19 87 if (strcmp(entry->name, manifest_entry) == 0)
f9ea24fb9528adc Badal Nilawar 2025-06-19 88 offset = entry->offset & GSC_CPD_ENTRY_OFFSET_MASK;
^^^^^^^^
Only initialized if found.
f9ea24fb9528adc Badal Nilawar 2025-06-19 89
f9ea24fb9528adc Badal Nilawar 2025-06-19 @90 if (!offset) {
^^^^^^
Uninitialized.
It's a good idea for developers to set CONFIG_INIT_STACK_ALL_PATTERN=y
in their testing.
f9ea24fb9528adc Badal Nilawar 2025-06-19 91 drm_err(&xe->drm, "%s late binding fw: Failed to find manifest_entry\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 92 fw_id_to_name[lb_fw->id]);
f9ea24fb9528adc Badal Nilawar 2025-06-19 93 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 94 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 95
f9ea24fb9528adc Badal Nilawar 2025-06-19 96 min_size = offset + sizeof(struct gsc_manifest_header);
f9ea24fb9528adc Badal Nilawar 2025-06-19 97 if (size < min_size) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 98 drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 99 fw_id_to_name[lb_fw->id], size, min_size);
f9ea24fb9528adc Badal Nilawar 2025-06-19 100 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 101 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 102
f9ea24fb9528adc Badal Nilawar 2025-06-19 103 manifest = data + offset;
f9ea24fb9528adc Badal Nilawar 2025-06-19 104
f9ea24fb9528adc Badal Nilawar 2025-06-19 105 lb_fw->version.major = manifest->fw_version.major;
f9ea24fb9528adc Badal Nilawar 2025-06-19 106 lb_fw->version.minor = manifest->fw_version.minor;
f9ea24fb9528adc Badal Nilawar 2025-06-19 107 lb_fw->version.hotfix = manifest->fw_version.hotfix;
f9ea24fb9528adc Badal Nilawar 2025-06-19 108 lb_fw->version.build = manifest->fw_version.build;
f9ea24fb9528adc Badal Nilawar 2025-06-19 109
f9ea24fb9528adc Badal Nilawar 2025-06-19 110 return 0;
f9ea24fb9528adc Badal Nilawar 2025-06-19 111 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 112
f9ea24fb9528adc Badal Nilawar 2025-06-19 113 /* Refer to the "Late Bind based Firmware Layout" documentation entry for details */
f9ea24fb9528adc Badal Nilawar 2025-06-19 114 static int parse_lb_layout(struct xe_late_bind *late_bind, u32 fw_id,
f9ea24fb9528adc Badal Nilawar 2025-06-19 115 const void *data, size_t size, const char *fpt_entry)
f9ea24fb9528adc Badal Nilawar 2025-06-19 116 {
f9ea24fb9528adc Badal Nilawar 2025-06-19 117 struct xe_device *xe = late_bind_to_xe(late_bind);
f9ea24fb9528adc Badal Nilawar 2025-06-19 118 const struct csc_fpt_header *header = data;
f9ea24fb9528adc Badal Nilawar 2025-06-19 119 const struct csc_fpt_entry *entry;
f9ea24fb9528adc Badal Nilawar 2025-06-19 120 size_t min_size = sizeof(*header);
f9ea24fb9528adc Badal Nilawar 2025-06-19 121 struct xe_late_bind_fw *lb_fw;
f9ea24fb9528adc Badal Nilawar 2025-06-19 122 u32 offset;
f9ea24fb9528adc Badal Nilawar 2025-06-19 123 int i;
f9ea24fb9528adc Badal Nilawar 2025-06-19 124
f9ea24fb9528adc Badal Nilawar 2025-06-19 125 if (fw_id >= MAX_FW_ID)
f9ea24fb9528adc Badal Nilawar 2025-06-19 126 return -EINVAL;
f9ea24fb9528adc Badal Nilawar 2025-06-19 127
f9ea24fb9528adc Badal Nilawar 2025-06-19 128 lb_fw = &late_bind->late_bind_fw[fw_id];
f9ea24fb9528adc Badal Nilawar 2025-06-19 129
f9ea24fb9528adc Badal Nilawar 2025-06-19 130 /* fpt_entry is mandatory */
f9ea24fb9528adc Badal Nilawar 2025-06-19 131 xe_assert(xe, fpt_entry);
f9ea24fb9528adc Badal Nilawar 2025-06-19 132
f9ea24fb9528adc Badal Nilawar 2025-06-19 133 if (size < min_size || header->header_marker != CSC_FPT_HEADER_MARKER)
f9ea24fb9528adc Badal Nilawar 2025-06-19 134 return -ENOENT;
f9ea24fb9528adc Badal Nilawar 2025-06-19 135
f9ea24fb9528adc Badal Nilawar 2025-06-19 136 if (header->header_length < sizeof(struct csc_fpt_header)) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 137 drm_err(&xe->drm, "%s late binding fw: Invalid FPT header length %u!\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 138 fw_id_to_name[lb_fw->id], header->header_length);
f9ea24fb9528adc Badal Nilawar 2025-06-19 139 return -EINVAL;
f9ea24fb9528adc Badal Nilawar 2025-06-19 140 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 141
f9ea24fb9528adc Badal Nilawar 2025-06-19 142 min_size = header->header_length + sizeof(struct csc_fpt_entry) * header->num_of_entries;
f9ea24fb9528adc Badal Nilawar 2025-06-19 143 if (size < min_size) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 144 drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 145 fw_id_to_name[lb_fw->id], size, min_size);
f9ea24fb9528adc Badal Nilawar 2025-06-19 146 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 147 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 148
f9ea24fb9528adc Badal Nilawar 2025-06-19 149 /* Look for the manifest first */
f9ea24fb9528adc Badal Nilawar 2025-06-19 150 entry = (void *)header + header->header_length;
f9ea24fb9528adc Badal Nilawar 2025-06-19 151 for (i = 0; i < header->num_of_entries; i++, entry++)
f9ea24fb9528adc Badal Nilawar 2025-06-19 152 if (strcmp(entry->name, fpt_entry) == 0)
f9ea24fb9528adc Badal Nilawar 2025-06-19 153 offset = entry->offset;
f9ea24fb9528adc Badal Nilawar 2025-06-19 154
f9ea24fb9528adc Badal Nilawar 2025-06-19 @155 if (!offset) {
Same.
f9ea24fb9528adc Badal Nilawar 2025-06-19 156 drm_err(&xe->drm, "%s late binding fw: Failed to find fpt_entry\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 157 fw_id_to_name[lb_fw->id]);
f9ea24fb9528adc Badal Nilawar 2025-06-19 158 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 159 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 160
f9ea24fb9528adc Badal Nilawar 2025-06-19 161 min_size = offset + sizeof(struct gsc_cpd_header_v2);
f9ea24fb9528adc Badal Nilawar 2025-06-19 162 if (size < min_size) {
f9ea24fb9528adc Badal Nilawar 2025-06-19 163 drm_err(&xe->drm, "%s late binding fw: too small! %zu < %zu\n",
f9ea24fb9528adc Badal Nilawar 2025-06-19 164 fw_id_to_name[lb_fw->id], size, min_size);
f9ea24fb9528adc Badal Nilawar 2025-06-19 165 return -ENODATA;
f9ea24fb9528adc Badal Nilawar 2025-06-19 166 }
f9ea24fb9528adc Badal Nilawar 2025-06-19 167
f9ea24fb9528adc Badal Nilawar 2025-06-19 168 return parse_cpd_header(late_bind, fw_id, data + offset, size - offset, "LTES.man");
f9ea24fb9528adc Badal Nilawar 2025-06-19 169 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists