Author: erj
Date: Wed May 29 22:24:10 2019
New Revision: 348372
URL: https://svnweb.freebsd.org/changeset/base/348372

Log:
  iflib: provide probe wrapper for vendor drivers
  
  From Jake:
  Vendor drivers that exist out-of-tree generally should return
  BUS_PROBE_VENDOR from their device probe functions. This helps ensure
  that a vendor replacement driver will supersede the in-kernel driver for
  a given device.
  
  Currently, if a vendor wants to implement a driver based on iflib, it
  will always report BUS_PROBE_DEFAULT.
  
  Add a wrapper function, iflib_device_probe_vendor() which can be used in
  place of iflib_device_probe(). This function will just return
  BUS_PROBE_VENDOR whenever iflib_device_probe() would return
  BUS_PROBE_DEFAULT.
  
  While vendor drivers can already implement such a wrapper themselves,
  providing it in the iflib.h header makes it easier for the vendor driver
  to do the right thing.
  
  Submitted by: Jacob Keller <jacob.e.kel...@intel.com>
  Reviewed by:  erj@, gallatin@, marius@
  MFC after:    1 week
  Sponsored by: Intel Corporation
  Differential Revision:        https://reviews.freebsd.org/D20221

Modified:
  head/sys/net/iflib.c
  head/sys/net/iflib.h

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c        Wed May 29 20:45:31 2019        (r348371)
+++ head/sys/net/iflib.c        Wed May 29 22:24:10 2019        (r348372)
@@ -4377,6 +4377,18 @@ iflib_device_probe(device_t dev)
        return (ENXIO);
 }
 
+int
+iflib_device_probe_vendor(device_t dev)
+{
+       int probe;
+
+       probe = iflib_device_probe(dev);
+       if (probe == BUS_PROBE_DEFAULT)
+               return (BUS_PROBE_VENDOR);
+       else
+               return (probe);
+}
+
 static void
 iflib_reset_qvalues(if_ctx_t ctx)
 {

Modified: head/sys/net/iflib.h
==============================================================================
--- head/sys/net/iflib.h        Wed May 29 20:45:31 2019        (r348371)
+++ head/sys/net/iflib.h        Wed May 29 22:24:10 2019        (r348372)
@@ -399,6 +399,13 @@ int iflib_device_suspend(device_t);
 int iflib_device_resume(device_t);
 int iflib_device_shutdown(device_t);
 
+/*
+ * Use this instead of iflib_device_probe if the driver should report
+ * BUS_PROBE_VENDOR instead of BUS_PROBE_DEFAULT. (For example, an out-of-tree
+ * driver based on iflib).
+ */
+int iflib_device_probe_vendor(device_t);
+
 
 int iflib_device_iov_init(device_t, uint16_t, const nvlist_t *);
 void iflib_device_iov_uninit(device_t);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to