The following reply was made to PR kern/154302; it has been noted by GNATS.

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: kern/154302: commit references a PR
Date: Tue, 31 Jan 2012 18:13:59 +0000 (UTC)

 Author: gibbs
 Date: Tue Jan 31 18:13:49 2012
 New Revision: 230831
 URL: http://svn.freebsd.org/changeset/base/230831
 
 Log:
   MFC r225708 into stable/8:
   
   Modify the netfront driver so it can successfully attach to
   PV devices with the ioemu attribute set.
   
   sys/dev/xen/netfront/netfront.c:
        o If a mac address for the interface cannot be found
          in the front-side XenStore tree, look for an entry
          in the back-side tree.  With ioemu devices, the
          emulator does not populate the front side tree and
          neither does Xend.
        o Return an error rather than panic when an attach
          attempt fails.
   
   Reported by: Janne Snabb (fix inspired by patch provided)
   PR:          kern/154302
 
 Modified:
   stable/8/sys/dev/xen/netfront/netfront.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/dev/xen/netfront/netfront.c
 ==============================================================================
 --- stable/8/sys/dev/xen/netfront/netfront.c   Tue Jan 31 17:51:30 2012        
(r230830)
 +++ stable/8/sys/dev/xen/netfront/netfront.c   Tue Jan 31 18:13:49 2012        
(r230831)
 @@ -402,11 +402,33 @@ xen_net_read_mac(device_t dev, uint8_t m
  {
        int error, i;
        char *s, *e, *macstr;
 +      const char *path;
  
 -      error = xs_read(XST_NIL, xenbus_get_node(dev), "mac", NULL,
 -          (void **) &macstr);
 -      if (error)
 +      path = xenbus_get_node(dev);
 +      error = xs_read(XST_NIL, path, "mac", NULL, (void **) &macstr);
 +      if (error == ENOENT) {
 +              /*
 +               * Deal with missing mac XenStore nodes on devices with
 +               * HVM emulation (the 'ioemu' configuration attribute)
 +               * enabled.
 +               *
 +               * The HVM emulator may execute in a stub device model
 +               * domain which lacks the permission, only given to Dom0,
 +               * to update the guest's XenStore tree.  For this reason,
 +               * the HVM emulator doesn't even attempt to write the
 +               * front-side mac node, even when operating in Dom0.
 +               * However, there should always be a mac listed in the
 +               * backend tree.  Fallback to this version if our query
 +               * of the front side XenStore location doesn't find
 +               * anything.
 +               */
 +              path = xenbus_get_otherend_path(dev);
 +              error = xs_read(XST_NIL, path, "mac", NULL, (void **) &macstr);
 +      }
 +      if (error != 0) {
 +              xenbus_dev_fatal(dev, error, "parsing %s/mac", path);
                return (error);
 +      }
  
        s = macstr;
        for (i = 0; i < ETHER_ADDR_LEN; i++) {
 @@ -447,7 +469,7 @@ netfront_attach(device_t dev)
        err = create_netdev(dev);
        if (err) {
                xenbus_dev_fatal(dev, err, "creating netdev");
 -              return err;
 +              return (err);
        }
  
  #if __FreeBSD_version >= 700000
 @@ -457,7 +479,7 @@ netfront_attach(device_t dev)
            &xn_enable_lro, 0, "Large Receive Offload");
  #endif
  
 -      return 0;
 +      return (0);
  }
  
  
 @@ -2020,11 +2042,8 @@ create_netdev(device_t dev)
        }
        
        err = xen_net_read_mac(dev, np->mac);
 -      if (err) {
 -              xenbus_dev_fatal(dev, err, "parsing %s/mac",
 -                  xenbus_get_node(dev));
 +      if (err)
                goto out;
 -      }
        
        /* Set up ifnet structure */
        ifp = np->xn_ifp = if_alloc(IFT_ETHER);
 @@ -2066,8 +2085,7 @@ create_netdev(device_t dev)
  exit:
        gnttab_free_grant_references(np->gref_tx_head);
  out:
 -      panic("do something smart");
 -
 +      return (err);
  }
  
  /**
 _______________________________________________
 svn-src-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
freebsd-xen@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-xen
To unsubscribe, send any mail to "freebsd-xen-unsubscr...@freebsd.org"

Reply via email to