Re: [PATCH 23/26] soc: qcom: Add minidump driver

kernel test robot
2025-11-22T04:56:32Z

Hi Eugen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rppt-memblock/fixes]
[also build test WARNING on linus/master v6.18-rc6]
[cannot apply to akpm-mm/mm-everything rppt-memblock/for-next next-20251121]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Eugen-Hristev/kernel-Introduce-meminspect/20251119-235912
base: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock.git fixes
patch link: https://lore.kernel.org/r/20251119154427.1033475-24-eugen.hristev%40linaro.org
patch subject: [PATCH 23/26] soc: qcom: Add minidump driver
config: nios2-randconfig-r123-20251122 (https://download.01.org/0day-ci/archive/20251122/202511221252.PPEXScZ2-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 11.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251122/202511221252.PPEXScZ2-lkp@intel.com/reproduce)

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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511221252.PPEXScZ2-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/soc/qcom/minidump.c:108:35: sparse: sparse: restricted __le32 degrades to integer
>> drivers/soc/qcom/minidump.c:154:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __le32 [usertype] seq_num @@ got unsigned int enum meminspect_uid const id @@
drivers/soc/qcom/minidump.c:154:22: sparse: expected restricted __le32 [usertype] seq_num
drivers/soc/qcom/minidump.c:154:22: sparse: got unsigned int enum meminspect_uid const id
>> drivers/soc/qcom/minidump.c:184:19: sparse: sparse: unsigned value that used to be signed checked against zero?
drivers/soc/qcom/minidump.c:183:39: sparse: signed value source

vim +108 drivers/soc/qcom/minidump.c

93
94 /**
95 * qcom_md_get_region_index() - Lookup minidump region by id
96 * @md: minidump data
97 * @id: minidump region id
98 *
99 * Return: On success, it returns the internal region index, on failure,
100 * returns negative error value
101 */
102 static int qcom_md_get_region_index(struct minidump *md, int id)
103 {
104 unsigned int count = le32_to_cpu(md->toc->region_count);
105 unsigned int i;
106
107 for (i = 0; i < count; i++)
> 108 if (md->regions[i].seq_num == id)
109 return i;
110
111 return -ENOENT;
112 }
113
114 /**
115 * register_md_region() - Register a new minidump region
116 * @priv: private data
117 * @e: pointer to inspect entry
118 *
119 * Return: None
120 */
121 static void __maybe_unused register_md_region(void *priv,
122 const struct inspect_entry *e)
123 {
124 unsigned int num_region, region_cnt;
125 const char *name = "unknown";
126 struct minidump_region *mdr;
127 struct minidump *md = priv;
128
129 if (!(e->va || e->pa) || !e->size) {
130 dev_dbg(md->dev, "invalid region requested\n");
131 return;
132 }
133
134 if (e->id < ARRAY_SIZE(meminspect_id_to_md_string))
135 name = meminspect_id_to_md_string[e->id];
136
137 if (qcom_md_get_region_index(md, e->id) >= 0) {
138 dev_dbg(md->dev, "%s:%d region is already registered\n",
139 name, e->id);
140 return;
141 }
142
143 /* Check if there is a room for a new entry */
144 num_region = le32_to_cpu(md->toc->region_count);
145 if (num_region >= MAX_NUM_REGIONS) {
146 dev_dbg(md->dev, "maximum region limit %u reached\n",
147 num_region);
148 return;
149 }
150
151 region_cnt = le32_to_cpu(md->toc->region_count);
152 mdr = &md->regions[region_cnt];
153 scnprintf(mdr->name, MAX_REGION_NAME_LENGTH, "K%.8s", name);
> 154 mdr->seq_num = e->id;
155 if (e->pa)
156 mdr->address = cpu_to_le64(e->pa);
157 else if (e->va)
158 mdr->address = cpu_to_le64(__pa(e->va));
159 mdr->size = cpu_to_le64(ALIGN(e->size, 4));
160 mdr->valid = cpu_to_le32(MINIDUMP_REGION_VALID);
161 region_cnt++;
162 md->toc->region_count = cpu_to_le32(region_cnt);
163
164 dev_dbg(md->dev, "%s:%d region registered %llx:%llx\n",
165 mdr->name, mdr->seq_num, mdr->address, mdr->size);
166 }
167
168 /**
169 * unregister_md_region() - Unregister a previously registered minidump region
170 * @priv: private data
171 * @e: pointer to inspect entry
172 *
173 * Return: None
174 */
175 static void __maybe_unused unregister_md_region(void *priv,
176 const struct inspect_entry *e)
177 {
178 struct minidump_region *mdr;
179 struct minidump *md = priv;
180 unsigned int region_cnt;
181 unsigned int idx;
182
183 idx = qcom_md_get_region_index(md, e->id);
> 184 if (idx < 0) {
185 dev_dbg(md->dev, "%d region is not present\n", e->id);
186 return;
187 }
188
189 mdr = &md->regions[0];
190 region_cnt = le32_to_cpu(md->toc->region_count);
191
192 /*
193 * Left shift one position all the regions located after the
194 * region being removed, in order to fill the gap.
195 * Then, zero out the last region at the end.
196 */
197 memmove(&mdr[idx], &mdr[idx + 1], (region_cnt - idx - 1) * sizeof(*mdr));
198 memset(&mdr[region_cnt - 1], 0, sizeof(*mdr));
199 region_cnt--;
200 md->toc->region_count = cpu_to_le32(region_cnt);
201 }
202

--
0-DAY CI Kernel Test Service