Hi Sridhar,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    
https://github.com/0day-ci/linux/commits/Sridhar-Samudrala/Enable-virtio_net-to-act-as-a-standby-for-a-passthru-device/20180427-183842
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> net/core/net_failover.c:544:39: sparse: incorrect type in argument 1 
>> (different address spaces) @@    expected struct net_device *dev @@    got 
>> struct net_devicestruct net_device *dev @@
   net/core/net_failover.c:544:39:    expected struct net_device *dev
   net/core/net_failover.c:544:39:    got struct net_device [noderef] 
<asn:4>*standby_dev
   net/core/net_failover.c:547:39: sparse: incorrect type in argument 1 
(different address spaces) @@    expected struct net_device *dev @@    got 
struct net_devicestruct net_device *dev @@
   net/core/net_failover.c:547:39:    expected struct net_device *dev
   net/core/net_failover.c:547:39:    got struct net_device [noderef] 
<asn:4>*primary_dev
>> net/core/net_failover.c:112:12: sparse: context imbalance in 
>> 'net_failover_select_queue' - wrong count at exit

vim +544 net/core/net_failover.c

   446  
   447  static int net_failover_slave_register(struct net_device *slave_dev)
   448  {
   449          struct net_failover_info *nfo_info;
   450          struct net_failover_ops *nfo_ops;
   451          struct net_device *failover_dev;
   452          bool slave_is_standby;
   453          u32 orig_mtu;
   454          int err;
   455  
   456          ASSERT_RTNL();
   457  
   458          failover_dev = net_failover_get_bymac(slave_dev->perm_addr, 
&nfo_ops);
   459          if (!failover_dev)
   460                  goto done;
   461  
   462          if (failover_dev->type != slave_dev->type)
   463                  goto done;
   464  
   465          if (nfo_ops && nfo_ops->slave_register)
   466                  return nfo_ops->slave_register(slave_dev, failover_dev);
   467  
   468          nfo_info = netdev_priv(failover_dev);
   469          slave_is_standby = (slave_dev->dev.parent == 
failover_dev->dev.parent);
   470          if (slave_is_standby ? rtnl_dereference(nfo_info->standby_dev) :
   471                          rtnl_dereference(nfo_info->primary_dev)) {
   472                  netdev_err(failover_dev, "%s attempting to register as 
slave dev when %s already present\n",
   473                             slave_dev->name,
   474                             slave_is_standby ? "standby" : "primary");
   475                  goto done;
   476          }
   477  
   478          /* We want to allow only a direct attached VF device as a 
primary
   479           * netdev. As there is no easy way to check for a VF device, 
restrict
   480           * this to a pci device.
   481           */
   482          if (!slave_is_standby && (!slave_dev->dev.parent ||
   483                                    !dev_is_pci(slave_dev->dev.parent)))
   484                  goto done;
   485  
   486          if (failover_dev->features & NETIF_F_VLAN_CHALLENGED &&
   487              vlan_uses_dev(failover_dev)) {
   488                  netdev_err(failover_dev, "Device %s is VLAN challenged 
and failover device has VLAN set up\n",
   489                             failover_dev->name);
   490                  goto done;
   491          }
   492  
   493          /* Align MTU of slave with failover dev */
   494          orig_mtu = slave_dev->mtu;
   495          err = dev_set_mtu(slave_dev, failover_dev->mtu);
   496          if (err) {
   497                  netdev_err(failover_dev, "unable to change mtu of %s to 
%u register failed\n",
   498                             slave_dev->name, failover_dev->mtu);
   499                  goto done;
   500          }
   501  
   502          dev_hold(slave_dev);
   503  
   504          if (netif_running(failover_dev)) {
   505                  err = dev_open(slave_dev);
   506                  if (err && (err != -EBUSY)) {
   507                          netdev_err(failover_dev, "Opening slave %s 
failed err:%d\n",
   508                                     slave_dev->name, err);
   509                          goto err_dev_open;
   510                  }
   511          }
   512  
   513          netif_addr_lock_bh(failover_dev);
   514          dev_uc_sync_multiple(slave_dev, failover_dev);
   515          dev_uc_sync_multiple(slave_dev, failover_dev);
   516          netif_addr_unlock_bh(failover_dev);
   517  
   518          err = vlan_vids_add_by_dev(slave_dev, failover_dev);
   519          if (err) {
   520                  netdev_err(failover_dev, "Failed to add vlan ids to 
device %s err:%d\n",
   521                             slave_dev->name, err);
   522                  goto err_vlan_add;
   523          }
   524  
   525          err = netdev_rx_handler_register(slave_dev, 
net_failover_handle_frame,
   526                                           failover_dev);
   527          if (err) {
   528                  netdev_err(slave_dev, "can not register failover rx 
handler (err = %d)\n",
   529                             err);
   530                  goto err_handler_register;
   531          }
   532  
   533          err = netdev_upper_dev_link(slave_dev, failover_dev, NULL);
   534          if (err) {
   535                  netdev_err(slave_dev, "can not set failover device %s 
(err = %d)\n",
   536                             failover_dev->name, err);
   537                  goto err_upper_link;
   538          }
   539  
   540          slave_dev->priv_flags |= IFF_FAILOVER_SLAVE;
   541  
   542          if (slave_is_standby) {
   543                  rcu_assign_pointer(nfo_info->standby_dev, slave_dev);
 > 544                  dev_get_stats(nfo_info->standby_dev, 
 > &nfo_info->standby_stats);
   545          } else {
   546                  rcu_assign_pointer(nfo_info->primary_dev, slave_dev);
   547                  dev_get_stats(nfo_info->primary_dev, 
&nfo_info->primary_stats);
   548                  failover_dev->min_mtu = slave_dev->min_mtu;
   549                  failover_dev->max_mtu = slave_dev->max_mtu;
   550          }
   551  
   552          net_failover_compute_features(failover_dev);
   553  
   554          call_netdevice_notifiers(NETDEV_JOIN, slave_dev);
   555  
   556          netdev_info(failover_dev, "failover %s slave:%s registered\n",
   557                      slave_is_standby ? "standby" : "primary", 
slave_dev->name);
   558  
   559          goto done;
   560  
   561  err_upper_link:
   562          netdev_rx_handler_unregister(slave_dev);
   563  err_handler_register:
   564          vlan_vids_del_by_dev(slave_dev, failover_dev);
   565  err_vlan_add:
   566          dev_uc_unsync(slave_dev, failover_dev);
   567          dev_mc_unsync(slave_dev, failover_dev);
   568          dev_close(slave_dev);
   569  err_dev_open:
   570          dev_put(slave_dev);
   571          dev_set_mtu(slave_dev, orig_mtu);
   572  done:
   573          return NOTIFY_DONE;
   574  }
   575  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to