Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b98d92f authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: gsi: fix to client notify on poll mode



When processing an IEOB interrupt, do not process the pending
events in case the channel is in polling mode.

Change-Id: I9b9fbc71ae33fe1bfef837580f9f8e9aa875160d
CRs-Fixed: 1112064
Acked-by: default avatarAdy Abraham <adya@qti.qualcomm.com>
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent 4865500b
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -362,9 +362,14 @@ static void gsi_process_chan(struct gsi_xfer_compl_evt *evt,
	notify->chan_user_data = ch_ctx->props.chan_user_data;
	notify->evt_id = evt->code;
	notify->bytes_xfered = evt->len;
	if (callback)
	if (callback) {
		if (atomic_read(&ch_ctx->poll_mode)) {
			GSIERR("Calling client callback in polling mode\n");
			WARN_ON(1);
		}
		ch_ctx->props.xfer_cb(notify);
	}
}

static void gsi_process_evt_re(struct gsi_evt_ctx *ctx,
		struct gsi_chan_xfer_notify *notify, bool callback)
@@ -459,12 +464,12 @@ static void gsi_handle_ieob(int ee)
			ctx->ring.rp = rp;
			while (ctx->ring.rp_local != rp) {
				++cntr;
				gsi_process_evt_re(ctx, &notify, true);
				if (ctx->props.exclusive &&
					atomic_read(&ctx->chan->poll_mode)) {
					cntr = 0;
					break;
				}
				gsi_process_evt_re(ctx, &notify, true);
			}
			gsi_ring_evt_doorbell(ctx);
			if (cntr != 0)