linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/05] virtio_pci modern driver fixups
@ 2015-01-20 16:25 Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 01/05] fixup! virtio_pci: modern driver Michael S. Tsirkin
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell

These are fixup patches for virtio pci modern.
I think it's best to simply squash them in the
appropriate original patches - rebase -i and then apply,
then rebase -i --autosquash to do this automatically.

You can also find how your branch looks with patches applied
but before the rebase -i --autosquash in my tree:
	git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git virtio-next
or after rebase -i --autosquash:
	git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git vhost-next

Last patch is a cleanup, does not have to be squashed.

Or if it's all too much bother, I can repost the whole series after fixups.

Michael S. Tsirkin (15):
  fixup! virtio_pci: modern driver
  fixup! virtio_pci: modern driver
  fixup! virtio_pci: macros for PCI layout offsets
  fixup! virtio_pci: add module param to force legacy mode
  virtio_pci_modern: drop an unused function

-- 
MST


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 01/05] fixup! virtio_pci: modern driver
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
@ 2015-01-20 16:25 ` Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 02/05] " Michael S. Tsirkin
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell, virtualization, linux-api

virtio_pci_modern: fix up vendor capability

Gerd Hoffmann noticed that we implemented
capability layout from an old draft.
Unfortunately the code was copied to host as well,
so we didn't notice.

Luckily we caught this in time.

This fixes commit "virtio_pci: modern driver"
and should be smashed with it.

Reported-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/uapi/linux/virtio_pci.h    |  7 ++++---
 drivers/virtio/virtio_pci_modern.c | 23 +++++++++--------------
 2 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/include/uapi/linux/virtio_pci.h b/include/uapi/linux/virtio_pci.h
index 4e05423..a2b2e13 100644
--- a/include/uapi/linux/virtio_pci.h
+++ b/include/uapi/linux/virtio_pci.h
@@ -117,10 +117,11 @@ struct virtio_pci_cap {
 	__u8 cap_vndr;		/* Generic PCI field: PCI_CAP_ID_VNDR */
 	__u8 cap_next;		/* Generic PCI field: next ptr. */
 	__u8 cap_len;		/* Generic PCI field: capability length */
-	__u8 type_and_bar;	/* Upper 3 bits: bar.
-				 * Lower 3 is VIRTIO_PCI_CAP_*_CFG. */
+	__u8 cfg_type;		/* Identifies the structure. */
+	__u8 bar;		/* Where to find it. */
+	__u8 padding[3];	/* Pad to full dword. */
 	__le32 offset;		/* Offset within bar. */
-	__le32 length;		/* Length. */
+	__le32 length;		/* Length of the structure, in bytes. */
 };
 
 #define VIRTIO_PCI_CAP_BAR_SHIFT	5
diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
index e2f41c9..a3d8101 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -26,13 +26,13 @@ static void __iomem *map_capability(struct pci_dev *dev, int off,
 				    u32 start, u32 size,
 				    size_t *len)
 {
-	u8 type_and_bar, bar;
+	u8 bar;
 	u32 offset, length;
 	void __iomem *p;
 
 	pci_read_config_byte(dev, off + offsetof(struct virtio_pci_cap,
-						 type_and_bar),
-			     &type_and_bar);
+						 bar),
+			     &bar);
 	pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap, offset),
 			     &offset);
 	pci_read_config_dword(dev, off + offsetof(struct virtio_pci_cap, length),
@@ -76,9 +76,6 @@ static void __iomem *map_capability(struct pci_dev *dev, int off,
 	if (len)
 		*len = length;
 
-	bar = (type_and_bar >> VIRTIO_PCI_CAP_BAR_SHIFT) &
-		VIRTIO_PCI_CAP_BAR_MASK;
-
 	if (minlen + offset < minlen ||
 	    minlen + offset > pci_resource_len(dev, bar)) {
 		dev_err(&dev->dev,
@@ -438,15 +435,13 @@ static inline int virtio_pci_find_capability(struct pci_dev *dev, u8 cfg_type,
 	for (pos = pci_find_capability(dev, PCI_CAP_ID_VNDR);
 	     pos > 0;
 	     pos = pci_find_next_capability(dev, pos, PCI_CAP_ID_VNDR)) {
-		u8 type_and_bar, type, bar;
+		u8 type, bar;
 		pci_read_config_byte(dev, pos + offsetof(struct virtio_pci_cap,
-							 type_and_bar),
-				     &type_and_bar);
-
-		type = (type_and_bar >> VIRTIO_PCI_CAP_TYPE_SHIFT) &
-			VIRTIO_PCI_CAP_TYPE_MASK;
-		bar = (type_and_bar >> VIRTIO_PCI_CAP_BAR_SHIFT) &
-			VIRTIO_PCI_CAP_BAR_MASK;
+							 cfg_type),
+				     &type);
+		pci_read_config_byte(dev, pos + offsetof(struct virtio_pci_cap,
+							 bar),
+				     &bar);
 
 		/* Ignore structures with reserved BAR values */
 		if (bar > 0x5)
-- 
MST


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 02/05] fixup! virtio_pci: modern driver
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 01/05] fixup! virtio_pci: modern driver Michael S. Tsirkin
@ 2015-01-20 16:25 ` Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 03/05] fixup! virtio_pci: macros for PCI layout offsets Michael S. Tsirkin
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell, virtualization

virtio modern: fix up fallback logic

This bails out if modern driver succeeds - not what we wanted.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 drivers/virtio/virtio_pci_common.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 20c7638..8ae34a3 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -506,10 +506,8 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
 		goto err_request_regions;
 
 	rc = virtio_pci_modern_probe(vp_dev);
-	if (rc != -ENODEV)
-		return rc;
-
-	rc = virtio_pci_legacy_probe(vp_dev);
+	if (rc == -ENODEV)
+		rc = virtio_pci_legacy_probe(vp_dev);
 	if (rc)
 		goto err_probe;
 
-- 
MST


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 03/05] fixup! virtio_pci: macros for PCI layout offsets
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 01/05] fixup! virtio_pci: modern driver Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 02/05] " Michael S. Tsirkin
@ 2015-01-20 16:25 ` Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 04/05] fixup! virtio_pci: add module param to force legacy mode Michael S. Tsirkin
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell, virtualization, linux-api

virtio_pci_modern: fix up vendor capability macros

Gerd Hoffmann noticed that we implemented
capability layout from an old draft.
Unfortunately the code was copied to host as well,
so we didn't notice.

Luckily we caught this in time.

This fixes commit "virtio_pci: macros for PCI layout offsets"
and should be smashed with it.

Reported-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/uapi/linux/virtio_pci.h    | 14 +++++---------
 drivers/virtio/virtio_pci_modern.c |  6 ++++--
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/include/uapi/linux/virtio_pci.h b/include/uapi/linux/virtio_pci.h
index 0911c62..3b7e4d2 100644
--- a/include/uapi/linux/virtio_pci.h
+++ b/include/uapi/linux/virtio_pci.h
@@ -124,11 +124,6 @@ struct virtio_pci_cap {
 	__le32 length;		/* Length of the structure, in bytes. */
 };
 
-#define VIRTIO_PCI_CAP_BAR_SHIFT	5
-#define VIRTIO_PCI_CAP_BAR_MASK		0x7
-#define VIRTIO_PCI_CAP_TYPE_SHIFT	0
-#define VIRTIO_PCI_CAP_TYPE_MASK	0x7
-
 struct virtio_pci_notify_cap {
 	struct virtio_pci_cap cap;
 	__le32 notify_off_multiplier;	/* Multiplier for queue_notify_off. */
@@ -164,11 +159,12 @@ struct virtio_pci_common_cfg {
 #define VIRTIO_PCI_CAP_VNDR		0
 #define VIRTIO_PCI_CAP_NEXT		1
 #define VIRTIO_PCI_CAP_LEN		2
-#define VIRTIO_PCI_CAP_TYPE_AND_BAR	3
-#define VIRTIO_PCI_CAP_OFFSET		4
-#define VIRTIO_PCI_CAP_LENGTH		8
+#define VIRTIO_PCI_CAP_CFG_TYPE		3
+#define VIRTIO_PCI_CAP_BAR		4
+#define VIRTIO_PCI_CAP_OFFSET		8
+#define VIRTIO_PCI_CAP_LENGTH		12
 
-#define VIRTIO_PCI_NOTIFY_CAP_MULT	12
+#define VIRTIO_PCI_NOTIFY_CAP_MULT	16
 
 #define VIRTIO_PCI_COMMON_DFSELECT	0
 #define VIRTIO_PCI_COMMON_DF		4
diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
index c86594e..b2e707ad 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -474,8 +474,10 @@ static inline void check_offsets(void)
 		     offsetof(struct virtio_pci_cap, cap_next));
 	BUILD_BUG_ON(VIRTIO_PCI_CAP_LEN !=
 		     offsetof(struct virtio_pci_cap, cap_len));
-	BUILD_BUG_ON(VIRTIO_PCI_CAP_TYPE_AND_BAR !=
-		     offsetof(struct virtio_pci_cap, type_and_bar));
+	BUILD_BUG_ON(VIRTIO_PCI_CAP_CFG_TYPE !=
+		     offsetof(struct virtio_pci_cap, cfg_type));
+	BUILD_BUG_ON(VIRTIO_PCI_CAP_BAR !=
+		     offsetof(struct virtio_pci_cap, bar));
 	BUILD_BUG_ON(VIRTIO_PCI_CAP_OFFSET !=
 		     offsetof(struct virtio_pci_cap, offset));
 	BUILD_BUG_ON(VIRTIO_PCI_CAP_LENGTH !=
-- 
MST


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 04/05] fixup! virtio_pci: add module param to force legacy mode
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
                   ` (2 preceding siblings ...)
  2015-01-20 16:25 ` [PATCH 03/05] fixup! virtio_pci: macros for PCI layout offsets Michael S. Tsirkin
@ 2015-01-20 16:25 ` Michael S. Tsirkin
  2015-01-20 16:25 ` [PATCH 05/05] virtio_pci_modern: drop an unused function Michael S. Tsirkin
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell, virtualization

virtio modern: fix up fallback logic with force_legacy

This bails out if legacy driver succeeds - not what we wanted.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 drivers/virtio/virtio_pci_common.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 0f87b99..e894eb2 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -516,18 +516,14 @@ static int virtio_pci_probe(struct pci_dev *pci_dev,
 	if (force_legacy) {
 		rc = virtio_pci_legacy_probe(vp_dev);
 		/* Also try modern mode if we can't map BAR0 (no IO space). */
-		if (rc != -ENODEV && rc != -ENOMEM)
-			return rc;
-
-		rc = virtio_pci_modern_probe(vp_dev);
+		if (rc == -ENODEV || rc == -ENOMEM)
+			rc = virtio_pci_modern_probe(vp_dev);
 		if (rc)
 			goto err_probe;
 	} else {
 		rc = virtio_pci_modern_probe(vp_dev);
-		if (rc != -ENODEV)
-			return rc;
-
-		rc = virtio_pci_legacy_probe(vp_dev);
+		if (rc == -ENODEV)
+			rc = virtio_pci_legacy_probe(vp_dev);
 		if (rc)
 			goto err_probe;
 	}
-- 
MST


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 05/05] virtio_pci_modern: drop an unused function
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
                   ` (3 preceding siblings ...)
  2015-01-20 16:25 ` [PATCH 04/05] fixup! virtio_pci: add module param to force legacy mode Michael S. Tsirkin
@ 2015-01-20 16:25 ` Michael S. Tsirkin
  2015-01-21  6:00 ` [PATCH 00/05] virtio_pci modern driver fixups Rusty Russell
  2015-01-21 13:40 ` Gerd Hoffmann
  6 siblings, 0 replies; 8+ messages in thread
From: Michael S. Tsirkin @ 2015-01-20 16:25 UTC (permalink / raw)
  To: linux-kernel; +Cc: kraxel, Rusty Russell, virtualization

release function in modern driver is unused:
it's a left-over from when each driver had
to have its own release.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 drivers/virtio/virtio_pci_modern.c | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
index 68ebc20..f16e462 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -489,14 +489,6 @@ static inline int virtio_pci_find_capability(struct pci_dev *dev, u8 cfg_type,
 	return 0;
 }
 
-static void virtio_pci_release_dev(struct device *_d)
-{
-	struct virtio_device *vdev = dev_to_virtio(_d);
-	struct virtio_pci_device *vp_dev = to_vp_device(vdev);
-
-	kfree(vp_dev);
-}
-
 /* This is part of the ABI.  Don't screw with it. */
 static inline void check_offsets(void)
 {
-- 
MST


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 00/05] virtio_pci modern driver fixups
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
                   ` (4 preceding siblings ...)
  2015-01-20 16:25 ` [PATCH 05/05] virtio_pci_modern: drop an unused function Michael S. Tsirkin
@ 2015-01-21  6:00 ` Rusty Russell
  2015-01-21 13:40 ` Gerd Hoffmann
  6 siblings, 0 replies; 8+ messages in thread
From: Rusty Russell @ 2015-01-21  6:00 UTC (permalink / raw)
  To: Michael S. Tsirkin, linux-kernel; +Cc: kraxel

"Michael S. Tsirkin" <mst@redhat.com> writes:
> These are fixup patches for virtio pci modern.
> I think it's best to simply squash them in the
> appropriate original patches - rebase -i and then apply,
> then rebase -i --autosquash to do this automatically.

I do not like rebasing virtio-next.  However, as I've already
done it once today, I've rebased again.

These kind of issues have made it more urgent that I get virtio-1.0-pci
working with lguest, to see if we are at least bug-compatible.

Thanks,
Rusty.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 00/05] virtio_pci modern driver fixups
  2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
                   ` (5 preceding siblings ...)
  2015-01-21  6:00 ` [PATCH 00/05] virtio_pci modern driver fixups Rusty Russell
@ 2015-01-21 13:40 ` Gerd Hoffmann
  6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2015-01-21 13:40 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: linux-kernel, Rusty Russell

  Hi,

> or after rebase -i --autosquash:
> 	git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git vhost-next

This git branch (with qemu side updated too obviously):

Tested-by: Gerd Hoffmann <kraxel@redhat.com>

cheers,
  Gerd



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-01-21 23:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-20 16:25 [PATCH 00/05] virtio_pci modern driver fixups Michael S. Tsirkin
2015-01-20 16:25 ` [PATCH 01/05] fixup! virtio_pci: modern driver Michael S. Tsirkin
2015-01-20 16:25 ` [PATCH 02/05] " Michael S. Tsirkin
2015-01-20 16:25 ` [PATCH 03/05] fixup! virtio_pci: macros for PCI layout offsets Michael S. Tsirkin
2015-01-20 16:25 ` [PATCH 04/05] fixup! virtio_pci: add module param to force legacy mode Michael S. Tsirkin
2015-01-20 16:25 ` [PATCH 05/05] virtio_pci_modern: drop an unused function Michael S. Tsirkin
2015-01-21  6:00 ` [PATCH 00/05] virtio_pci modern driver fixups Rusty Russell
2015-01-21 13:40 ` Gerd Hoffmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).