From: Wei Wang <wei.wang2@amd.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: keir@xen.org, xen-devel@lists.xensource.com,
Ian.Jackson@eu.citrix.com, Ian.Campbell@citrix.com
Subject: Re: [PATCH 1 of 6 V5] amd iommu: Add 2 hypercalls for libxc
Date: Fri, 10 Feb 2012 16:42:10 +0100 [thread overview]
Message-ID: <4F353AD2.7030705@amd.com> (raw)
In-Reply-To: <4F3545E8020000780007261B@nat28.tlf.novell.com>
On 02/10/2012 04:29 PM, Jan Beulich wrote:
>>>> On 10.02.12 at 16:07, Wei Wang<wei.wang2@amd.com> wrote:
>> @@ -916,3 +933,45 @@ const struct hvm_mmio_handler iommu_mmio
>> .read_handler = guest_iommu_mmio_read,
>> .write_handler = guest_iommu_mmio_write
>> };
>> +
>> +/* iommu hypercall handler */
>> +int iommu_bind_bdf(struct domain* d, uint16_t gseg, uint16_t gbdf,
>> + uint16_t mseg, uint16_t mbdf)
>> +{
>> + struct pci_dev *pdev;
>> + int ret = -ENODEV;
>> +
>> + if ( !iommu_found() || !iommu_enabled || !iommuv2_enabled )
>> + return ret;
>> +
>> + spin_lock(&pcidevs_lock);
>> +
>> + for_each_pdev( d, pdev )
>> + {
>> + if ( (pdev->seg != mseg) || (pdev->bus != PCI_BUS(mbdf) ) ||
>> + (pdev->devfn != PCI_DEVFN2(mbdf)) )
>> + continue;
>> +
>> + pdev->gseg = gseg;
>> + pdev->gbdf = gbdf;
>> + ret = 0;
>> + }
>> +
>> + spin_unlock(&pcidevs_lock);
>> + return ret;
>> +}
>> +
>> +void iommu_set_msi(struct domain* d, uint16_t vector, uint16_t dest,
>> + uint16_t dest_mode, uint16_t delivery_mode,
>> + uint16_t trig_mode)
>
> Why are these all uint16_t?
uint8_t might better... I will change it.
>
>> +{
>> + struct guest_iommu *iommu = domain_iommu(d);
>> +
>> + if ( !iommu )
>> + return;
>> +
>> + iommu->msi.vector = vector;
>> + iommu->msi.dest = dest;
>> + iommu->msi.dest_mode = dest_mode;
>> + iommu->msi.trig_mode = trig_mode;
>> +}
>> diff -r 593deed8f62d -r 9cf24ad61936 xen/drivers/passthrough/iommu.c
>> --- a/xen/drivers/passthrough/iommu.c Thu Feb 09 06:09:17 2012 -0800
>> +++ b/xen/drivers/passthrough/iommu.c Fri Feb 10 15:49:09 2012 +0100
>> @@ -648,6 +648,40 @@ int iommu_do_domctl(
>> put_domain(d);
>> break;
>>
>> + case XEN_DOMCTL_guest_iommu_op:
>> + {
>> + xen_domctl_guest_iommu_op_t * guest_op;
>> +
>> + if ( unlikely((d = get_domain_by_id(domctl->domain)) == NULL) )
>> + {
>> + gdprintk(XENLOG_ERR,
>> + "XEN_DOMCTL_guest_iommu_op: get_domain_by_id()
>> failed\n");
>> + ret = -EINVAL;
>> + break;
>> + }
>> +
>> + guest_op =&(domctl->u.guest_iommu_op);
>> + switch ( guest_op->op )
>> + {
>> + case XEN_DOMCTL_GUEST_IOMMU_OP_SET_MSI:
>
> Indentation.
can be fixed.
Thanks,
Wei
>
>> + iommu_set_msi(d, guest_op->u.msi.vector,
>> + guest_op->u.msi.dest,
>> + guest_op->u.msi.dest_mode,
>> + guest_op->u.msi.delivery_mode,
>> + guest_op->u.msi.trig_mode);
>> + ret = 0;
>> + break;
>> + case XEN_DOMCTL_GUEST_IOMMU_OP_BIND_BDF:
>> + ret = iommu_bind_bdf(d, guest_op->u.bdf_bind.g_seg,
>> + guest_op->u.bdf_bind.g_bdf,
>> + guest_op->u.bdf_bind.m_seg,
>> + guest_op->u.bdf_bind.m_bdf);
>> + break;
>> + }
>> + put_domain(d);
>> + break;
>> + }
>> +
>> default:
>> ret = -ENOSYS;
>> break;
>> diff -r 593deed8f62d -r 9cf24ad61936 xen/include/public/domctl.h
>> --- a/xen/include/public/domctl.h Thu Feb 09 06:09:17 2012 -0800
>> +++ b/xen/include/public/domctl.h Fri Feb 10 15:49:09 2012 +0100
>> @@ -871,6 +871,31 @@ struct xen_domctl_set_access_required {
>> typedef struct xen_domctl_set_access_required
>> xen_domctl_set_access_required_t;
>> DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_access_required_t);
>>
>> +/* Support for guest iommu emulation */
>> +struct xen_domctl_guest_iommu_op {
>> + /* XEN_DOMCTL_GUEST_IOMMU_OP_* */
>> +#define XEN_DOMCTL_GUEST_IOMMU_OP_SET_MSI 0
>> +#define XEN_DOMCTL_GUEST_IOMMU_OP_BIND_BDF 1
>> + uint8_t op;
>> + union {
>> + struct iommu_msi {
>> + uint8_t vector;
>> + uint8_t dest;
>> + uint8_t dest_mode;
>> + uint8_t delivery_mode;
>> + uint8_t trig_mode;
>
> Indentation again.
>
> Jan
>
>> + } msi;
>> + struct bdf_bind {
>> + uint16_t g_seg;
>> + uint16_t g_bdf;
>> + uint16_t m_seg;
>> + uint16_t m_bdf;
>> + } bdf_bind;
>> + } u;
>> +};
>> +typedef struct xen_domctl_guest_iommu_op xen_domctl_guest_iommu_op_t;
>> +DEFINE_XEN_GUEST_HANDLE(xen_domctl_guest_iommu_op_t);
>> +
>> struct xen_domctl {
>> uint32_t cmd;
>> #define XEN_DOMCTL_createdomain 1
>
>
next prev parent reply other threads:[~2012-02-10 15:42 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-10 15:07 [PATCH 0 of 6 V5] amd iommu: support ats/gpgpu passthru on iommuv2 systems Wei Wang
2012-02-10 15:07 ` [PATCH 1 of 6 V5] amd iommu: Add 2 hypercalls for libxc Wei Wang
2012-02-10 15:29 ` Jan Beulich
2012-02-10 15:42 ` Wei Wang [this message]
2012-02-10 15:07 ` [PATCH 2 of 6 V5] amd iommu: Add a hypercall for hvmloader Wei Wang
2012-02-10 15:07 ` [PATCH 3 of 6 V5] hvmloader: Build IVRS table Wei Wang
2012-02-10 15:07 ` [PATCH 4 of 6 V5] libxc: add wrappers for new hypercalls Wei Wang
2012-02-10 15:07 ` [PATCH 5 of 6 V5] libxl: bind virtual bdf to physical bdf after device assignment Wei Wang
2012-02-10 15:07 ` [PATCH 6 of 6 V5] libxl: Introduce a new guest config file parameter Wei Wang
2012-02-13 16:54 ` [PATCH 0 of 6 V5] amd iommu: support ats/gpgpu passthru on iommuv2 systems Ian Jackson
2012-02-15 9:49 ` Wei Wang
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=4F353AD2.7030705@amd.com \
--to=wei.wang2@amd.com \
--cc=Ian.Campbell@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=JBeulich@suse.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xensource.com \
/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.