All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@linaro.org>
To: eric.auger@st.com, eric.auger@linaro.org,
	christoffer.dall@linaro.org,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	alex.williamson@redhat.com, b.reynal@virtualopensystems.com
Cc: linux-kernel@vger.kernel.org, patches@linaro.org, agraf@suse.de,
	Bharat.Bhushan@freescale.com
Subject: [PATCH 0/5] VFIO platform reset
Date: Thu,  7 May 2015 16:27:18 +0200	[thread overview]
Message-ID: <1431008843-28411-1-git-send-email-eric.auger@linaro.org> (raw)

In situations where the userspace driver is stopped abnormally and the
VFIO platform device is released, the assigned HW device currently is
left running. As a consequence the HW device might continue issuing IRQs
and performing DMA accesses.

On release, no physical IRQ handler is setup anymore. Also the DMA buffers
are unmapped leading to IOMMU aborts. So there is no serious consequence.

However when assigning that HW device again to another userspace driver,
this latter might face some unexpected IRQs and DMA accesses, which are
the result of the previous assignment.

In virtualization use-case, a VM newly granted with that HW device may be
impacted by the assignment of that device to a previous VM:
- IRQs may be injected very early when booting the new guest, even before
  the guest driver has initialized leading to possible driver state
  inconsistency.
- DMA accesses may hit the newly mapped VM address space at addresses that
  may jeopardize the integrity of the newly installed VM.

Obviously the criticity depends on the assigned HW devcie.

As opposed to PCI, there is no standard mechanism to reset the platform
device.

This series proposes to implement device specific reset functions in
separate vfio modules (in-kernel or external). The reset module only
registers/unregisters a reset function to the vfio platform driver using
a dedicated API, paired with the device compatibility string.

The platform driver then look for the reset function that matches the
compatibility string of the device. In case of match the device specific
reset can be applied on release and on VFIO_DEVICE_GET_INFO and
VFIO_DEVICE_RESET ioctls.

A first reset module is provided: the vfio-platform-calxedaxgmac
module. It implements a basic reset for the Calxeda xgmac.

Amba device reset is not tested.

Best Regards

Eric

The series can be found at
https://git.linaro.org/people/eric.auger/linux.git/shortlog/refs/heads/v4.1-rc2-reset

RFC -> PATCH v1:
- solution now based on a lookup list instead of specialized driver


Eric Auger (5):
  VFIO: platform: add reset_list and register/unregister functions
  VFIO: platform: add get_device callback
  VFIO: platform: add reset callback
  VFIO: platform: populate reset function according to compat
  VFIO: platform: VFIO platform Calxeda xgmac reset module

 drivers/vfio/platform/Kconfig                      |   2 +
 drivers/vfio/platform/Makefile                     |   2 +
 drivers/vfio/platform/reset/Kconfig                |   7 ++
 drivers/vfio/platform/reset/Makefile               |   5 +
 .../platform/reset/vfio_platform_calxedaxgmac.c    | 121 ++++++++++++++++++++
 drivers/vfio/platform/vfio_amba.c                  |   9 ++
 drivers/vfio/platform/vfio_platform.c              |  10 ++
 drivers/vfio/platform/vfio_platform_common.c       | 125 ++++++++++++++++++++-
 drivers/vfio/platform/vfio_platform_private.h      |  15 +++
 9 files changed, 294 insertions(+), 2 deletions(-)
 create mode 100644 drivers/vfio/platform/reset/Kconfig
 create mode 100644 drivers/vfio/platform/reset/Makefile
 create mode 100644 drivers/vfio/platform/reset/vfio_platform_calxedaxgmac.c

-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: eric.auger@linaro.org (Eric Auger)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/5] VFIO platform reset
Date: Thu,  7 May 2015 16:27:18 +0200	[thread overview]
Message-ID: <1431008843-28411-1-git-send-email-eric.auger@linaro.org> (raw)

In situations where the userspace driver is stopped abnormally and the
VFIO platform device is released, the assigned HW device currently is
left running. As a consequence the HW device might continue issuing IRQs
and performing DMA accesses.

On release, no physical IRQ handler is setup anymore. Also the DMA buffers
are unmapped leading to IOMMU aborts. So there is no serious consequence.

However when assigning that HW device again to another userspace driver,
this latter might face some unexpected IRQs and DMA accesses, which are
the result of the previous assignment.

In virtualization use-case, a VM newly granted with that HW device may be
impacted by the assignment of that device to a previous VM:
- IRQs may be injected very early when booting the new guest, even before
  the guest driver has initialized leading to possible driver state
  inconsistency.
- DMA accesses may hit the newly mapped VM address space at addresses that
  may jeopardize the integrity of the newly installed VM.

Obviously the criticity depends on the assigned HW devcie.

As opposed to PCI, there is no standard mechanism to reset the platform
device.

This series proposes to implement device specific reset functions in
separate vfio modules (in-kernel or external). The reset module only
registers/unregisters a reset function to the vfio platform driver using
a dedicated API, paired with the device compatibility string.

The platform driver then look for the reset function that matches the
compatibility string of the device. In case of match the device specific
reset can be applied on release and on VFIO_DEVICE_GET_INFO and
VFIO_DEVICE_RESET ioctls.

A first reset module is provided: the vfio-platform-calxedaxgmac
module. It implements a basic reset for the Calxeda xgmac.

Amba device reset is not tested.

Best Regards

Eric

The series can be found at
https://git.linaro.org/people/eric.auger/linux.git/shortlog/refs/heads/v4.1-rc2-reset

RFC -> PATCH v1:
- solution now based on a lookup list instead of specialized driver


Eric Auger (5):
  VFIO: platform: add reset_list and register/unregister functions
  VFIO: platform: add get_device callback
  VFIO: platform: add reset callback
  VFIO: platform: populate reset function according to compat
  VFIO: platform: VFIO platform Calxeda xgmac reset module

 drivers/vfio/platform/Kconfig                      |   2 +
 drivers/vfio/platform/Makefile                     |   2 +
 drivers/vfio/platform/reset/Kconfig                |   7 ++
 drivers/vfio/platform/reset/Makefile               |   5 +
 .../platform/reset/vfio_platform_calxedaxgmac.c    | 121 ++++++++++++++++++++
 drivers/vfio/platform/vfio_amba.c                  |   9 ++
 drivers/vfio/platform/vfio_platform.c              |  10 ++
 drivers/vfio/platform/vfio_platform_common.c       | 125 ++++++++++++++++++++-
 drivers/vfio/platform/vfio_platform_private.h      |  15 +++
 9 files changed, 294 insertions(+), 2 deletions(-)
 create mode 100644 drivers/vfio/platform/reset/Kconfig
 create mode 100644 drivers/vfio/platform/reset/Makefile
 create mode 100644 drivers/vfio/platform/reset/vfio_platform_calxedaxgmac.c

-- 
1.9.1

             reply	other threads:[~2015-05-07 14:30 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-07 14:27 Eric Auger [this message]
2015-05-07 14:27 ` [PATCH 0/5] VFIO platform reset Eric Auger
2015-05-07 14:27 ` [PATCH 1/5] VFIO: platform: add reset_list and register/unregister functions Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-13 18:32   ` Alex Williamson
2015-05-13 18:32     ` Alex Williamson
2015-05-13 18:32     ` Alex Williamson
2015-05-14  8:25     ` Eric Auger
2015-05-14  8:25       ` Eric Auger
2015-05-14  8:25       ` Eric Auger
2015-05-14 15:42       ` Alex Williamson
2015-05-14 15:42         ` Alex Williamson
2015-05-07 14:27 ` [PATCH 2/5] VFIO: platform: add get_device callback Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-13 18:32   ` Alex Williamson
2015-05-13 18:32     ` Alex Williamson
2015-05-14  8:28     ` Eric Auger
2015-05-14  8:28       ` Eric Auger
2015-05-14  8:28       ` Eric Auger
2015-05-07 14:27 ` [PATCH 3/5] VFIO: platform: add reset callback Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-13 18:32   ` Alex Williamson
2015-05-13 18:32     ` Alex Williamson
2015-05-13 18:32     ` Alex Williamson
2015-05-14  8:39     ` Eric Auger
2015-05-14  8:39       ` Eric Auger
2015-05-14  8:39       ` Eric Auger
2015-05-07 14:27 ` [PATCH 4/5] VFIO: platform: populate reset function according to compat Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-13 18:33   ` Alex Williamson
2015-05-13 18:33     ` Alex Williamson
2015-05-13 18:33     ` Alex Williamson
2015-05-14  8:57     ` Eric Auger
2015-05-14  8:57       ` Eric Auger
2015-05-14  8:57       ` Eric Auger
2015-05-14 15:30       ` Alex Williamson
2015-05-14 15:30         ` Alex Williamson
2015-05-07 14:27 ` [PATCH 5/5] VFIO: platform: VFIO platform Calxeda xgmac reset module Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-07 14:27   ` Eric Auger
2015-05-13 18:33   ` Alex Williamson
2015-05-13 18:33     ` Alex Williamson
2015-05-13 18:33     ` Alex Williamson
2015-05-14  9:06     ` Eric Auger
2015-05-14  9:06       ` Eric Auger
2015-05-14  9:06       ` Eric Auger
2015-05-14 15:14       ` Alex Williamson
2015-05-14 15:14         ` Alex Williamson
2015-05-15 13:35         ` Eric Auger
2015-05-15 13:35           ` Eric Auger
2015-05-15 13:35           ` Eric Auger

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=1431008843-28411-1-git-send-email-eric.auger@linaro.org \
    --to=eric.auger@linaro.org \
    --cc=Bharat.Bhushan@freescale.com \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=b.reynal@virtualopensystems.com \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@st.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=patches@linaro.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.