Page MenuHomeFreeBSD

D47560.id146407.diff
No OneTemporary

D47560.id146407.diff

diff --git a/sys/arm64/arm64/gic_v3.c b/sys/arm64/arm64/gic_v3.c
--- a/sys/arm64/arm64/gic_v3.c
+++ b/sys/arm64/arm64/gic_v3.c
@@ -1434,7 +1434,7 @@
(GICR_VLPI_BASE_SIZE + GICR_RESERVED_SIZE);
}
} while (offset < rman_get_size(r_res) &&
- (typer & GICR_TYPER_LAST) == 0);
+ !sc->gic_redists.single && (typer & GICR_TYPER_LAST) == 0);
}
device_printf(sc->dev, "No Re-Distributor found for CPU%u\n", cpuid);
diff --git a/sys/arm64/arm64/gic_v3_acpi.c b/sys/arm64/arm64/gic_v3_acpi.c
--- a/sys/arm64/arm64/gic_v3_acpi.c
+++ b/sys/arm64/arm64/gic_v3_acpi.c
@@ -300,6 +300,7 @@
acpi_walk_subtables(madt + 1,
(char *)madt + madt->Header.Length,
madt_count_gicc_redistrib, sc);
+ sc->gic_redists.single = true;
}
acpi_unmap_table(madt);
diff --git a/sys/arm64/arm64/gic_v3_var.h b/sys/arm64/arm64/gic_v3_var.h
--- a/sys/arm64/arm64/gic_v3_var.h
+++ b/sys/arm64/arm64/gic_v3_var.h
@@ -53,6 +53,12 @@
struct resource ** regions;
/* Number of Re-Distributor regions */
u_int nregions;
+ /*
+ * Whether to treat each region as a single Re-Distributor page or a
+ * series of contiguous pages (i.e. from each ACPI MADT GICC's GICR
+ * Base Address field)
+ */
+ bool single;
/* Per-CPU Re-Distributor data */
struct redist_pcpu *pcpu;
};

File Metadata

Mime Type
text/plain
Expires
Sun, Jun 21, 6:58 AM (4 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34119999
Default Alt Text
D47560.id146407.diff (1 KB)

Event Timeline