hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/of/address.c
....@@ -990,8 +990,19 @@
990990 }
991991
992992 of_dma_range_parser_init(&parser, node);
993
- for_each_of_range(&parser, &range)
993
+ for_each_of_range(&parser, &range) {
994
+ if (range.cpu_addr == OF_BAD_ADDR) {
995
+ pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n",
996
+ range.bus_addr, node);
997
+ continue;
998
+ }
994999 num_ranges++;
1000
+ }
1001
+
1002
+ if (!num_ranges) {
1003
+ ret = -EINVAL;
1004
+ goto out;
1005
+ }
9951006
9961007 r = kcalloc(num_ranges + 1, sizeof(*r), GFP_KERNEL);
9971008 if (!r) {
....@@ -1000,18 +1011,16 @@
10001011 }
10011012
10021013 /*
1003
- * Record all info in the generic DMA ranges array for struct device.
1014
+ * Record all info in the generic DMA ranges array for struct device,
1015
+ * returning an error if we don't find any parsable ranges.
10041016 */
10051017 *map = r;
10061018 of_dma_range_parser_init(&parser, node);
10071019 for_each_of_range(&parser, &range) {
10081020 pr_debug("dma_addr(%llx) cpu_addr(%llx) size(%llx)\n",
10091021 range.bus_addr, range.cpu_addr, range.size);
1010
- if (range.cpu_addr == OF_BAD_ADDR) {
1011
- pr_err("translation of DMA address(%llx) to CPU address failed node(%pOF)\n",
1012
- range.bus_addr, node);
1022
+ if (range.cpu_addr == OF_BAD_ADDR)
10131023 continue;
1014
- }
10151024 r->cpu_start = range.cpu_addr;
10161025 r->dma_start = range.bus_addr;
10171026 r->size = range.size;