if: Add power of 2 mask based CPUID to subqueue mapping
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 28 Jan 2013 13:24:17 +0000 (21:24 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 28 Jan 2013 13:24:17 +0000 (21:24 +0800)
sys/net/altq/if_altq.h
sys/net/if.c
sys/net/ifq_var.h

index ecaaf31..bb014b5 100644 (file)
@@ -115,7 +115,7 @@ struct      ifaltq {
 
        /* Sub-queues mapping */
        altq_mapsubq_t altq_mapsubq;
-       uint32_t altq_map_unused;
+       uint32_t altq_subq_mask;
 
        /* Sub-queues */
        int     altq_subq_cnt;
index 39e38a2..3430887 100644 (file)
@@ -3029,6 +3029,12 @@ ifq_mapsubq_default(struct ifaltq *ifq __unused, int cpuid __unused)
        return ALTQ_SUBQ_INDEX_DEFAULT;
 }
 
+int
+ifq_mapsubq_mask(struct ifaltq *ifq, int cpuid)
+{
+       return (cpuid & ifq->altq_subq_mask);
+}
+
 static void
 ifsq_watchdog(void *arg)
 {
index cc3c519..d5e4137 100644 (file)
@@ -88,6 +88,7 @@ void          ifq_set_maxlen(struct ifaltq *, int);
 void           ifq_set_methods(struct ifaltq *, altq_mapsubq_t,
                    ifsq_enqueue_t, ifsq_dequeue_t, ifsq_request_t);
 int            ifq_mapsubq_default(struct ifaltq *, int);
+int            ifq_mapsubq_mask(struct ifaltq *, int);
 
 void           ifsq_devstart(struct ifaltq_subque *ifsq);
 void           ifsq_devstart_sched(struct ifaltq_subque *ifsq);
@@ -509,6 +510,13 @@ ifq_set_subq_cnt(struct ifaltq *_ifq, int _cnt)
        _ifq->altq_subq_cnt = _cnt;
 }
 
+static __inline void
+ifq_set_subq_mask(struct ifaltq *_ifq, uint32_t _mask)
+{
+       KASSERT(((_mask - 1) & _mask) == 0, ("invalid mask %08x", _mask));
+       _ifq->altq_subq_mask = _mask;
+}
+
 /* COMPAT */
 static __inline int
 ifq_is_oactive(const struct ifaltq *_ifq)