[haiku-commits] haiku: hrev52725 - src/libs/compat/freebsd_iflib

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 8 Jan 2019 15:12:45 -0500 (EST)

hrev52725 adds 1 changeset to branch 'master'
old head: 7ea987c1b81c03ea16e5eedeb24f7ea0796ef44f
new head: 4947d1a8c7e49645142e2b1147202b73a5943aff
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=4947d1a8c7e4+%5E7ea987c1b81c

----------------------------------------------------------------------------

4947d1a8c7e4: freebsd_iflib: Return the correct filter result in more interrupt 
handlers.
  
  Confirmed by tqh to fix #14803.

                              [ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev52725
Commit:      4947d1a8c7e49645142e2b1147202b73a5943aff
URL:         https://git.haiku-os.org/haiku/commit/?id=4947d1a8c7e4
Author:      Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date:        Tue Jan  8 20:12:01 2019 UTC

Ticket:      https://dev.haiku-os.org/ticket/14803

----------------------------------------------------------------------------

1 file changed, 12 insertions(+), 9 deletions(-)
src/libs/compat/freebsd_iflib/iflib.c | 21 ++++++++++++---------

----------------------------------------------------------------------------

diff --git a/src/libs/compat/freebsd_iflib/iflib.c 
b/src/libs/compat/freebsd_iflib/iflib.c
index 479a3ab886..cea655312e 100644
--- a/src/libs/compat/freebsd_iflib/iflib.c
+++ b/src/libs/compat/freebsd_iflib/iflib.c
@@ -1504,18 +1504,19 @@ iflib_fast_intr(void *arg)
 static int
 iflib_fast_intr_rxtx(void *arg)
 {
-       int i, cidx;
+       int i, cidx, result;
        iflib_filter_info_t info = arg;
        struct grouptask *gtask = info->ifi_task;
        iflib_rxq_t rxq = (iflib_rxq_t)info->ifi_ctx;
        if_ctx_t ctx = NULL;
 
        if (!iflib_started)
-               return (FILTER_HANDLED);
+               return (FILTER_STRAY);
 
        DBG_COUNTER_INC(fast_intrs);
-       if (info->ifi_filter != NULL && info->ifi_filter(info->ifi_filter_arg) 
== FILTER_HANDLED)
-               return (FILTER_HANDLED);
+       if (info->ifi_filter != NULL
+               && (result = info->ifi_filter(info->ifi_filter_arg)) != 
FILTER_SCHEDULE_THREAD)
+               return result;
 
        MPASS(rxq->ifr_ntxqirq);
        for (i = 0; i < rxq->ifr_ntxqirq; i++) {
@@ -1539,7 +1540,7 @@ iflib_fast_intr_rxtx(void *arg)
                IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id);
                DBG_COUNTER_INC(rx_intr_enables);
        }
-       return (FILTER_HANDLED);
+       return (FILTER_SCHEDULE_THREAD);
 }
 
 
@@ -1548,16 +1549,18 @@ iflib_fast_intr_ctx(void *arg)
 {
        iflib_filter_info_t info = arg;
        struct grouptask *gtask = info->ifi_task;
+       int result;
 
        if (!iflib_started)
-               return (FILTER_HANDLED);
+               return (FILTER_STRAY);
 
        DBG_COUNTER_INC(fast_intrs);
-       if (info->ifi_filter != NULL && info->ifi_filter(info->ifi_filter_arg) 
== FILTER_HANDLED)
-               return (FILTER_HANDLED);
+       if (info->ifi_filter != NULL
+               && (result = info->ifi_filter(info->ifi_filter_arg)) != 
FILTER_SCHEDULE_THREAD)
+               return result;
 
        GROUPTASK_ENQUEUE(gtask);
-       return (FILTER_HANDLED);
+       return (FILTER_SCHEDULE_THREAD);
 }
 
 static int


Other related posts:

  • » [haiku-commits] haiku: hrev52725 - src/libs/compat/freebsd_iflib - waddlesplash