[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] add using domlist_read_lock in keyhandlers
commit b3841d991dea4faf0799195313bc33f372af565c Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Tue Feb 18 16:26:33 2020 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Feb 18 16:26:33 2020 +0100 add using domlist_read_lock in keyhandlers Using for_each_domain() with out holding the domlist_read_lock is fragile, so add the lock in the keyhandlers it is missing. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: George Dunlap <george.dunlap@xxxxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> --- xen/arch/x86/mm/p2m-ept.c | 4 ++++ xen/arch/x86/time.c | 5 +++++ xen/common/grant_table.c | 7 +++++++ xen/drivers/passthrough/iommu.c | 5 +++++ 4 files changed, 21 insertions(+) diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c index d4defa01c2..eb0f0edfef 100644 --- a/xen/arch/x86/mm/p2m-ept.c +++ b/xen/arch/x86/mm/p2m-ept.c @@ -1297,6 +1297,8 @@ static void ept_dump_p2m_table(unsigned char key) struct p2m_domain *p2m; struct ept_data *ept; + rcu_read_lock(&domlist_read_lock); + for_each_domain(d) { if ( !hap_enabled(d) ) @@ -1347,6 +1349,8 @@ static void ept_dump_p2m_table(unsigned char key) unmap_domain_page(table); } } + + rcu_read_unlock(&domlist_read_lock); } void setup_ept_dump(void) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index 1c86d49a0d..bb1b97787f 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -2406,6 +2406,9 @@ static void dump_softtsc(unsigned char key) } else printk("TSC not marked as either constant or reliable, " "warp=%lu (count=%lu)\n", tsc_max_warp, tsc_check_count); + + rcu_read_lock(&domlist_read_lock); + for_each_domain ( d ) { if ( is_hardware_domain(d) && d->arch.tsc_mode == TSC_MODE_DEFAULT ) @@ -2422,6 +2425,8 @@ static void dump_softtsc(unsigned char key) domcnt++; } + rcu_read_unlock(&domlist_read_lock); + if ( !domcnt ) printk("No domains have emulated TSC\n"); } diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index fe5a6b6917..bc37acae0e 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -4104,9 +4104,16 @@ static void gnttab_usage_print(struct domain *rd) static void gnttab_usage_print_all(unsigned char key) { struct domain *d; + printk("%s [ key '%c' pressed\n", __func__, key); + + rcu_read_lock(&domlist_read_lock); + for_each_domain ( d ) gnttab_usage_print(d); + + rcu_read_unlock(&domlist_read_lock); + printk("%s ] done\n", __func__); } diff --git a/xen/drivers/passthrough/iommu.c b/xen/drivers/passthrough/iommu.c index 9d421e06de..cab7a068aa 100644 --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -591,6 +591,9 @@ static void iommu_dump_p2m_table(unsigned char key) } ops = iommu_get_ops(); + + rcu_read_lock(&domlist_read_lock); + for_each_domain(d) { if ( is_hardware_domain(d) || !is_iommu_enabled(d) ) @@ -605,6 +608,8 @@ static void iommu_dump_p2m_table(unsigned char key) printk("\ndomain%d IOMMU p2m table: \n", d->domain_id); ops->dump_p2m_table(d); } + + rcu_read_unlock(&domlist_read_lock); } /* -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |