From: Jan Beulich <jbeulich@suse.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Kevin Tian <kevin.tian@intel.com>
Subject: [PATCH 3/3] VT-d: shorten vtd_flush_{context,iotlb}_reg()
Date: Thu, 9 Dec 2021 16:53:46 +0100 [thread overview]
Message-ID: <4d1b5bb2-e5a3-e581-1bc2-9ac7eb61af35@suse.com> (raw)
In-Reply-To: <5b1a5093-610d-f7d3-8d48-e843d86609da@suse.com>
Their calculations of the value to write to the respective command
register can be partly folded, resulting in almost 100 bytes less code
for these two relatively short functions.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -441,7 +441,6 @@ int vtd_flush_context_reg(struct vtd_iom
uint16_t source_id, uint8_t function_mask,
uint64_t type, bool flush_non_present_entry)
{
- u64 val = 0;
unsigned long flags;
/*
@@ -462,26 +461,26 @@ int vtd_flush_context_reg(struct vtd_iom
switch ( type )
{
case DMA_CCMD_GLOBAL_INVL:
- val = DMA_CCMD_GLOBAL_INVL;
- break;
- case DMA_CCMD_DOMAIN_INVL:
- val = DMA_CCMD_DOMAIN_INVL|DMA_CCMD_DID(did);
break;
+
case DMA_CCMD_DEVICE_INVL:
- val = DMA_CCMD_DEVICE_INVL|DMA_CCMD_DID(did)
- |DMA_CCMD_SID(source_id)|DMA_CCMD_FM(function_mask);
+ type |= DMA_CCMD_SID(source_id) | DMA_CCMD_FM(function_mask);
+ fallthrough;
+ case DMA_CCMD_DOMAIN_INVL:
+ type |= DMA_CCMD_DID(did);
break;
+
default:
BUG();
}
- val |= DMA_CCMD_ICC;
+ type |= DMA_CCMD_ICC;
spin_lock_irqsave(&iommu->register_lock, flags);
- dmar_writeq(iommu->reg, DMAR_CCMD_REG, val);
+ dmar_writeq(iommu->reg, DMAR_CCMD_REG, type);
/* Make sure hardware complete it */
IOMMU_FLUSH_WAIT("context", iommu, DMAR_CCMD_REG, dmar_readq,
- !(val & DMA_CCMD_ICC), val);
+ !(type & DMA_CCMD_ICC), type);
spin_unlock_irqrestore(&iommu->register_lock, flags);
/* flush context entry will implicitly flush write buffer */
@@ -510,7 +509,7 @@ int vtd_flush_iotlb_reg(struct vtd_iommu
bool flush_non_present_entry, bool flush_dev_iotlb)
{
int tlb_offset = ecap_iotlb_offset(iommu->ecap);
- u64 val = 0;
+ uint64_t val = type | DMA_TLB_IVT;
unsigned long flags;
/*
@@ -524,14 +523,13 @@ int vtd_flush_iotlb_reg(struct vtd_iommu
switch ( type )
{
case DMA_TLB_GLOBAL_FLUSH:
- val = DMA_TLB_GLOBAL_FLUSH|DMA_TLB_IVT;
break;
+
case DMA_TLB_DSI_FLUSH:
- val = DMA_TLB_DSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
- break;
case DMA_TLB_PSI_FLUSH:
- val = DMA_TLB_PSI_FLUSH|DMA_TLB_IVT|DMA_TLB_DID(did);
+ val |= DMA_TLB_DID(did);
break;
+
default:
BUG();
}
next prev parent reply other threads:[~2021-12-09 15:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-09 15:51 [PATCH 0/3] VT-d: macro definition / use tidying Jan Beulich
2021-12-09 15:52 ` [PATCH 1/3] VT-d: properly parenthesize a number of macros Jan Beulich
2021-12-09 15:53 ` [PATCH 2/3] VT-d: use DMA_TLB_IVA_ADDR() Jan Beulich
2021-12-09 15:53 ` Jan Beulich [this message]
2021-12-24 7:42 ` [PATCH 0/3] VT-d: macro definition / use tidying Tian, Kevin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4d1b5bb2-e5a3-e581-1bc2-9ac7eb61af35@suse.com \
--to=jbeulich@suse.com \
--cc=kevin.tian@intel.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.