Author: arybchik
Date: Wed Jun  1 06:51:19 2016
New Revision: 301105
URL: https://svnweb.freebsd.org/changeset/base/301105

Log:
  sfxge(4): cope with code duplication on SW events composition
  
  Sponsored by:   Solarflare Communications, Inc.
  MFC after:      2 days
  Differential Revision:  https://reviews.freebsd.org/D6666

Modified:
  head/sys/dev/sfxge/sfxge.h
  head/sys/dev/sfxge/sfxge_ev.c
  head/sys/dev/sfxge/sfxge_rx.c

Modified: head/sys/dev/sfxge/sfxge.h
==============================================================================
--- head/sys/dev/sfxge/sfxge.h  Wed Jun  1 06:18:34 2016        (r301104)
+++ head/sys/dev/sfxge/sfxge.h  Wed Jun  1 06:51:19 2016        (r301105)
@@ -130,6 +130,26 @@ enum sfxge_sw_ev {
 #define        SFXGE_SW_EV_MAGIC(_sw_ev) \
        (SFXGE_MAGIC_RESERVED | ((_sw_ev) << SFXGE_MAGIC_DMAQ_LABEL_WIDTH))
 
+static inline uint16_t
+sfxge_sw_ev_mk_magic(enum sfxge_sw_ev sw_ev, unsigned int label)
+{
+       KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
+           ("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
+       return SFXGE_SW_EV_MAGIC(sw_ev) | label;
+}
+
+static inline uint16_t
+sfxge_sw_ev_rxq_magic(enum sfxge_sw_ev sw_ev, struct sfxge_rxq *rxq)
+{
+       return sfxge_sw_ev_mk_magic(sw_ev, 0);
+}
+
+static inline uint16_t
+sfxge_sw_ev_txq_magic(enum sfxge_sw_ev sw_ev, struct sfxge_txq *txq)
+{
+       return sfxge_sw_ev_mk_magic(sw_ev, txq->type);
+}
+
 enum sfxge_evq_state {
        SFXGE_EVQ_UNINITIALIZED = 0,
        SFXGE_EVQ_INITIALIZED,

Modified: head/sys/dev/sfxge/sfxge_ev.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_ev.c       Wed Jun  1 06:18:34 2016        
(r301104)
+++ head/sys/dev/sfxge/sfxge_ev.c       Wed Jun  1 06:51:19 2016        
(r301105)
@@ -207,7 +207,6 @@ sfxge_ev_rxq_flush_done(void *arg, uint3
        struct sfxge_softc *sc;
        struct sfxge_rxq *rxq;
        unsigned int index;
-       unsigned int label;
        uint16_t magic;
 
        evq = (struct sfxge_evq *)arg;
@@ -226,11 +225,7 @@ sfxge_ev_rxq_flush_done(void *arg, uint3
        }
 
        evq = sc->evq[index];
-
-       label = 0;
-       KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
-           ("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != level"));
-       magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QFLUSH_DONE) | label;
+       magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QFLUSH_DONE, rxq);
 
        KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
            ("evq not started"));
@@ -246,7 +241,6 @@ sfxge_ev_rxq_flush_failed(void *arg, uin
        struct sfxge_softc *sc;
        struct sfxge_rxq *rxq;
        unsigned int index;
-       unsigned int label;
        uint16_t magic;
 
        evq = (struct sfxge_evq *)arg;
@@ -260,11 +254,7 @@ sfxge_ev_rxq_flush_failed(void *arg, uin
        /* Resend a software event on the correct queue */
        index = rxq->index;
        evq = sc->evq[index];
-
-       label = 0;
-       KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
-           ("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
-       magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QFLUSH_FAILED) | label;
+       magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QFLUSH_FAILED, rxq);
 
        KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
            ("evq not started"));
@@ -331,7 +321,6 @@ sfxge_ev_txq_flush_done(void *arg, uint3
        struct sfxge_evq *evq;
        struct sfxge_softc *sc;
        struct sfxge_txq *txq;
-       unsigned int label;
        uint16_t magic;
 
        evq = (struct sfxge_evq *)arg;
@@ -351,11 +340,7 @@ sfxge_ev_txq_flush_done(void *arg, uint3
 
        /* Resend a software event on the correct queue */
        evq = sc->evq[txq->evq_index];
-
-       label = txq->type;
-       KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
-           ("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != label"));
-       magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_TX_QFLUSH_DONE) | label;
+       magic = sfxge_sw_ev_txq_magic(SFXGE_SW_EV_TX_QFLUSH_DONE, txq);
 
        KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
            ("evq not started"));

Modified: head/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_rx.c       Wed Jun  1 06:18:34 2016        
(r301104)
+++ head/sys/dev/sfxge/sfxge_rx.c       Wed Jun  1 06:51:19 2016        
(r301105)
@@ -175,17 +175,12 @@ sfxge_rx_post_refill(void *arg)
        struct sfxge_softc *sc;
        unsigned int index;
        struct sfxge_evq *evq;
-       unsigned int label;
        uint16_t magic;
 
        sc = rxq->sc;
        index = rxq->index;
        evq = sc->evq[index];
-
-       label = 0;
-       KASSERT((label & SFXGE_MAGIC_DMAQ_LABEL_MASK) == label,
-           ("(label & SFXGE_MAGIC_DMAQ_LABEL_MASK) != level"));
-       magic = SFXGE_SW_EV_MAGIC(SFXGE_SW_EV_RX_QREFILL) | label;
+       magic = sfxge_sw_ev_rxq_magic(SFXGE_SW_EV_RX_QREFILL, rxq);
 
        /* This is guaranteed due to the start/stop order of rx and ev */
        KASSERT(evq->init_state == SFXGE_EVQ_STARTED,
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to