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

Commit 79946884 authored by Mohit Aggarwal's avatar Mohit Aggarwal
Browse files

diag: Change to GFP_KERNEL in diagfwd_buffers_init()



In diagfwd_buffers_init() change the memory allocation
from GFP_ATOMIC to GFP_KERNEL.

Change-Id: I8ea299a4287401a0a01ff7bbdd86c37ccd138480
Signed-off-by: default avatarSreelakshmi Gownipalli <sgownipa@codeaurora.org>
Signed-off-by: default avatarMohit Aggarwal <maggarwa@codeaurora.org>
parent ec82f6fd
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -435,7 +435,7 @@ int diagfwd_peripheral_init(void)
			fwd_info->inited = 1;
			fwd_info->read_bytes = 0;
			fwd_info->write_bytes = 0;
			spin_lock_init(&fwd_info->buf_lock);
			mutex_init(&fwd_info->buf_mutex);
			mutex_init(&fwd_info->data_mutex);
		}
	}
@@ -450,7 +450,7 @@ int diagfwd_peripheral_init(void)
			fwd_info->ch_open = 0;
			fwd_info->read_bytes = 0;
			fwd_info->write_bytes = 0;
			spin_lock_init(&fwd_info->buf_lock);
			mutex_init(&fwd_info->buf_mutex);
			mutex_init(&fwd_info->data_mutex);
			/*
			 * This state shouldn't be set for Control channels
@@ -988,7 +988,6 @@ static void diagfwd_queue_read(struct diagfwd_info *fwd_info)

void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
{
	unsigned long flags;

	if (!fwd_info)
		return;
@@ -999,10 +998,10 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
		return;
	}

	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	mutex_lock(&fwd_info->buf_mutex);
	if (!fwd_info->buf_1) {
		fwd_info->buf_1 = kzalloc(sizeof(struct diagfwd_buf_t),
					  GFP_ATOMIC);
					  GFP_KERNEL);
		if (!fwd_info->buf_1)
			goto err;
		kmemleak_not_leak(fwd_info->buf_1);
@@ -1010,7 +1009,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
	if (!fwd_info->buf_1->data) {
		fwd_info->buf_1->data = kzalloc(PERIPHERAL_BUF_SZ +
					APF_DIAG_PADDING,
					GFP_ATOMIC);
					GFP_KERNEL);
		if (!fwd_info->buf_1->data)
			goto err;
		fwd_info->buf_1->len = PERIPHERAL_BUF_SZ;
@@ -1022,7 +1021,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
	if (fwd_info->type == TYPE_DATA) {
		if (!fwd_info->buf_2) {
			fwd_info->buf_2 = kzalloc(sizeof(struct diagfwd_buf_t),
					      GFP_ATOMIC);
					      GFP_KERNEL);
			if (!fwd_info->buf_2)
				goto err;
			kmemleak_not_leak(fwd_info->buf_2);
@@ -1031,7 +1030,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
		if (!fwd_info->buf_2->data) {
			fwd_info->buf_2->data = kzalloc(PERIPHERAL_BUF_SZ +
							APF_DIAG_PADDING,
						    GFP_ATOMIC);
						    GFP_KERNEL);
			if (!fwd_info->buf_2->data)
				goto err;
			fwd_info->buf_2->len = PERIPHERAL_BUF_SZ;
@@ -1047,7 +1046,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
				fwd_info->buf_1->data_raw =
					kzalloc(PERIPHERAL_BUF_SZ +
						APF_DIAG_PADDING,
						GFP_ATOMIC);
						GFP_KERNEL);
				if (!fwd_info->buf_1->data_raw)
					goto err;
				fwd_info->buf_1->len_raw = PERIPHERAL_BUF_SZ;
@@ -1057,7 +1056,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
				fwd_info->buf_2->data_raw =
					kzalloc(PERIPHERAL_BUF_SZ +
						APF_DIAG_PADDING,
						GFP_ATOMIC);
						GFP_KERNEL);
				if (!fwd_info->buf_2->data_raw)
					goto err;
				fwd_info->buf_2->len_raw = PERIPHERAL_BUF_SZ;
@@ -1071,7 +1070,7 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
		if (!fwd_info->buf_1->data_raw) {
			fwd_info->buf_1->data_raw = kzalloc(PERIPHERAL_BUF_SZ +
						APF_DIAG_PADDING,
							GFP_ATOMIC);
							GFP_KERNEL);
			if (!fwd_info->buf_1->data_raw)
				goto err;
			fwd_info->buf_1->len_raw = PERIPHERAL_BUF_SZ;
@@ -1079,11 +1078,11 @@ void diagfwd_buffers_init(struct diagfwd_info *fwd_info)
		}
	}

	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);
	mutex_unlock(&fwd_info->buf_mutex);
	return;

err:
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);
	mutex_unlock(&fwd_info->buf_mutex);
	diagfwd_buffers_exit(fwd_info);

	return;
@@ -1091,12 +1090,11 @@ err:

static void diagfwd_buffers_exit(struct diagfwd_info *fwd_info)
{
	unsigned long flags;

	if (!fwd_info)
		return;

	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	mutex_lock(&fwd_info->buf_mutex);
	if (fwd_info->buf_1) {
		kfree(fwd_info->buf_1->data);
		fwd_info->buf_1->data = NULL;
@@ -1113,6 +1111,6 @@ static void diagfwd_buffers_exit(struct diagfwd_info *fwd_info)
		kfree(fwd_info->buf_2);
		fwd_info->buf_2 = NULL;
	}
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);
	mutex_unlock(&fwd_info->buf_mutex);
}
+2 −2
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2016, 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
@@ -67,7 +67,7 @@ struct diagfwd_info {
	atomic_t opened;
	unsigned long read_bytes;
	unsigned long write_bytes;
	spinlock_t buf_lock;
	struct mutex buf_mutex;
	struct mutex data_mutex;
	void *ctxt;
	struct diagfwd_buf_t *buf_1;
+3 −7
Original line number Diff line number Diff line
@@ -234,13 +234,6 @@ static void socket_data_ready(struct sock *sk_ptr)
	spin_unlock_irqrestore(&info->lock, flags);
	diag_ws_on_notify();

	/*
	 * Initialize read buffers for the servers. The servers must read data
	 * first to get the address of its clients.
	 */
	if (!atomic_read(&info->opened) && info->port_type == PORT_TYPE_SERVER)
		diagfwd_buffers_init(info->fwd_ctxt);

	queue_work(info->wq, &(info->read_work));
	wake_up_interruptible(&info->read_wait_q);
	return;
@@ -629,6 +622,9 @@ static void socket_read_work_fn(struct work_struct *work)
	if (!info)
		return;

	if (!atomic_read(&info->opened) && info->port_type == PORT_TYPE_SERVER)
		diagfwd_buffers_init(info->fwd_ctxt);

	diagfwd_channel_read(info->fwd_ctxt);
}