Loading drivers/char/diag/diagfwd_peripheral.c +14 −16 Original line number Diff line number Diff line Loading @@ -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); } } Loading @@ -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 Loading Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); } drivers/char/diag/diagfwd_peripheral.h +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 Loading Loading @@ -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; Loading drivers/char/diag/diagfwd_socket.c +3 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading
drivers/char/diag/diagfwd_peripheral.c +14 −16 Original line number Diff line number Diff line Loading @@ -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); } } Loading @@ -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 Loading Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); }
drivers/char/diag/diagfwd_peripheral.h +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 Loading Loading @@ -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; Loading
drivers/char/diag/diagfwd_socket.c +3 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading