Messages in this thread | | | Date | Fri, 13 Jan 2023 22:12:48 +0800 | Subject | Re: [PATCH 3/7] iommu/vt-d: Support Enhanced Command Interface | From | Baolu Lu <> |
| |
On 2023/1/13 21:55, Baolu Lu wrote: >> +/* >> + * Function to submit a command to the enhanced command interface. The >> + * valid enhanced command descriptions are defined in Table 47 of the >> + * VT-d spec. The VT-d hardware implementation may support some but not >> + * all commands, which can be determined by checking the Enhanced >> + * Command Capability Register. >> + * >> + * Return values: >> + * - 0: Command successful without any error; >> + * - Negative: software error value; >> + * - Nonzero positive: failure status code defined in Table 48. >> + */ >> +int ecmd_submit_sync(struct intel_iommu *iommu, u8 ecmd, >> + u64 oa, bool has_ob, u64 ob) >> +{ >> + unsigned long flags; >> + u64 res; >> + int ret; >> + >> + if (!cap_ecmds(iommu->cap)) >> + return -ENODEV; >> + >> + raw_spin_lock_irqsave(&iommu->register_lock, flags); >> + >> + res = dmar_readq(iommu->reg + DMAR_ECRSP_REG); >> + if (res & DMA_ECMD_ECRSP_IP) { >> + ret = -EBUSY; >> + goto err; >> + } >> + >> + if (has_ob) >> + dmar_writeq(iommu->reg + DMAR_ECEO_REG, ob); > > The ecmds that require a Operand B are statically defined in the spec, > right? What will it look like if we define a static ignore_ob(ecmd)?
Or simply remove has_ob parameter? The least case is an unnecessary write to a register. It's fine as far as I can see since we should avoid using it in any critical path.
-- Best regards, baolu
| |