DMAR: add knob to disable RMRR entries installation into domains

Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2023-12-23 18:57:19 +02:00
parent 30ce85ca11
commit 24e38af60a
3 changed files with 14 additions and 0 deletions

View file

@ -237,6 +237,9 @@ domain_init_rmrr(struct dmar_domain *domain, device_t dev, int bus,
vm_pindex_t size, i;
int error, error1;
if (!dmar_rmrr_enable)
return (0);
error = 0;
TAILQ_INIT(&rmrr_entries);
dmar_dev_parse_rmrr(domain, dev_domain, dev_busno, dev_path,

View file

@ -319,6 +319,7 @@ extern iommu_haddr_t dmar_high;
extern int haw;
extern int dmar_tbl_pagecnt;
extern int dmar_batch_coalesce;
extern int dmar_rmrr_enable;
static inline uint32_t
dmar_read4(const struct dmar_unit *unit, int reg)

View file

@ -156,6 +156,8 @@ dmar_count_iter(ACPI_DMAR_HEADER *dmarh, void *arg)
return (1);
}
int dmar_rmrr_enable = 1;
static int dmar_enable = 0;
static void
dmar_identify(driver_t *driver, device_t parent)
@ -170,6 +172,8 @@ dmar_identify(driver_t *driver, device_t parent)
TUNABLE_INT_FETCH("hw.dmar.enable", &dmar_enable);
if (!dmar_enable)
return;
TUNABLE_INT_FETCH("hw.dmar.rmrr_enable", &dmar_rmrr_enable);
status = AcpiGetTable(ACPI_SIG_DMAR, 1, (ACPI_TABLE_HEADER **)&dmartbl);
if (ACPI_FAILURE(status))
return;
@ -905,6 +909,9 @@ dmar_rmrr_iter(ACPI_DMAR_HEADER *dmarh, void *arg)
char *ptr, *ptrend;
int match;
if (!dmar_rmrr_enable)
return (1);
if (dmarh->Type != ACPI_DMAR_TYPE_RESERVED_MEMORY)
return (1);
@ -991,6 +998,9 @@ dmar_inst_rmrr_iter(ACPI_DMAR_HEADER *dmarh, void *arg)
iria = arg;
if (!dmar_rmrr_enable)
return (1);
if (dmarh->Type != ACPI_DMAR_TYPE_RESERVED_MEMORY)
return (1);