Author: emaste
Date: Sun Sep  1 16:53:17 2019
New Revision: 351664
URL: https://svnweb.freebsd.org/changeset/base/351664

Log:
  vnic: correct and simplify SIOCSIFFLAGS
  
  PR:           223573, 223575
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D13028

Modified:
  head/sys/dev/vnic/nicvf_main.c

Modified: head/sys/dev/vnic/nicvf_main.c
==============================================================================
--- head/sys/dev/vnic/nicvf_main.c      Sun Sep  1 16:51:25 2019        
(r351663)
+++ head/sys/dev/vnic/nicvf_main.c      Sun Sep  1 16:53:17 2019        
(r351664)
@@ -425,6 +425,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t 
        struct nicvf *nic;
        struct rcv_queue *rq;
        struct ifreq *ifr;
+       uint32_t flags;
        int mask, err;
        int rq_idx;
 #if defined(INET) || defined(INET6)
@@ -479,10 +480,10 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t 
                break;
        case SIOCSIFFLAGS:
                NICVF_CORE_LOCK(nic);
-               if (if_getflags(ifp) & IFF_UP) {
+               flags = if_getflags(ifp);
+               if (flags & IFF_UP) {
                        if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
-                               if ((nic->if_flags & if_getflags(ifp)) &
-                                   IFF_PROMISC) {
+                               if ((flags ^ nic->if_flags) & IFF_PROMISC) {
                                        /* Change promiscous mode */
 #if 0
                                        /* ARM64TODO */
@@ -490,8 +491,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t 
 #endif
                                }
 
-                               if ((nic->if_flags ^ if_getflags(ifp)) &
-                                   IFF_ALLMULTI) {
+                               if ((flags ^ nic->if_flags) & IFF_ALLMULTI) {
                                        /* Change multicasting settings */
 #if 0
                                        /* ARM64TODO */
@@ -504,7 +504,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t 
                } else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
                        nicvf_stop_locked(nic);
 
-               nic->if_flags = if_getflags(ifp);
+               nic->if_flags = flags;
                NICVF_CORE_UNLOCK(nic);
                break;
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to