diff options
author | Aishwarya Pant <aishpant@gmail.com> | 2017-03-12 21:09:31 +0530 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-03-14 07:57:53 +0800 |
commit | 8f1fff07b07fdb15d1d585f6eb1ea56e748bc637 (patch) | |
tree | 833b62a35e4bb7311419756110aa3a80c287ba8c /drivers/staging/vc04_services | |
parent | 5e00b25853ef2d5602d14f0e6039268cc89e6afe (diff) |
staging: bcm2835-audio: use conditional only for error case
* Refactor conditional to check if memory allocation has failed and
immediately return (-ENOMEM); if block for success case is removed.
* Return the error value -EBUSY when queue_work() fails.
Signed-off-by: Aishwarya Pant <aishpant@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vc04_services')
-rw-r--r-- | drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c | 67 |
1 files changed, 32 insertions, 35 deletions
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c index 698fdff24be7..6feb1a6b07d9 100644 --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c @@ -131,77 +131,74 @@ static void my_wq_function(struct work_struct *work) int bcm2835_audio_start(struct bcm2835_alsa_stream *alsa_stream) { - int ret = -1; - LOG_DBG(" .. IN\n"); if (alsa_stream->my_wq) { struct bcm2835_audio_work *work; work = kmalloc(sizeof(*work), GFP_ATOMIC); /*--- Queue some work (item 1) ---*/ - if (work) { - INIT_WORK(&work->my_work, my_wq_function); - work->alsa_stream = alsa_stream; - work->cmd = BCM2835_AUDIO_START; - if (queue_work(alsa_stream->my_wq, &work->my_work)) - ret = 0; - } else { + if (!work) { LOG_ERR(" .. Error: NULL work kmalloc\n"); + return -ENOMEM; + } + INIT_WORK(&work->my_work, my_wq_function); + work->alsa_stream = alsa_stream; + work->cmd = BCM2835_AUDIO_START; + if (!queue_work(alsa_stream->my_wq, &work->my_work)) { + return -EBUSY; } } - LOG_DBG(" .. OUT %d\n", ret); - return ret; + LOG_DBG(" .. OUT\n"); + return 0; } int bcm2835_audio_stop(struct bcm2835_alsa_stream *alsa_stream) { - int ret = -1; - LOG_DBG(" .. IN\n"); if (alsa_stream->my_wq) { struct bcm2835_audio_work *work; work = kmalloc(sizeof(*work), GFP_ATOMIC); /*--- Queue some work (item 1) ---*/ - if (work) { - INIT_WORK(&work->my_work, my_wq_function); - work->alsa_stream = alsa_stream; - work->cmd = BCM2835_AUDIO_STOP; - if (queue_work(alsa_stream->my_wq, &work->my_work)) - ret = 0; - } else { + if (!work) { LOG_ERR(" .. Error: NULL work kmalloc\n"); + return -ENOMEM; + } + INIT_WORK(&work->my_work, my_wq_function); + work->alsa_stream = alsa_stream; + work->cmd = BCM2835_AUDIO_STOP; + if (!queue_work(alsa_stream->my_wq, &work->my_work)) { + return -EBUSY; } } - LOG_DBG(" .. OUT %d\n", ret); - return ret; + LOG_DBG(" .. OUT\n"); + return 0; } int bcm2835_audio_write(struct bcm2835_alsa_stream *alsa_stream, unsigned int count, void *src) { - int ret = -1; - LOG_DBG(" .. IN\n"); if (alsa_stream->my_wq) { struct bcm2835_audio_work *work; work = kmalloc(sizeof(*work), GFP_ATOMIC); /*--- Queue some work (item 1) ---*/ - if (work) { - INIT_WORK(&work->my_work, my_wq_function); - work->alsa_stream = alsa_stream; - work->cmd = BCM2835_AUDIO_WRITE; - work->src = src; - work->count = count; - if (queue_work(alsa_stream->my_wq, &work->my_work)) - ret = 0; - } else { + if (!work) { LOG_ERR(" .. Error: NULL work kmalloc\n"); + return -ENOMEM; + } + INIT_WORK(&work->my_work, my_wq_function); + work->alsa_stream = alsa_stream; + work->cmd = BCM2835_AUDIO_WRITE; + work->src = src; + work->count = count; + if (!queue_work(alsa_stream->my_wq, &work->my_work)) { + return -EBUSY; } } - LOG_DBG(" .. OUT %d\n", ret); - return ret; + LOG_DBG(" .. OUT\n"); + return 0; } static void my_workqueue_init(struct bcm2835_alsa_stream *alsa_stream) |