hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/arch/s390/mm/extmem.c
....@@ -289,15 +289,17 @@
289289
290290 /*
291291 * real segment loading function, called from segment_load
292
+ * Must return either an error code < 0, or the segment type code >= 0
292293 */
293294 static int
294295 __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end)
295296 {
296297 unsigned long start_addr, end_addr, dummy;
297298 struct dcss_segment *seg;
298
- int rc, diag_cc;
299
+ int rc, diag_cc, segtype;
299300
300301 start_addr = end_addr = 0;
302
+ segtype = -1;
301303 seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA);
302304 if (seg == NULL) {
303305 rc = -ENOMEM;
....@@ -326,9 +328,9 @@
326328 seg->res_name[8] = '\0';
327329 strlcat(seg->res_name, " (DCSS)", sizeof(seg->res_name));
328330 seg->res->name = seg->res_name;
329
- rc = seg->vm_segtype;
330
- if (rc == SEG_TYPE_SC ||
331
- ((rc == SEG_TYPE_SR || rc == SEG_TYPE_ER) && !do_nonshared))
331
+ segtype = seg->vm_segtype;
332
+ if (segtype == SEG_TYPE_SC ||
333
+ ((segtype == SEG_TYPE_SR || segtype == SEG_TYPE_ER) && !do_nonshared))
332334 seg->res->flags |= IORESOURCE_READONLY;
333335
334336 /* Check for overlapping resources before adding the mapping. */
....@@ -386,7 +388,7 @@
386388 out_free:
387389 kfree(seg);
388390 out:
389
- return rc;
391
+ return rc < 0 ? rc : segtype;
390392 }
391393
392394 /*