Re: [PATCH RESEND] virtio: virtio_pci_legacy: Remove default y from Kconfig
On Fri, Feb 28, 2020 at 03:27:36PM -0800, Ram Muthiah wrote: > The legacy pci driver should no longer be default enabled. QEMU has > implemented support for Virtio 1 for virtio-pci since June 2015 > on SHA dfb8e184db75. > > Signed-off-by: Ram Muthiah I see little reason to do this: y is safer and will boot on more hypervisors, so people that aren't sure should enable it. > --- > drivers/virtio/Kconfig | 6 -- > 1 file changed, 6 deletions(-) > > diff --git a/drivers/virtio/Kconfig b/drivers/virtio/Kconfig > index 078615cf2afc..eacd0b90d32b 100644 > --- a/drivers/virtio/Kconfig > +++ b/drivers/virtio/Kconfig > @@ -26,7 +26,6 @@ config VIRTIO_PCI > > config VIRTIO_PCI_LEGACY > bool "Support for legacy virtio draft 0.9.X and older devices" > - default y > depends on VIRTIO_PCI > ---help--- >Virtio PCI Card 0.9.X Draft (circa 2014) and older device support. > @@ -36,11 +35,6 @@ config VIRTIO_PCI_LEGACY > If disabled, you get a slightly smaller, non-transitional driver, > with no legacy compatibility. > > - So look out into your driveway. Do you have a flying car? If > - so, you can happily disable this option and virtio will not > - break. Otherwise, leave it set. Unless you're testing what > - life will be like in The Future. > - > If unsure, say Y. > > config VIRTIO_PMEM > -- > 2.25.0.265.gbab2e86ba0-goog ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 1/3] virtio-net: Introduce extended RSC feature
VIRTIO_NET_F_RSC_EXT feature bit indicates that the device is able to provide extended RSC information. When the feature is negotiatede and 'gso_type' field in received packet is not GSO_NONE, the device reports number of coalesced packets in 'csum_start' field and number of duplicated acks in 'csum_offset' field and sets VIRTIO_NET_HDR_F_RSC_INFO in 'flags' field. Signed-off-by: Yuri Benditovich --- include/uapi/linux/virtio_net.h | 12 ++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index a3715a3224c1..6e26a2cc6ad0 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h @@ -57,6 +57,7 @@ * Steering */ #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ +#define VIRTIO_NET_F_RSC_EXT 61/* extended coalescing info */ #define VIRTIO_NET_F_STANDBY 62/* Act as standby for another device * with the same MAC. */ @@ -104,6 +105,7 @@ struct virtio_net_config { struct virtio_net_hdr_v1 { #define VIRTIO_NET_HDR_F_NEEDS_CSUM1 /* Use csum_start, csum_offset */ #define VIRTIO_NET_HDR_F_DATA_VALID2 /* Csum is valid */ +#define VIRTIO_NET_HDR_F_RSC_INFO 4 /* rsc info in csum_ fields */ __u8 flags; #define VIRTIO_NET_HDR_GSO_NONE0 /* Not a GSO frame */ #define VIRTIO_NET_HDR_GSO_TCPV4 1 /* GSO frame, IPv4 TCP (TSO) */ @@ -113,8 +115,14 @@ struct virtio_net_hdr_v1 { __u8 gso_type; __virtio16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ __virtio16 gso_size;/* Bytes to append to hdr_len per frame */ - __virtio16 csum_start; /* Position to start checksumming from */ - __virtio16 csum_offset; /* Offset after that to place checksum */ + union { + __virtio16 csum_start; /* Position to start checksumming from */ + __virtio16 rsc_ext_num_packets; /* num of coalesced packets */ + }; + union { + __virtio16 csum_offset; /* Offset after that to place checksum */ + __virtio16 rsc_ext_num_dupacks; /* num of duplicated acks */ + }; __virtio16 num_buffers; /* Number of merged rx buffers */ }; -- 2.17.1 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 3/3] virtio-net: Introduce hash report feature
The feature VIRTIO_NET_F_HASH_REPORT extends the layout of the packet and requests the device to calculate hash on incoming packets and report it in the packet header. Signed-off-by: Yuri Benditovich --- include/uapi/linux/virtio_net.h | 36 + 1 file changed, 36 insertions(+) diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index 7a342657fb6c..6d7230469c57 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h @@ -57,6 +57,7 @@ * Steering */ #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ +#define VIRTIO_NET_F_HASH_REPORT 57 /* Supports hash report */ #define VIRTIO_NET_F_RSS 60/* Supports RSS RX steering */ #define VIRTIO_NET_F_RSC_EXT 61/* extended coalescing info */ #define VIRTIO_NET_F_STANDBY 62/* Act as standby for another device @@ -144,6 +145,23 @@ struct virtio_net_hdr_v1 { __virtio16 num_buffers; /* Number of merged rx buffers */ }; +struct virtio_net_hdr_v1_hash { + struct virtio_net_hdr_v1 hdr; + __virtio32 hash_value; +#define VIRTIO_NET_HASH_REPORT_NONE0 +#define VIRTIO_NET_HASH_REPORT_IPv41 +#define VIRTIO_NET_HASH_REPORT_TCPv4 2 +#define VIRTIO_NET_HASH_REPORT_UDPv4 3 +#define VIRTIO_NET_HASH_REPORT_IPv64 +#define VIRTIO_NET_HASH_REPORT_TCPv6 5 +#define VIRTIO_NET_HASH_REPORT_UDPv6 6 +#define VIRTIO_NET_HASH_REPORT_IPv6_EX 7 +#define VIRTIO_NET_HASH_REPORT_TCPv6_EX8 +#define VIRTIO_NET_HASH_REPORT_UDPv6_EX9 + __virtio16 hash_report; + __virtio16 padding; +}; + #ifndef VIRTIO_NET_NO_LEGACY /* This header comes first in the scatter-gather list. * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must @@ -292,6 +310,24 @@ struct virtio_net_rss_config { #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1 +/* + * The command VIRTIO_NET_CTRL_MQ_HASH_CONFIG requests the device + * to include in the virtio header of the packet the value of the + * calculated hash and the report type of hash. It also provides + * parameters for hash calculation. The command requires feature + * VIRTIO_NET_F_HASH_REPORT to be negotiated to extend the + * layout of virtio header as defined in virtio_net_hdr_v1_hash. + */ +struct virtio_net_hash_config { + __virtio32 hash_types; + /* for compatibility with virtio_net_rss_config */ + __virtio16 reserved[4]; + __u8 hash_key_length; + __u8 hash_key_data[/*hash_key_length*/]; +}; + + #define VIRTIO_NET_CTRL_MQ_HASH_CONFIG 2 + /* * Control network offloads * -- 2.17.1 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 2/3] virtio-net: Introduce RSS receive steering feature
RSS (Receive-side scaling) defines hash calculation rules and decision on receive virtqueue according to the calculated hash, provided mask to apply and provided indirection table containing indices of receive virqueues. The driver sends the control command to enable multiqueue and provide parameters for receive steering. Signed-off-by: Yuri Benditovich --- include/uapi/linux/virtio_net.h | 42 +++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/virtio_net.h b/include/uapi/linux/virtio_net.h index 6e26a2cc6ad0..7a342657fb6c 100644 --- a/include/uapi/linux/virtio_net.h +++ b/include/uapi/linux/virtio_net.h @@ -57,6 +57,7 @@ * Steering */ #define VIRTIO_NET_F_CTRL_MAC_ADDR 23 /* Set MAC address */ +#define VIRTIO_NET_F_RSS 60/* Supports RSS RX steering */ #define VIRTIO_NET_F_RSC_EXT 61/* extended coalescing info */ #define VIRTIO_NET_F_STANDBY 62/* Act as standby for another device * with the same MAC. @@ -70,6 +71,17 @@ #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ #define VIRTIO_NET_S_ANNOUNCE 2 /* Announcement is needed */ +/* supported/enabled hash types */ +#define VIRTIO_NET_RSS_HASH_TYPE_IPv4 (1 << 0) +#define VIRTIO_NET_RSS_HASH_TYPE_TCPv4 (1 << 1) +#define VIRTIO_NET_RSS_HASH_TYPE_UDPv4 (1 << 2) +#define VIRTIO_NET_RSS_HASH_TYPE_IPv6 (1 << 3) +#define VIRTIO_NET_RSS_HASH_TYPE_TCPv6 (1 << 4) +#define VIRTIO_NET_RSS_HASH_TYPE_UDPv6 (1 << 5) +#define VIRTIO_NET_RSS_HASH_TYPE_IP_EX (1 << 6) +#define VIRTIO_NET_RSS_HASH_TYPE_TCP_EX(1 << 7) +#define VIRTIO_NET_RSS_HASH_TYPE_UDP_EX(1 << 8) + struct virtio_net_config { /* The config defining mac address (if VIRTIO_NET_F_MAC) */ __u8 mac[ETH_ALEN]; @@ -93,6 +105,12 @@ struct virtio_net_config { * Any other value stands for unknown. */ __u8 duplex; + /* maximal size of RSS key */ + __u8 rss_max_key_size; + /* maximal number of indirection table entries */ + __u16 rss_max_indirection_table_length; + /* bitmask of supported VIRTIO_NET_RSS_HASH_ types */ + __u32 supported_hash_types; } __attribute__((packed)); /* @@ -236,7 +254,9 @@ struct virtio_net_ctrl_mac { /* * Control Receive Flow Steering - * + */ +#define VIRTIO_NET_CTRL_MQ 4 +/* * The command VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET * enables Receive Flow Steering, specifying the number of the transmit and * receive queues that will be used. After the command is consumed and acked by @@ -249,11 +269,29 @@ struct virtio_net_ctrl_mq { __virtio16 virtqueue_pairs; }; -#define VIRTIO_NET_CTRL_MQ 4 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET0 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN1 #define VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX0x8000 +/* + * The command VIRTIO_NET_CTRL_MQ_RSS_CONFIG has the same effect as + * VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET does and additionally configures + * the receive steering to use a hash calculated for incoming packet + * to decide on receive virtqueue to place the packet. The command + * also provides parameters to calculate a hash and receive virtqueue. + */ +struct virtio_net_rss_config { + __virtio32 hash_types; + __virtio16 indirection_table_mask; + __virtio16 unclassified_queue; + __virtio16 indirection_table[1/* + indirection_table_mask*/]; + __virtio16 max_tx_vq; + __u8 hash_key_length; + __u8 hash_key_data[/*hash_key_length*/]; +}; + + #define VIRTIO_NET_CTRL_MQ_RSS_CONFIG 1 + /* * Control network offloads * -- 2.17.1 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
[PATCH 0/3] virtio-net: introduce features defined in the spec
This series introduce virtio-net features VIRTIO_NET_F_RSC_EXT, VIRTIO_NET_F_RSS and VIRTIO_NET_F_HASH_REPORT. Yuri Benditovich (3): virtio-net: Introduce extended RSC feature virtio-net: Introduce RSS receive steering feature virtio-net: Introduce hash report feature include/uapi/linux/virtio_net.h | 90 +++-- 1 file changed, 86 insertions(+), 4 deletions(-) -- 2.17.1 ___ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
Re: [PATCH v2 3/3] iommu/virtio: Enable x86 support
Hi Jean-Philippe, I love your patch! Perhaps something to improve: [auto build test WARNING on iommu/next] [cannot apply to pci/next linus/master v5.6-rc3 next-20200228] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Jean-Philippe-Brucker/virtio-iommu-on-x86-and-non-devicetree-platforms/20200229-085019 base: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next reproduce: # apt-get install sparse # sparse version: v0.6.1-173-ge0787745-dirty make ARCH=x86_64 allmodconfig make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' If you fix the issue, kindly add following tag Reported-by: kbuild test robot sparse warnings: (new ones prefixed by >>) >> drivers/iommu/virtio-iommu.c:1024:9: sparse: sparse: incompatible types in >> comparison expression (different base types): >> drivers/iommu/virtio-iommu.c:1024:9: sparse:restricted __le64 * >> drivers/iommu/virtio-iommu.c:1024:9: sparse:unsigned long long * drivers/iommu/virtio-iommu.c:1036:9: sparse: sparse: incompatible types in comparison expression (different base types): drivers/iommu/virtio-iommu.c:1036:9: sparse:restricted __le64 * drivers/iommu/virtio-iommu.c:1036:9: sparse:unsigned long long * drivers/iommu/virtio-iommu.c:1040:9: sparse: sparse: incompatible types in comparison expression (different base types): drivers/iommu/virtio-iommu.c:1040:9: sparse:restricted __le64 * drivers/iommu/virtio-iommu.c:1040:9: sparse:unsigned long long * drivers/iommu/virtio-iommu.c:1044:9: sparse: sparse: incompatible types in comparison expression (different base types): >> drivers/iommu/virtio-iommu.c:1044:9: sparse:restricted __le32 * >> drivers/iommu/virtio-iommu.c:1044:9: sparse:unsigned int * drivers/iommu/virtio-iommu.c:1048:9: sparse: sparse: incompatible types in comparison expression (different base types): drivers/iommu/virtio-iommu.c:1048:9: sparse:restricted __le32 * drivers/iommu/virtio-iommu.c:1048:9: sparse:unsigned int * drivers/iommu/virtio-iommu.c:1052:9: sparse: sparse: incompatible types in comparison expression (different base types): drivers/iommu/virtio-iommu.c:1052:9: sparse:restricted __le32 * drivers/iommu/virtio-iommu.c:1052:9: sparse:unsigned int * vim +1024 drivers/iommu/virtio-iommu.c edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 996 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 997 static int viommu_probe(struct virtio_device *vdev) edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 998 { edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 999 struct device *parent_dev = vdev->dev.parent; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1000 struct viommu_dev *viommu = NULL; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1001 struct device *dev = >dev; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1002 u64 input_start = 0; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1003 u64 input_end = -1UL; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1004 int ret; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1005 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1006 if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1) || edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1007 !virtio_has_feature(vdev, VIRTIO_IOMMU_F_MAP_UNMAP)) edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1008 return -ENODEV; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1009 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1010 viommu = devm_kzalloc(dev, sizeof(*viommu), GFP_KERNEL); edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1011 if (!viommu) edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1012 return -ENOMEM; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1013 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1014 spin_lock_init(>request_lock); edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1015 ida_init(>domain_ids); edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1016 viommu->dev = dev; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1017 viommu->vdev = vdev; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1018 INIT_LIST_HEAD(>requests); edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1019 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1020 ret = viommu_init_vqs(viommu); edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1021 if (ret) edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1022 return ret; edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 1023 edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 @1024 virtio_cread(vdev, struct virtio_iommu_config, page_size_mask, edcd69ab9a323b Jean-P