qcacmn: Mangle napi_poll return value when rescheduling
4.4 kernel NAPI implementation requires drivers to
return full work when they ask to be re-scheduled
or napi_complete and re-start with a fresh interrupt
Also takes care of the expectation that when not rescheduling
you return strictly less than budget.
Change-Id: I31b024d80b9941c539a9c9f89799a30dac2f5dfe
CRs-Fixed: 1017058
diff --git a/hif/src/hif_napi.c b/hif/src/hif_napi.c
index 07f3853..45735c0 100644
--- a/hif/src/hif_napi.c
+++ b/hif/src/hif_napi.c
@@ -477,6 +477,9 @@
hif_record_ce_desc_event(hif, ce_state->id, NAPI_COMPLETE,
NULL, NULL, 0);
+ if (normalized >= budget)
+ normalized = budget - 1;
+
/* enable interrupts */
napi_complete(napi);
if (NULL != hif) {
@@ -488,6 +491,12 @@
NAPI_DEBUG("%s:%d: napi_complete + enabling the interrupts",
__func__, __LINE__);
+ } else {
+ /* 4.4 kernel NAPI implementation requires drivers to
+ * return full work when they ask to be re-scheduled,
+ * or napi_complete and re-start with a fresh interrupt
+ */
+ normalized = budget;
}
hif_record_ce_desc_event(hif, NAPI_ID2PIPE(napi_info->id),