Date: Thu, 10 Sep 2020 14:12:25 +0000 (UTC) From: Ruslan Bukin <br@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r365577 - in head/sys: dev/iommu x86/iommu Message-ID: <202009101412.08AECPMo006512@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: br Date: Thu Sep 10 14:12:25 2020 New Revision: 365577 URL: https://svnweb.freebsd.org/changeset/base/365577 Log: Move the rid variable to the generic iommu context. It could be used in various IOMMU platforms, not only DMAR. Reviewed by: kib Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D26373 Modified: head/sys/dev/iommu/iommu.h head/sys/x86/iommu/intel_ctx.c head/sys/x86/iommu/intel_dmar.h Modified: head/sys/dev/iommu/iommu.h ============================================================================== --- head/sys/dev/iommu/iommu.h Thu Sep 10 14:11:29 2020 (r365576) +++ head/sys/dev/iommu/iommu.h Thu Sep 10 14:12:25 2020 (r365577) @@ -135,6 +135,7 @@ struct iommu_ctx { u_long loads; /* atomic updates, for stat only */ u_long unloads; /* same */ u_int flags; /* (u) */ + uint16_t rid; /* (c) pci RID */ }; /* struct iommu_ctx flags */ Modified: head/sys/x86/iommu/intel_ctx.c ============================================================================== --- head/sys/x86/iommu/intel_ctx.c Thu Sep 10 14:11:29 2020 (r365576) +++ head/sys/x86/iommu/intel_ctx.c Thu Sep 10 14:12:25 2020 (r365577) @@ -118,9 +118,9 @@ dmar_map_ctx_entry(struct dmar_ctx *ctx, struct sf_buf dmar = CTX2DMAR(ctx); - ctxp = dmar_map_pgtbl(dmar->ctx_obj, 1 + - PCI_RID2BUS(ctx->rid), IOMMU_PGF_NOALLOC | IOMMU_PGF_WAITOK, sfp); - ctxp += ctx->rid & 0xff; + ctxp = dmar_map_pgtbl(dmar->ctx_obj, 1 + PCI_RID2BUS(ctx->context.rid), + IOMMU_PGF_NOALLOC | IOMMU_PGF_WAITOK, sfp); + ctxp += ctx->context.rid & 0xff; return (ctxp); } @@ -386,7 +386,7 @@ dmar_ctx_alloc(struct dmar_domain *domain, uint16_t ri ctx->context.domain = DOM2IODOM(domain); ctx->context.tag = malloc(sizeof(struct bus_dma_tag_iommu), M_DMAR_CTX, M_WAITOK | M_ZERO); - ctx->rid = rid; + ctx->context.rid = rid; ctx->refs = 1; return (ctx); } @@ -643,8 +643,9 @@ dmar_move_ctx_to_domain(struct dmar_domain *domain, st error = dmar_flush_for_ctx_entry(dmar, true); /* If flush failed, rolling back would not work as well. */ printf("dmar%d rid %x domain %d->%d %s-mapped\n", - dmar->iommu.unit, ctx->rid, old_domain->domain, domain->domain, - (domain->iodom.flags & IOMMU_DOMAIN_IDMAP) != 0 ? "id" : "re"); + dmar->iommu.unit, ctx->context.rid, old_domain->domain, + domain->domain, (domain->iodom.flags & IOMMU_DOMAIN_IDMAP) != 0 ? + "id" : "re"); dmar_unref_domain_locked(dmar, old_domain); TD_PINNED_ASSERT; return (error); @@ -776,7 +777,7 @@ dmar_find_ctx_locked(struct dmar_unit *dmar, uint16_t LIST_FOREACH(domain, &dmar->domains, link) { LIST_FOREACH(ctx, &domain->contexts, link) { - if (ctx->rid == rid) + if (ctx->context.rid == rid) return (ctx); } } Modified: head/sys/x86/iommu/intel_dmar.h ============================================================================== --- head/sys/x86/iommu/intel_dmar.h Thu Sep 10 14:11:29 2020 (r365576) +++ head/sys/x86/iommu/intel_dmar.h Thu Sep 10 14:12:25 2020 (r365577) @@ -75,7 +75,6 @@ struct dmar_domain { struct dmar_ctx { struct iommu_ctx context; - uint16_t rid; /* (c) pci RID */ uint64_t last_fault_rec[2]; /* Last fault reported */ LIST_ENTRY(dmar_ctx) link; /* (u) Member in the domain list */ u_int refs; /* (u) References from tags */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202009101412.08AECPMo006512>