Page MenuHomeFreeBSD

D19844.id55932.diff
No OneTemporary

D19844.id55932.diff

Index: sys/arm64/arm64/gic_v3_var.h
===================================================================
--- sys/arm64/arm64/gic_v3_var.h
+++ sys/arm64/arm64/gic_v3_var.h
@@ -43,6 +43,7 @@
struct redist_pcpu {
struct resource res;
vm_offset_t pend_base;
+ u_int lpi_enabled:1;
};
struct gic_redists {
Index: sys/arm64/arm64/gicv3_its.c
===================================================================
--- sys/arm64/arm64/gicv3_its.c
+++ sys/arm64/arm64/gicv3_its.c
@@ -670,11 +670,14 @@
if ((gic_r_read_4(gicv3, GICR_TYPER) & GICR_TYPER_PLPIS) == 0)
return (ENXIO);
- its_init_cpu_lpi(dev, sc);
+ rpcpu = gicv3_get_redist(dev);
+ if (!rpcpu->lpi_enabled) {
+ its_init_cpu_lpi(dev, sc);
+ rpcpu->lpi_enabled = 1;
+ }
if ((gic_its_read_8(sc, GITS_TYPER) & GITS_TYPER_PTA) != 0) {
/* This ITS wants the redistributor physical address */
- rpcpu = gicv3_get_redist(dev);
target = vtophys(rman_get_virtual(&rpcpu->res));
} else {
/* This ITS wants the unique processor number */

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 6, 11:35 PM (5 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31002332
Default Alt Text
D19844.id55932.diff (1014 B)

Event Timeline