qca-nss-drv: add NAPI threading

Signed-off-by: Sean Khan <datapronix@protonmail.com>
This commit is contained in:
Sean Khan 2024-06-02 19:35:52 -04:00
parent f5844d3706
commit 5700922738
3 changed files with 115 additions and 1 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=qca-nss-drv PKG_NAME:=qca-nss-drv
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_SOURCE_URL:=https://git.codelinaro.org/clo/qsdk/oss/lklm/nss-drv.git PKG_SOURCE_URL:=https://git.codelinaro.org/clo/qsdk/oss/lklm/nss-drv.git
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git

View File

@ -0,0 +1,57 @@
--- a/nss_hal/nss_hal.c
+++ b/nss_hal/nss_hal.c
@@ -302,6 +302,8 @@ int nss_hal_probe(struct platform_device
* Initialize the dummy netdevice.
*/
init_dummy_netdev(&nss_ctx->napi_ndev);
+ strcpy(nss_ctx->napi_ndev.name, "nss");
+ nss_ctx->napi_ndev.threaded = 1;
for (i = 0; i < npd->num_irq; i++) {
err = nss_hal_register_irq(nss_ctx, npd, &nss_ctx->napi_ndev, i);
--- a/nss_core.c
+++ b/nss_core.c
@@ -2423,8 +2423,7 @@ int nss_core_handle_napi(struct napi_str
int_ctx->cause |= int_cause;
} while ((int_ctx->cause) && (budget));
- if (int_ctx->cause == 0) {
- napi_complete(napi);
+ if (int_ctx->cause == 0 && napi_complete(napi)) {
/*
* Re-enable any further interrupt from this IRQ
@@ -2464,8 +2463,8 @@ int nss_core_handle_napi_sdma(struct nap
ctrl->consumer[0].dispatch.fp(ctrl->consumer[0].arg.kp);
#if !defined(NSS_HAL_IPQ806X_SUPPORT)
- napi_complete(napi);
- enable_irq(int_ctx->irq);
+ if (napi_complete(napi))
+ enable_irq(int_ctx->irq);
#endif
return 0;
}
@@ -2480,10 +2479,8 @@ int nss_core_handle_napi_queue(struct na
struct int_ctx_instance *int_ctx = container_of(napi, struct int_ctx_instance, napi);
processed = nss_core_handle_cause_queue(int_ctx, int_ctx->cause, budget);
- if (processed < budget) {
- napi_complete(napi);
+ if (processed < budget && napi_complete(napi))
enable_irq(int_ctx->irq);
- }
return processed;
}
@@ -2497,8 +2494,8 @@ int nss_core_handle_napi_non_queue(struc
struct int_ctx_instance *int_ctx = container_of(napi, struct int_ctx_instance, napi);
nss_core_handle_cause_nonqueue(int_ctx, int_ctx->cause, 0);
- napi_complete(napi);
- enable_irq(int_ctx->irq);
+ if (napi_complete(napi))
+ enable_irq(int_ctx->irq);
return 0;
}

View File

@ -0,0 +1,57 @@
--- a/nss_hal/nss_hal.c
+++ b/nss_hal/nss_hal.c
@@ -302,6 +302,8 @@ int nss_hal_probe(struct platform_device
* Initialize the dummy netdevice.
*/
init_dummy_netdev(&nss_ctx->napi_ndev);
+ strcpy(nss_ctx->napi_ndev.name, "nss");
+ nss_ctx->napi_ndev.threaded = 1;
for (i = 0; i < npd->num_irq; i++) {
err = nss_hal_register_irq(nss_ctx, npd, &nss_ctx->napi_ndev, i);
--- a/nss_core.c
+++ b/nss_core.c
@@ -2423,8 +2423,7 @@ int nss_core_handle_napi(struct napi_str
int_ctx->cause |= int_cause;
} while ((int_ctx->cause) && (budget));
- if (int_ctx->cause == 0) {
- napi_complete(napi);
+ if (int_ctx->cause == 0 && napi_complete(napi)) {
/*
* Re-enable any further interrupt from this IRQ
@@ -2464,8 +2463,8 @@ int nss_core_handle_napi_sdma(struct nap
ctrl->consumer[0].dispatch.fp(ctrl->consumer[0].arg.kp);
#if !defined(NSS_HAL_IPQ806X_SUPPORT)
- napi_complete(napi);
- enable_irq(int_ctx->irq);
+ if (napi_complete(napi))
+ enable_irq(int_ctx->irq);
#endif
return 0;
}
@@ -2480,10 +2479,8 @@ int nss_core_handle_napi_queue(struct na
struct int_ctx_instance *int_ctx = container_of(napi, struct int_ctx_instance, napi);
processed = nss_core_handle_cause_queue(int_ctx, int_ctx->cause, budget);
- if (processed < budget) {
- napi_complete(napi);
+ if (processed < budget && napi_complete(napi))
enable_irq(int_ctx->irq);
- }
return processed;
}
@@ -2497,8 +2494,8 @@ int nss_core_handle_napi_non_queue(struc
struct int_ctx_instance *int_ctx = container_of(napi, struct int_ctx_instance, napi);
nss_core_handle_cause_nonqueue(int_ctx, int_ctx->cause, 0);
- napi_complete(napi);
- enable_irq(int_ctx->irq);
+ if (napi_complete(napi))
+ enable_irq(int_ctx->irq);
return 0;
}