Hi Sathya, [auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Michael-Chan/bnxt_en-Update-firmware-interface-spec-to-1-8-0/20170725-094835 config: x86_64-randconfig-x016-201730 (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): In file included from include/linux/kernfs.h:13:0, from include/linux/sysfs.h:15, from include/linux/kobject.h:21, from include/linux/pci.h:28, from drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c:9: drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c: In function 'bnxt_dl_eswitch_mode_set': >> drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c:165:16: error: 'struct bnxt' >> has no member named 'sriov_lock' mutex_lock(&bp->sriov_lock); ^ include/linux/mutex.h:164:44: note: in definition of macro 'mutex_lock' #define mutex_lock(lock) mutex_lock_nested(lock, 0) ^~~~ drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c:194:18: error: 'struct bnxt' has no member named 'sriov_lock' mutex_unlock(&bp->sriov_lock); ^~ vim +165 drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c > 9 #include <linux/pci.h> 10 #include <linux/netdevice.h> 11 #include <linux/etherdevice.h> 12 #include <linux/rtnetlink.h> 13 #include <linux/jhash.h> 14 15 #include "bnxt_hsi.h" 16 #include "bnxt.h" 17 #include "bnxt_vfr.h" 18 19 #define CFA_HANDLE_INVALID 0xffff 20 21 static void __bnxt_vf_reps_destroy(struct bnxt *bp) 22 { 23 u16 num_vfs = pci_num_vf(bp->pdev); 24 struct bnxt_vf_rep *vf_rep; 25 int i; 26 27 for (i = 0; i < num_vfs; i++) { 28 vf_rep = bp->vf_reps[i]; 29 if (vf_rep) { 30 if (vf_rep->dev) { 31 /* if register_netdev failed, then netdev_ops 32 * would have been set to NULL 33 */ 34 if (vf_rep->dev->netdev_ops) 35 unregister_netdev(vf_rep->dev); 36 free_netdev(vf_rep->dev); 37 } 38 } 39 } 40 41 kfree(bp->vf_reps); 42 bp->vf_reps = NULL; 43 } 44 45 void bnxt_vf_reps_destroy(struct bnxt *bp) 46 { 47 bool closed = false; 48 49 if (bp->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV) 50 return; 51 52 if (!bp->vf_reps) 53 return; 54 55 /* Ensure that parent PF's and VF-reps' RX/TX has been quiesced 56 * before proceeding with VF-rep cleanup. 57 */ 58 rtnl_lock(); 59 if (netif_running(bp->dev)) { 60 bnxt_close_nic(bp, false, false); 61 closed = true; 62 } 63 bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY; 64 65 if (closed) 66 bnxt_open_nic(bp, false, false); 67 rtnl_unlock(); 68 69 /* Need to call vf_reps_destroy() outside of rntl_lock 70 * as unregister_netdev takes rtnl_lock 71 */ 72 __bnxt_vf_reps_destroy(bp); 73 } 74 75 /* Use the OUI of the PF's perm addr and report the same mac addr 76 * for the same VF-rep each time 77 */ 78 static void bnxt_vf_rep_eth_addr_gen(u8 *src_mac, u16 vf_idx, u8 *mac) 79 { 80 u32 addr; 81 82 ether_addr_copy(mac, src_mac); 83 84 addr = jhash(src_mac, ETH_ALEN, 0) + vf_idx; 85 mac[3] = (u8)(addr & 0xFF); 86 mac[4] = (u8)((addr >> 8) & 0xFF); 87 mac[5] = (u8)((addr >> 16) & 0xFF); 88 } 89 90 static void bnxt_vf_rep_netdev_init(struct bnxt *bp, struct bnxt_vf_rep *vf_rep, 91 struct net_device *dev) 92 { 93 struct net_device *pf_dev = bp->dev; 94 95 /* Just inherit all the featues of the parent PF as the VF-R 96 * uses the RX/TX rings of the parent PF 97 */ 98 dev->hw_features = pf_dev->hw_features; 99 dev->gso_partial_features = pf_dev->gso_partial_features; 100 dev->vlan_features = pf_dev->vlan_features; 101 dev->hw_enc_features = pf_dev->hw_enc_features; 102 dev->features |= pf_dev->features; 103 bnxt_vf_rep_eth_addr_gen(bp->pf.mac_addr, vf_rep->vf_idx, 104 dev->perm_addr); 105 ether_addr_copy(dev->dev_addr, dev->perm_addr); 106 } 107 108 static int bnxt_vf_reps_create(struct bnxt *bp) 109 { 110 u16 num_vfs = pci_num_vf(bp->pdev); 111 struct bnxt_vf_rep *vf_rep; 112 struct net_device *dev; 113 int rc, i; 114 115 bp->vf_reps = kcalloc(num_vfs, sizeof(vf_rep), GFP_KERNEL); 116 if (!bp->vf_reps) 117 return -ENOMEM; 118 119 for (i = 0; i < num_vfs; i++) { 120 dev = alloc_etherdev(sizeof(*vf_rep)); 121 if (!dev) { 122 rc = -ENOMEM; 123 goto err; 124 } 125 126 vf_rep = netdev_priv(dev); 127 bp->vf_reps[i] = vf_rep; 128 vf_rep->dev = dev; 129 vf_rep->bp = bp; 130 vf_rep->vf_idx = i; 131 vf_rep->tx_cfa_action = CFA_HANDLE_INVALID; 132 133 bnxt_vf_rep_netdev_init(bp, vf_rep, dev); 134 rc = register_netdev(dev); 135 if (rc) { 136 /* no need for unregister_netdev in cleanup */ 137 dev->netdev_ops = NULL; 138 goto err; 139 } 140 } 141 142 bp->eswitch_mode = DEVLINK_ESWITCH_MODE_SWITCHDEV; 143 return 0; 144 145 err: 146 netdev_info(bp->dev, "%s error=%d", __func__, rc); 147 __bnxt_vf_reps_destroy(bp); 148 return rc; 149 } 150 151 /* Devlink related routines */ 152 static int bnxt_dl_eswitch_mode_get(struct devlink *devlink, u16 *mode) 153 { 154 struct bnxt *bp = bnxt_get_bp_from_dl(devlink); 155 156 *mode = bp->eswitch_mode; 157 return 0; 158 } 159 160 static int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode) 161 { 162 struct bnxt *bp = bnxt_get_bp_from_dl(devlink); 163 int rc = 0; 164 > 165 mutex_lock(&bp->sriov_lock); 166 if (bp->eswitch_mode == mode) { 167 netdev_info(bp->dev, "already in %s eswitch mode", 168 mode == DEVLINK_ESWITCH_MODE_LEGACY ? 169 "legacy" : "switchdev"); 170 rc = -EINVAL; 171 goto done; 172 } 173 174 switch (mode) { 175 case DEVLINK_ESWITCH_MODE_LEGACY: 176 bnxt_vf_reps_destroy(bp); 177 break; 178 179 case DEVLINK_ESWITCH_MODE_SWITCHDEV: 180 if (pci_num_vf(bp->pdev) == 0) { 181 netdev_info(bp->dev, 182 "Enable VFs before setting swtichdev mode"); 183 rc = -EPERM; 184 goto done; 185 } 186 rc = bnxt_vf_reps_create(bp); 187 break; 188 189 default: 190 rc = -EINVAL; 191 goto done; 192 } 193 done: 194 mutex_unlock(&bp->sriov_lock); 195 return rc; 196 } 197 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip