aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/netmap/netmap_pt.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/netmap/netmap_pt.c')
-rw-r--r--sys/dev/netmap/netmap_pt.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/sys/dev/netmap/netmap_pt.c b/sys/dev/netmap/netmap_pt.c
index d3544a5b1728..edb49dc504ac 100644
--- a/sys/dev/netmap/netmap_pt.c
+++ b/sys/dev/netmap/netmap_pt.c
@@ -169,19 +169,19 @@ rate_batch_stats_update(struct rate_batch_stats *bf, uint32_t pre_tail,
#endif /* RATE */
struct ptnetmap_state {
- /* Kthreads. */
- struct nm_kctx **kctxs;
+ /* Kthreads. */
+ struct nm_kctx **kctxs;
/* Shared memory with the guest (TX/RX) */
struct ptnet_csb_gh __user *csb_gh;
struct ptnet_csb_hg __user *csb_hg;
- bool stopped;
+ bool stopped;
- /* Netmap adapter wrapping the backend. */
- struct netmap_pt_host_adapter *pth_na;
+ /* Netmap adapter wrapping the backend. */
+ struct netmap_pt_host_adapter *pth_na;
- IFRATE(struct rate_context rate_ctx;)
+ IFRATE(struct rate_context rate_ctx;)
};
static inline void
@@ -1268,13 +1268,11 @@ netmap_get_pt_host_na(struct nmreq *nmr, struct netmap_adapter **na,
}
*na = &pth_na->up;
- netmap_adapter_get(*na);
-
/* set parent busy, because attached for ptnetmap */
parent->na_flags |= NAF_BUSY;
-
strncpy(pth_na->up.name, parent->name, sizeof(pth_na->up.name));
strcat(pth_na->up.name, "-PTN");
+ netmap_adapter_get(*na);
DBG(D("%s ptnetmap request DONE", pth_na->up.name));
@@ -1350,7 +1348,7 @@ netmap_pt_guest_txsync(struct ptnet_csb_gh *ptgh, struct ptnet_csb_hg *pthg,
* go to sleep and we need to be notified by the host when more free
* space is available.
*/
- if (nm_kr_txempty(kring)) {
+ if (nm_kr_txempty(kring) && !(kring->nr_kflags & NKR_NOINTR)) {
/* Reenable notifications. */
ptgh->guest_need_kick = 1;
/* Double check */
@@ -1415,7 +1413,7 @@ netmap_pt_guest_rxsync(struct ptnet_csb_gh *ptgh, struct ptnet_csb_hg *pthg,
* we need to be notified by the host when more RX slots have been
* completed.
*/
- if (nm_kr_rxempty(kring)) {
+ if (nm_kr_rxempty(kring) && !(kring->nr_kflags & NKR_NOINTR)) {
/* Reenable notifications. */
ptgh->guest_need_kick = 1;
/* Double check */
@@ -1504,7 +1502,7 @@ netmap_pt_guest_attach(struct netmap_adapter *arg,
if (arg->nm_mem == NULL)
return ENOMEM;
arg->na_flags |= NAF_MEM_OWNER;
- error = netmap_attach_ext(arg, sizeof(struct netmap_pt_guest_adapter));
+ error = netmap_attach_ext(arg, sizeof(struct netmap_pt_guest_adapter), 1);
if (error)
return error;
@@ -1517,7 +1515,7 @@ netmap_pt_guest_attach(struct netmap_adapter *arg,
memset(&ptna->dr, 0, sizeof(ptna->dr));
ptna->dr.up.ifp = ifp;
ptna->dr.up.nm_mem = netmap_mem_get(ptna->hwup.up.nm_mem);
- ptna->dr.up.nm_config = ptna->hwup.up.nm_config;
+ ptna->dr.up.nm_config = ptna->hwup.up.nm_config;
ptna->backend_regifs = 0;