<Prasurjya.Rohansaikia@xxxxxxxxxxxxx> writes: > From: Prasurjya Rohan Saikia <prasurjya.rohansaikia@xxxxxxxxxxxxx> > > Added an algorithm to backoff the Tx Task when low memory scenario is > triggered at firmware. During high data transfer from host, the firmware > runs out of VMM memory, which is used to hold the frames from the host. > So added flow control to delay the transmit from host side when there is > not enough space to accomodate frames in firmware side. > > Signed-off-by: Prasurjya Rohan Saikia <prasurjya.rohansaikia@xxxxxxxxxxxxx> [...] > - } while (ret == WILC_VMM_ENTRY_FULL_RETRY && !wl->close); > + if (ret != WILC_VMM_ENTRY_FULL_RETRY) > + break; > + /* Back off from sending packets for some time. > + * schedule_timeout will allow RX task to run and free > + * buffers. Setting state to TASK_INTERRUPTIBLE will > + * put the thread back to CPU running queue when it's > + * signaled even if 'timeout' isn't elapsed. This gives > + * faster chance for reserved SK buffers to be freed > + */ > + set_current_state(TASK_INTERRUPTIBLE); > + schedule_timeout(msecs_to_jiffies > + (TX_BACKOFF_WEIGHT_MS)); > + } while (!wl->close); Why not msleep_interruptible()? Also an ack from Ajay would be good. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches