BNX2X: spatch netdevice feature conversion
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 10 Feb 2015 16:11:01 +0000 (11:11 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 2 Mar 2015 16:59:09 +0000 (11:59 -0500)
Spatch missed kern/drivers/net/bnx2x/bnx2x_cmn.c.

Note that this removes the hw_enc and vlan features, and #define's the
hw_features to the normal features.

I left the Linux NETIF_F_ flags in place, and just #defined the ones we support
for now.  There might be issues with #defining them to 0, in case there's some
code that assumes a flag #define value is non-zero (consider the issues with
openmode and O_RDONLY being 0).

kern/drivers/net/bnx2x/akaros_compat.h
kern/drivers/net/bnx2x/bnx2x_cmn.c
kern/drivers/net/bnx2x/bnx2x_main.c
scripts/spatch/linux/scalar.cocci

index 73a3b8e..a42df73 100644 (file)
@@ -231,6 +231,38 @@ enum {
 #define MODULE_DEVICE_TABLE(...)
 #define THIS_MODULE ((void*)0)
 
+/* u64 on linux, but a u32 on plan 9.  the typedef is probably a good idea */
+typedef unsigned int netdev_features_t;
+
+/* Linux has features, hw_features, and a couple others.  Plan 9 just has
+ * features.  This #define should work for merging hw and regular features.  We
+ * spatched away the hw_enc and vlan feats. */
+#define hw_features feat
+
+/* Attempted conversions for plan 9 features.  For some things, like rx
+ * checksums, the driver flags the block (e.g. Budpck) to say if a receive
+ * checksum was already done.  There is no flag for saying the device can do
+ * it.  For transmits, the stack needs to know in advance if the device can
+ * handle the checksum or not. */
+#define NETIF_F_RXHASH                         0
+#define NETIF_F_RXCSUM                         0
+#define NETIF_F_LRO                                    NETF_LRO
+#define NETIF_F_GRO                                    0
+#define NETIF_F_LOOPBACK                       0
+#define NETIF_F_TSO                                    NETF_TSO
+#define NETIF_F_SG                                     NETF_SG
+#define NETIF_F_IP_CSUM                                (NETF_IPCK | NETF_UDPCK | NETF_TCPCK)
+#define NETIF_F_IPV6_CSUM                      (NETF_IPCK | NETF_UDPCK | NETF_TCPCK)
+#define NETIF_F_GSO_GRE                                0
+#define NETIF_F_GSO_UDP_TUNNEL         0
+#define NETIF_F_GSO_IPIP                       0
+#define NETIF_F_GSO_SIT                                0
+#define NETIF_F_TSO_ECN                                0
+#define NETIF_F_TSO6                           0
+#define NETIF_F_HW_VLAN_CTAG_TX                0
+#define NETIF_F_HIGHDMA                                0
+#define NETIF_F_HW_VLAN_CTAG_RX                0
+
 /* I'd like to spatch all of the pci methods, but I don't know how to do the
  * reads.  Since we're not doing the reads, then no sense doing the writes. */
 static inline int pci_read_config_byte(struct pci_device *dev, uint32_t off,
index 7eff801..309408c 100644 (file)
@@ -400,7 +400,7 @@ static uint32_t bnx2x_get_rxhash(const struct bnx2x *bp,
                            enum pkt_hash_types *rxhash_type)
 {
        /* Get Toeplitz hash from CQE */
-       if ((bp->dev->features & NETIF_F_RXHASH) &&
+       if ((bp->dev->feat & NETIF_F_RXHASH) &&
            (cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG)) {
                enum eth_rss_hash_type htype;
 
@@ -1052,7 +1052,7 @@ reuse_rx:
 
                skb_checksum_none_assert(skb);
 
-               if (bp->dev->features & NETIF_F_RXCSUM)
+               if (bp->dev->feat & NETIF_F_RXCSUM)
                        bnx2x_csum_validate(skb, cqe, fp,
                                            bnx2x_fp_qstats(bp, fp));
 
index a15fb7b..a0e0e93 100644 (file)
@@ -3359,9 +3359,9 @@ static void bnx2x_drv_info_ether_stat(struct bnx2x *bp)
                                ether_stat->mac_local + MAC_PAD, MAC_PAD,
                                Eaddrlen);
        ether_stat->mtu_size = bp->dev->mtu;
-       if (bp->dev->features & NETIF_F_RXCSUM)
+       if (bp->dev->feat & NETIF_F_RXCSUM)
                ether_stat->feature_flags |= FEATURE_ETH_CHKSUM_OFFLOAD_MASK;
-       if (bp->dev->features & NETIF_F_TSO)
+       if (bp->dev->feat & NETIF_F_TSO)
                ether_stat->feature_flags |= FEATURE_ETH_LSO_MASK;
        ether_stat->feature_flags |= bp->common.boot_mode;
 
@@ -12065,10 +12065,10 @@ static int bnx2x_init_bp(struct bnx2x *bp)
        /* Set TPA flags */
        if (bp->disable_tpa) {
                bp->flags &= ~(TPA_ENABLE_FLAG | GRO_ENABLE_FLAG);
-               bp->dev->features &= ~NETIF_F_LRO;
+               bp->dev->feat &= ~NETIF_F_LRO;
        } else {
                bp->flags |= (TPA_ENABLE_FLAG | GRO_ENABLE_FLAG);
-               bp->dev->features |= NETIF_F_LRO;
+               bp->dev->feat |= NETIF_F_LRO;
        }
 
        if (CHIP_IS_E1(bp))
@@ -12742,19 +12742,10 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_device *pdev,
        if (!CHIP_IS_E1x(bp)) {
                dev->hw_features |= NETIF_F_GSO_GRE | NETIF_F_GSO_UDP_TUNNEL |
                                    NETIF_F_GSO_IPIP | NETIF_F_GSO_SIT;
-               dev->hw_enc_features =
-                       NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
-                       NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 |
-                       NETIF_F_GSO_IPIP |
-                       NETIF_F_GSO_SIT |
-                       NETIF_F_GSO_GRE | NETIF_F_GSO_UDP_TUNNEL;
        }
 
-       dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
-               NETIF_F_TSO | NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_HIGHDMA;
-
-       dev->features |= dev->hw_features | NETIF_F_HW_VLAN_CTAG_RX;
-       dev->features |= NETIF_F_HIGHDMA;
+       dev->feat |= dev->hw_features | NETIF_F_HW_VLAN_CTAG_RX;
+       dev->feat |= NETIF_F_HIGHDMA;
 
        /* Add Loopback capability to the device */
        dev->hw_features |= NETIF_F_LOOPBACK;
index fd701e4..0cbe57e 100644 (file)
@@ -87,3 +87,21 @@ struct pci_device *p;
 @@
 -p->irq
 +p->irqline
+
+@@
+struct ether *p;
+@@
+-p->features
++p->feat
+
+@@
+struct ether *p;
+expression E;
+@@
+-p->vlan_features = E;
+
+@@
+struct ether *p;
+expression E;
+@@
+-p->hw_enc_features = E;