Author: cem
Date: Wed Oct 14 23:47:08 2015
New Revision: 289343
URL: https://svnweb.freebsd.org/changeset/base/289343

Log:
  NTB: Reserve link event doorbell callback on Xeon
  
  Consumers that registered on this bit would never see a callback and it
  is likely a mistake.
  
  This does not affect if_ntb, which limits itself to a single doorbell
  callback.

Modified:
  head/sys/dev/ntb/ntb_hw/ntb_hw.c

Modified: head/sys/dev/ntb/ntb_hw/ntb_hw.c
==============================================================================
--- head/sys/dev/ntb/ntb_hw/ntb_hw.c    Wed Oct 14 23:46:15 2015        
(r289342)
+++ head/sys/dev/ntb/ntb_hw/ntb_hw.c    Wed Oct 14 23:47:08 2015        
(r289343)
@@ -110,6 +110,7 @@ struct ntb_db_cb {
        void                    *data;
        struct ntb_softc        *ntb;
        struct callout          irq_work;
+       bool                    reserved;
 };
 
 struct ntb_softc {
@@ -513,6 +514,12 @@ ntb_setup_xeon_msix(struct ntb_softc *nt
                        return (ENXIO);
                }
        }
+
+       /*
+        * Prevent consumers from registering callbacks on the link event irq
+        * slot, from which they will never be called back.
+        */
+       ntb->db_cb[num_vectors - 1].reserved = true;
        return (0);
 }
 
@@ -1302,15 +1309,17 @@ int
 ntb_register_db_callback(struct ntb_softc *ntb, unsigned int idx, void *data,
     ntb_db_callback func)
 {
+       struct ntb_db_cb *db_cb = &ntb->db_cb[idx];
 
-       if (idx >= ntb->allocated_interrupts || ntb->db_cb[idx].callback) {
+       if (idx >= ntb->allocated_interrupts || db_cb->callback ||
+           db_cb->reserved) {
                device_printf(ntb->device, "Invalid Index.\n");
                return (EINVAL);
        }
 
-       ntb->db_cb[idx].callback = func;
-       ntb->db_cb[idx].data = data;
-       callout_init(&ntb->db_cb[idx].irq_work, 1);
+       db_cb->callback = func;
+       db_cb->data = data;
+       callout_init(&db_cb->irq_work, 1);
 
        unmask_ldb_interrupt(ntb, idx);
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to