mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
if_oce: fix epoch handling
Thanks to gallatin@ for suggesting the patch.
PR: 260330
Reported by: Vincent Milum Jr.
Reviewed by: gallatin, glebius
Tested by: Vincent Milum Jr.
Differential Revision: https://reviews.freebsd.org/D33395
(cherry picked from commit e363f832cf)
This commit is contained in:
parent
f801f2c762
commit
257cd2f8c3
3 changed files with 10 additions and 2 deletions
|
|
@ -2039,14 +2039,17 @@ exit_rq_handler_lro:
|
|||
uint16_t
|
||||
oce_rq_handler(void *arg)
|
||||
{
|
||||
struct epoch_tracker et;
|
||||
struct oce_rq *rq = (struct oce_rq *)arg;
|
||||
struct oce_cq *cq = rq->cq;
|
||||
POCE_SOFTC sc = rq->parent;
|
||||
struct oce_nic_rx_cqe *cqe;
|
||||
int num_cqes = 0;
|
||||
|
||||
NET_EPOCH_ENTER(et);
|
||||
if(rq->islro) {
|
||||
oce_rq_handler_lro(arg);
|
||||
NET_EPOCH_EXIT(et);
|
||||
return 0;
|
||||
}
|
||||
LOCK(&rq->rx_lock);
|
||||
|
|
@ -2090,6 +2093,7 @@ oce_rq_handler(void *arg)
|
|||
|
||||
oce_check_rx_bufs(sc, num_cqes, rq);
|
||||
UNLOCK(&rq->rx_lock);
|
||||
NET_EPOCH_EXIT(et);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
|
@ -2110,7 +2114,7 @@ oce_attach_ifp(POCE_SOFTC sc)
|
|||
ifmedia_add(&sc->media, IFM_ETHER | IFM_AUTO, 0, NULL);
|
||||
ifmedia_set(&sc->media, IFM_ETHER | IFM_AUTO);
|
||||
|
||||
sc->ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST;
|
||||
sc->ifp->if_flags = IFF_BROADCAST | IFF_MULTICAST | IFF_KNOWSEPOCH;
|
||||
sc->ifp->if_ioctl = oce_ioctl;
|
||||
sc->ifp->if_start = oce_start;
|
||||
sc->ifp->if_init = oce_init;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
#include <sys/param.h>
|
||||
#include <sys/endian.h>
|
||||
#include <sys/epoch.h>
|
||||
#include <sys/eventhandler.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/module.h>
|
||||
|
|
|
|||
|
|
@ -1233,13 +1233,15 @@ oce_rx_cq_clean(struct oce_rq *rq)
|
|||
void
|
||||
oce_stop_rx(POCE_SOFTC sc)
|
||||
{
|
||||
struct epoch_tracker et;
|
||||
struct oce_mbx mbx;
|
||||
struct mbx_delete_nic_rq *fwcmd;
|
||||
struct mbx_delete_nic_rq_v1 *fwcmd1;
|
||||
struct oce_rq *rq;
|
||||
int i = 0;
|
||||
|
||||
/* before deleting disable hwlro */
|
||||
NET_EPOCH_ENTER(et);
|
||||
/* before deleting disable hwlro */
|
||||
if(sc->enable_hwlro)
|
||||
oce_mbox_nic_set_iface_lro_config(sc, 0);
|
||||
|
||||
|
|
@ -1274,6 +1276,7 @@ oce_stop_rx(POCE_SOFTC sc)
|
|||
UNLOCK(&rq->rx_lock);
|
||||
}
|
||||
}
|
||||
NET_EPOCH_EXIT(et);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
Loading…
Reference in a new issue