diag: Increment data ready only if it is first update

Increment data ready only if it is not incremented earlier.

Change-Id: Ia61e638bcf18e17dfe4bef15fc8ed4168b4c1891
Signed-off-by: Sreelakshmi Gownipalli <sgownipa@codeaurora.org>
Signed-off-by: Hardik Arya <harya@codeaurora.org>
This commit is contained in:
Hardik Arya 2017-11-22 12:25:39 -08:00 committed by syphyr
parent 315f137385
commit 170f5f103e
3 changed files with 14 additions and 8 deletions

View File

@ -178,8 +178,10 @@ int diag_md_write(int id, unsigned char *buf, int len, int ctx)
continue;
}
found = 1;
driver->data_ready[i] |= USER_SPACE_DATA_TYPE;
atomic_inc(&driver->data_ready_notif[i]);
if (!(driver->data_ready[i] & USER_SPACE_DATA_TYPE)) {
driver->data_ready[i] |= USER_SPACE_DATA_TYPE;
atomic_inc(&driver->data_ready_notif[i]);
}
pr_debug("diag: wake up logging process\n");
wake_up_interruptible(&driver->wait_q);
}

View File

@ -1436,9 +1436,10 @@ static int diag_ioctl_lsm_deinit(void)
mutex_unlock(&driver->diagchar_mutex);
return -EINVAL;
}
driver->data_ready[i] |= DEINIT_TYPE;
atomic_inc(&driver->data_ready_notif[i]);
if (!(driver->data_ready[i] & DEINIT_TYPE)) {
driver->data_ready[i] |= DEINIT_TYPE;
atomic_inc(&driver->data_ready_notif[i]);
}
mutex_unlock(&driver->diagchar_mutex);
wake_up_interruptible(&driver->wait_q);

View File

@ -429,7 +429,8 @@ void diag_update_userspace_clients(unsigned int type)
mutex_lock(&driver->diagchar_mutex);
for (i = 0; i < driver->num_clients; i++)
if (driver->client_map[i].pid != 0) {
if (driver->client_map[i].pid != 0 &&
!(driver->data_ready[i] & type)) {
driver->data_ready[i] |= type;
atomic_inc(&driver->data_ready_notif[i]);
}
@ -444,8 +445,10 @@ void diag_update_sleeping_process(int process_id, int data_type)
mutex_lock(&driver->diagchar_mutex);
for (i = 0; i < driver->num_clients; i++)
if (driver->client_map[i].pid == process_id) {
driver->data_ready[i] |= data_type;
atomic_inc(&driver->data_ready_notif[i]);
if (!(driver->data_ready[i] & data_type)) {
driver->data_ready[i] |= data_type;
atomic_inc(&driver->data_ready_notif[i]);
}
break;
}
wake_up_interruptible(&driver->wait_q);