From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752696AbcGSHjv (ORCPT ); Tue, 19 Jul 2016 03:39:51 -0400 Received: from m199-177.yeah.net ([123.58.177.199]:49970 "EHLO m199-177.yeah.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751959AbcGSHjs (ORCPT ); Tue, 19 Jul 2016 03:39:48 -0400 Subject: Re: [PATCH v2 1/2] vfio : resume notifier To: Zhou Jie , alex.williamson@redhat.com References: <1468913563-21456-1-git-send-email-zhoujie2011@cn.fujitsu.com> <1468913563-21456-2-git-send-email-zhoujie2011@cn.fujitsu.com> Cc: linux-kernel@vger.kernel.org, qemu-devel@nongnu.org, izumi.taku@jp.fujitsu.com, root From: Chen Fan Message-ID: <578DD936.7010800@easystack.cn> Date: Tue, 19 Jul 2016 15:39:34 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: <1468913563-21456-2-git-send-email-zhoujie2011@cn.fujitsu.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-HM-Spam-Status: e1koWUFPN1dZCBgUCR5ZQUNVSENMS0tLS0NIQklISE9XWQkOFx4IWUFZKC s9JDU0NT4kMjUkMz46Pz4pQUtVS0A2IyQiPigkMjUkMz46Pz4pQUtVS0ArLykkNTQkMjUkMz46Pz 4pQUtVS0A4NC41LykiJDg1QUtVS0ApPjwyNDUkOigyOkFLVUtAKyk0LTI1OD4kMTI6NTwoLkFLVU tAPyI1OjYyOCQyKyQ1NCQyNSQzPjo*PilBS1VLQCk#OjckMiskMjUkKTk3JDI1JDM#Oj8#KUFKSV VLQDYuNy8yJCk4Ky8kPzI9PT4pPjUvJDI1JDM#Oj8#KUFJVUtAMiskLzQ*OiIkODUvJEskSktLQU tVS0AyKyRKJDYyNS4vPiQ4NS8kSyRKS0FLVUtAMiskSEskNjI1Li8#JDg1LyRLJE5LQUtVS0AyKy ROJDYyNS4vPiQ4NS8kSyRKS0FLVUtAMiskSiQzNC4pJDg1LyRLJEpLS0FLVUtAKC45MT44LyQvND 86IiQ4NS8kSyRKS0tBS1VLQCguOTE#OC8kSiQzNC4pJDg1LyRLJEpLS0FLVUtAKC45MT44LyROJD YyNS4vPiQ4NS8kSyRKS0FLVUtAKDkxJDc#NSRPSyQjQUtVS0tKS0AvPiMvJDc#NSRKSUNLJCNBS1 VLS0pLQDg1LyQzLzY3JDc#NSRKMCROMEFLVUtLSktAKT44PjItPikkODUvJE4kI0FLVUtLSktAIz Y6Mjc#KSQ1Ljc3QUtVS0tKS0A*PjcyLT4pJDc#NSRLQUtVS0tKS0A3OjU8JD41QUtVS0tKS0A9NS Q2OiIkT0pCJDM3MSRKJEtDS0hLT0FLVUhIQD0rJCk#JD0sJDM3MSRLQ0tIS01BVkxVTkAoLjkkPk FKVU5OQD01JDY6IiRPSkIkMzcxJEkkS0NLSEtPQUtVS1kG X-HM-Sender-Digest: e1kSHx4VD1lBWUc6PAg6Gjo5EjofSTEKDS4QNihDOhZPChVVSlVKT01D QkpIQkxDTUJIVTMWGhIXVR0aFVUYEx4VOx4aCAIIDxoYEFUYFUVZV1kMHhlZQR0aFwgeV1kIAVlB TkJIQjdXWRILWUFZTkNVSUpIVUxJVUlKT1kG X-HM-Tid: 0a5602188bc664277a40f1106de4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016年07月19日 15:32, Zhou Jie wrote: > From: root Pls add your username and email by using git config --global user.name / user.email to update your git config, and git send-email again. Thanks, Chen > > --- > drivers/vfio/pci/vfio_pci.c | 28 +++++++++++++++++++++++++++- > drivers/vfio/pci/vfio_pci_intrs.c | 18 ++++++++++++++++++ > drivers/vfio/pci/vfio_pci_private.h | 1 + > include/uapi/linux/vfio.h | 1 + > 4 files changed, 47 insertions(+), 1 deletion(-) > > diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c > index 188b1ff..2d12b03 100644 > --- a/drivers/vfio/pci/vfio_pci.c > +++ b/drivers/vfio/pci/vfio_pci.c > @@ -363,7 +363,8 @@ static int vfio_pci_get_irq_count(struct vfio_pci_device *vdev, int irq_type) > > return (flags & PCI_MSIX_FLAGS_QSIZE) + 1; > } > - } else if (irq_type == VFIO_PCI_ERR_IRQ_INDEX) { > + } else if (irq_type == VFIO_PCI_ERR_IRQ_INDEX || > + irq_type == VFIO_PCI_RESUME_IRQ_INDEX) { > if (pci_is_pcie(vdev->pdev)) > return 1; > } else if (irq_type == VFIO_PCI_REQ_IRQ_INDEX) { > @@ -731,6 +732,7 @@ static long vfio_pci_ioctl(void *device_data, > case VFIO_PCI_REQ_IRQ_INDEX: > break; > case VFIO_PCI_ERR_IRQ_INDEX: > + case VFIO_PCI_RESUME_IRQ_INDEX: > if (pci_is_pcie(vdev->pdev)) > break; > /* pass thru to return error */ > @@ -1234,8 +1236,32 @@ static pci_ers_result_t vfio_pci_aer_err_detected(struct pci_dev *pdev, > return PCI_ERS_RESULT_CAN_RECOVER; > } > > +static void vfio_pci_aer_resume(struct pci_dev *pdev) > +{ > + struct vfio_pci_device *vdev; > + struct vfio_device *device; > + > + device = vfio_device_get_from_dev(&pdev->dev); > + if (device == NULL) > + return; > + > + vdev = vfio_device_data(device); > + if (vdev == NULL) { > + vfio_device_put(device); > + return; > + } > + > + mutex_lock(&vdev->igate); > + if (vdev->resume_trigger) > + eventfd_signal(vdev->resume_trigger, 1); > + > + mutex_unlock(&vdev->igate); > + vfio_device_put(device); > +} > + > static const struct pci_error_handlers vfio_err_handlers = { > .error_detected = vfio_pci_aer_err_detected, > + .resume = vfio_pci_aer_resume, > }; > > static struct pci_driver vfio_pci_driver = { > diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c > index 15ecfc9..3a01a62 100644 > --- a/drivers/vfio/pci/vfio_pci_intrs.c > +++ b/drivers/vfio/pci/vfio_pci_intrs.c > @@ -617,6 +617,16 @@ static int vfio_pci_set_err_trigger(struct vfio_pci_device *vdev, > return vfio_pci_set_ctx_trigger_single(&vdev->err_trigger, flags, data); > } > > +static int vfio_pci_set_resume_trigger(struct vfio_pci_device *vdev, > + unsigned index, unsigned start, > + unsigned count, uint32_t flags, void *data) > +{ > + if (index != VFIO_PCI_RESUME_IRQ_INDEX) > + return -EINVAL; > + > + return vfio_pci_set_ctx_trigger_single(&vdev->resume_trigger, flags, data); > +} > + > static int vfio_pci_set_req_trigger(struct vfio_pci_device *vdev, > unsigned index, unsigned start, > unsigned count, uint32_t flags, void *data) > @@ -676,6 +686,14 @@ int vfio_pci_set_irqs_ioctl(struct vfio_pci_device *vdev, uint32_t flags, > break; > } > break; > + case VFIO_PCI_RESUME_IRQ_INDEX: > + switch (flags & VFIO_IRQ_SET_ACTION_TYPE_MASK) { > + case VFIO_IRQ_SET_ACTION_TRIGGER: > + if (pci_is_pcie(vdev->pdev)) > + func = vfio_pci_set_resume_trigger; > + break; > + } > + break; > } > > if (!func) > diff --git a/drivers/vfio/pci/vfio_pci_private.h b/drivers/vfio/pci/vfio_pci_private.h > index 016c14a..80d4ddd 100644 > --- a/drivers/vfio/pci/vfio_pci_private.h > +++ b/drivers/vfio/pci/vfio_pci_private.h > @@ -88,6 +88,7 @@ struct vfio_pci_device { > int refcnt; > struct eventfd_ctx *err_trigger; > struct eventfd_ctx *req_trigger; > + struct eventfd_ctx *resume_trigger; > }; > > #define is_intx(vdev) (vdev->irq_type == VFIO_PCI_INTX_IRQ_INDEX) > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h > index 255a211..34ab138 100644 > --- a/include/uapi/linux/vfio.h > +++ b/include/uapi/linux/vfio.h > @@ -433,6 +433,7 @@ enum { > VFIO_PCI_MSIX_IRQ_INDEX, > VFIO_PCI_ERR_IRQ_INDEX, > VFIO_PCI_REQ_IRQ_INDEX, > + VFIO_PCI_RESUME_IRQ_INDEX, > VFIO_PCI_NUM_IRQS > }; > -- Sincerely, Chen Fan