Use mutex instead of semaphore
cover Use mutex instead of semaphore
This patchset replaces binary semaphore with mutex in comedi drivers.
Ksenija Stanojevic (4):
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
drivers/staging/comedi/drivers/ni_usb6501.c | 16 +++---- drivers/staging/comedi/drivers/usbdux.c | 64 ++++++++++++------------- drivers/staging/comedi/drivers/usbduxfast.c | 36 +++++++------- drivers/staging/comedi/drivers/usbduxsigma.c | 70 ++++++++++++++-------------- 4 files changed, 93 insertions(+), 93 deletions(-)
Signature · 1 line
1.9.1
PATCH 1/4 Staging: comedi: Use mutex instead of semaphore
Replace binary semaphore with mutex because mutex gives better performance.
--- drivers/staging/comedi/drivers/usbduxsigma.c | 70 ++++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-)
drivers/staging/comedi/drivers/usbduxsigma.c +35 -35
@@ -173,7 +173,7 @@ struct usbduxsigma_private {unsigned int ai_interval;/* commands */ u8 *dux_commands; -struct semaphore sem; +struct mutex mut; };static void usbduxsigma_unlink_urbs (struct urb **urbs,int num_urbs)
@@ -199,10 +199,10 @@ static int usbduxsigma_ai_cancel(struct comedi_device *dev, {struct usbduxsigma_private *devpriv = dev->private; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* unlink only if it is really running */ usbduxsigma_ai_stop (dev, devpriv->ai_cmd_running); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -325,10 +325,10 @@ static int usbduxsigma_ao_cancel(struct comedi_device *dev, {struct usbduxsigma_private *devpriv = dev->private; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* unlink only if it is really running */ usbduxsigma_ao_stop (dev, devpriv->ao_cmd_running); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -609,19 +609,19 @@ static int usbduxsigma_ai_inttrig(struct comedi_device *dev,if (trig_num != cmd->start_arg)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (!devpriv->ai_cmd_running) { devpriv->ai_cmd_running =1 ; ret =usbduxsigma_submit_urbs (dev, devpriv->ai_urbs, devpriv->n_ai_urbs,1 );if (ret <0 ) { devpriv->ai_cmd_running =0 ; -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->async->inttrig =NULL ; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 1 ; }
@@ -638,7 +638,7 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev,int ret;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->high_speed) {/*
@@ -673,7 +673,7 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, ret =usbbuxsigma_send_cmd (dev,USBBUXSIGMA_AD_CMD );if (ret <0 ) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -686,7 +686,7 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, devpriv->n_ai_urbs, 1);if (ret <0 ) { devpriv->ai_cmd_running =0 ; -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->async->inttrig =NULL ;
@@ -694,7 +694,7 @@ static int usbduxsigma_ai_cmd(struct comedi_device *dev, s->async->inttrig = usbduxsigma_ai_inttrig; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -712,9 +712,9 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev,int ret;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ai_cmd_running) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return -EBUSY ; }
@@ -731,7 +731,7 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev,/* adc commands */ ret =usbbuxsigma_send_cmd (dev,USBDUXSIGMA_SINGLE_AD_CMD );if (ret <0 ) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -740,7 +740,7 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev, ret =usbduxsigma_receive_cmd (dev,USBDUXSIGMA_SINGLE_AD_CMD );if (ret <0 ) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -750,7 +750,7 @@ static int usbduxsigma_ai_insn_read(struct comedi_device *dev, val &=0x00ffffff ;/* strip status byte */ data[i] =comedi_offset_munge (s, val); } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return insn->n; }
@@ -763,9 +763,9 @@ static int usbduxsigma_ao_insn_read(struct comedi_device *dev,struct usbduxsigma_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut); ret =comedi_readback_insn_read (dev, s, insn, data); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -780,9 +780,9 @@ static int usbduxsigma_ao_insn_write(struct comedi_device *dev,int ret;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ao_cmd_running) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return -EBUSY ; }
@@ -792,12 +792,12 @@ static int usbduxsigma_ao_insn_write(struct comedi_device *dev, devpriv->dux_commands[3 ] = chan;/* channel number */ ret =usbbuxsigma_send_cmd (dev,USBDUXSIGMA_DA_CMD );if (ret <0 ) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->readback[chan] = data[i]; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return insn->n; }
@@ -813,19 +813,19 @@ static int usbduxsigma_ao_inttrig(struct comedi_device *dev,if (trig_num != cmd->start_arg)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (!devpriv->ao_cmd_running) { devpriv->ao_cmd_running =1 ; ret =usbduxsigma_submit_urbs (dev, devpriv->ao_urbs, devpriv->n_ao_urbs,0 );if (ret <0 ) { devpriv->ao_cmd_running =0 ; -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->async->inttrig =NULL ; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 1 ; }
@@ -856,7 +856,7 @@ static int usbduxsigma_ao_cmdtest(struct comedi_device *dev, err |=comedi_check_trigger_src (&cmd->stop_src,TRIG_COUNT |TRIG_NONE );if (err) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 1 ; }
@@ -905,7 +905,7 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev,struct comedi_cmd *cmd = &s->async->cmd;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* * For now, only "scan" timing is supported. A future version may
@@ -924,7 +924,7 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev, devpriv->n_ao_urbs, 0);if (ret <0 ) { devpriv->ao_cmd_running =0 ; -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->async->inttrig =NULL ;
@@ -932,7 +932,7 @@ static int usbduxsigma_ao_cmd(struct comedi_device *dev, s->async->inttrig = usbduxsigma_ao_inttrig; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -963,7 +963,7 @@ static int usbduxsigma_dio_insn_bits(struct comedi_device *dev,struct usbduxsigma_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);comedi_dio_update_state (s, data);
@@ -990,7 +990,7 @@ static int usbduxsigma_dio_insn_bits(struct comedi_device *dev, ret = insn->n; done: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -1462,7 +1462,7 @@ static int usbduxsigma_auto_attach(struct comedi_device *dev,if (!devpriv)return -ENOMEM ; -sema_init (&devpriv->sem,1 ); +mutex_init (&devpriv->mut);usb_set_intfdata (intf, devpriv);
@@ -1576,7 +1576,7 @@ static void usbduxsigma_detach(struct comedi_device *dev)if (!devpriv)return ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* force unlink all urbs */ usbduxsigma_ai_stop (dev,1 );
@@ -1585,7 +1585,7 @@ static void usbduxsigma_detach(struct comedi_device *dev)usbduxsigma_free_usb_buffers (dev); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut); }static struct comedi_driver usbduxsigma_driver = {
Signature · 1 line
1.9.1
PATCH 2/4 Staging: comedi: Use mutex instead of semaphore
In reply to Ksenija StanojevicReplace binary semaphore with mutex because mutex gives better performance.
--- drivers/staging/comedi/drivers/usbdux.c | 64 ++++++++++++++++----------------- 1 file changed, 32 insertions(+), 32 deletions(-)
drivers/staging/comedi/drivers/usbdux.c +32 -32
@@ -210,7 +210,7 @@ struct usbdux_private {unsigned int ai_interval;/* commands */ u8 *dux_commands; -struct semaphore sem; +struct mutex mut; };static void usbdux_unlink_urbs (struct urb **urbs,int num_urbs)
@@ -237,10 +237,10 @@ static int usbdux_ai_cancel(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;/* prevent other CPUs from submitting new commands just now */ -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* unlink only if the urb really has been submitted */ usbdux_ai_stop (dev, devpriv->ai_cmd_running); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -365,10 +365,10 @@ static int usbdux_ao_cancel(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;/* prevent other CPUs from submitting a command just now */ -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* unlink only if it is really running */ usbdux_ao_stop (dev, devpriv->ao_cmd_running); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 0 ; }
@@ -646,7 +646,7 @@ static int usbdux_ai_inttrig(struct comedi_device *dev,if (trig_num != cmd->start_arg)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (!devpriv->ai_cmd_running) { devpriv->ai_cmd_running =1 ;
@@ -662,7 +662,7 @@ static int usbdux_ai_inttrig(struct comedi_device *dev, } ai_trig_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -675,7 +675,7 @@ static int usbdux_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)int i;/* block other CPUs from starting an ai_cmd */ -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ai_cmd_running) goto ai_cmd_exit;
@@ -736,7 +736,7 @@ static int usbdux_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } ai_cmd_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -754,7 +754,7 @@ static int usbdux_ai_insn_read(struct comedi_device *dev,int ret = -EBUSY ;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ai_cmd_running) goto ai_read_exit;
@@ -782,7 +782,7 @@ static int usbdux_ai_insn_read(struct comedi_device *dev, } ai_read_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret ? ret : insn->n; }
@@ -795,9 +795,9 @@ static int usbdux_ao_insn_read(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut); ret =comedi_readback_insn_read (dev, s, insn, data); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -814,7 +814,7 @@ static int usbdux_ao_insn_write(struct comedi_device *dev,int ret = -EBUSY ;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ao_cmd_running) goto ao_write_exit;
@@ -838,7 +838,7 @@ static int usbdux_ao_insn_write(struct comedi_device *dev, } ao_write_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret ? ret : insn->n; }
@@ -854,7 +854,7 @@ static int usbdux_ao_inttrig(struct comedi_device *dev,if (trig_num != cmd->start_arg)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (!devpriv->ao_cmd_running) { devpriv->ao_cmd_running =1 ;
@@ -870,7 +870,7 @@ static int usbdux_ao_inttrig(struct comedi_device *dev, } ao_trig_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -960,7 +960,7 @@ static int usbdux_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s)struct comedi_cmd *cmd = &s->async->cmd;int ret = -EBUSY ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ao_cmd_running) goto ao_cmd_exit;
@@ -1002,7 +1002,7 @@ static int usbdux_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } ao_cmd_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -1033,7 +1033,7 @@ static int usbdux_dio_insn_bits(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);comedi_dio_update_state (s, data);
@@ -1055,7 +1055,7 @@ static int usbdux_dio_insn_bits(struct comedi_device *dev, data[1 ] =le16_to_cpu (devpriv->insn_buf[1 ]); dio_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret ? ret : insn->n; }
@@ -1070,7 +1070,7 @@ static int usbdux_counter_read(struct comedi_device *dev,int ret =0 ;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);for (i =0 ; i < insn->n; i++) { ret =send_dux_commands (dev,USBDUX_CMD_TIMER_RD );
@@ -1084,7 +1084,7 @@ static int usbdux_counter_read(struct comedi_device *dev, } counter_read_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret ? ret : insn->n; }
@@ -1100,7 +1100,7 @@ static int usbdux_counter_write(struct comedi_device *dev,int ret =0 ;int i; -down (&devpriv->sem); +mutex_lock (&devpriv->mut); devpriv->dux_commands[1 ] = chan;
@@ -1112,7 +1112,7 @@ static int usbdux_counter_write(struct comedi_device *dev,break ; } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret ? ret : insn->n; }
@@ -1148,11 +1148,11 @@ static int usbdux_pwm_cancel(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* unlink only if it is really running */ usbdux_pwm_stop (dev, devpriv->pwm_cmd_running); ret =send_dux_commands (dev,USBDUX_CMD_PWM_OFF ); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -1257,7 +1257,7 @@ static int usbdux_pwm_start(struct comedi_device *dev,struct usbdux_private *devpriv = dev->private;int ret =0 ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->pwm_cmd_running) goto pwm_start_exit;
@@ -1276,7 +1276,7 @@ static int usbdux_pwm_start(struct comedi_device *dev, devpriv->pwm_cmd_running =0 ; pwm_start_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -1576,7 +1576,7 @@ static int usbdux_auto_attach(struct comedi_device *dev,if (!devpriv)return -ENOMEM ; -sema_init (&devpriv->sem,1 ); +mutex_init (&devpriv->mut);usb_set_intfdata (intf, devpriv);
@@ -1691,7 +1691,7 @@ static void usbdux_detach(struct comedi_device *dev)if (!devpriv)return ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);/* force unlink all urbs */ usbdux_pwm_stop (dev,1 );
@@ -1700,7 +1700,7 @@ static void usbdux_detach(struct comedi_device *dev)usbdux_free_usb_buffers (dev); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut); }static struct comedi_driver usbdux_driver = {
Signature · 1 line
1.9.1
PATCH 3/4 Staging: comedi: Use mutex instead of semaphore
In reply to Ksenija StanojevicReplace binary semaphore with mutex because mutex gives better performance.
--- drivers/staging/comedi/drivers/usbduxfast.c | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-)
drivers/staging/comedi/drivers/usbduxfast.c +18 -18
@@ -160,7 +160,7 @@ struct usbduxfast_private {s8 *inbuf;short int ai_cmd_running;/* asynchronous command is running */ int ignore;/* counter which ignores the first buffers */ -struct semaphore sem; +struct mutex mut; };/*
@@ -221,9 +221,9 @@ static int usbduxfast_ai_cancel(struct comedi_device *dev,struct usbduxfast_private *devpriv = dev->private;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut); ret =usbduxfast_ai_stop (dev,1 ); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -444,7 +444,7 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,if (trig_num != cmd->start_arg)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (!devpriv->ai_cmd_running) { devpriv->ai_cmd_running =1 ;
@@ -452,14 +452,14 @@ static int usbduxfast_ai_inttrig(struct comedi_device *dev,if (ret <0 ) {dev_err (dev->class_dev,"urbSubmit: err=%d\n" , ret); devpriv->ai_cmd_running =0 ; -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } s->async->inttrig =NULL ; }else {dev_err (dev->class_dev,"ai is already running\n" ); } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return 1 ; }
@@ -472,7 +472,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,int j, ret;long steps, steps_tmp; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ai_cmd_running) { ret = -EBUSY ; goto cmd_exit;
@@ -751,7 +751,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, } cmd_exit: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -772,12 +772,12 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev,int i, j, n, actual_length;int ret; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);if (devpriv->ai_cmd_running) {dev_err (dev->class_dev,"ai_insn_read not possible, async cmd is running\n" ); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return -EBUSY ; }
@@ -799,7 +799,7 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, ret =usbduxfast_send_cmd (dev,SENDADCOMMANDS );if (ret <0 ) { -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -809,7 +809,7 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, &actual_length, 10000);if (ret <0 ) {dev_err (dev->class_dev,"insn timeout, no data\n" ); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } }
@@ -820,13 +820,13 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, &actual_length, 10000);if (ret <0 ) {dev_err (dev->class_dev,"insn data error: %d\n" , ret); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; } n = actual_length /sizeof (u16);if ((n %16 ) !=0 ) {dev_err (dev->class_dev,"insn data packet corrupted\n" ); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return -EINVAL ; }for (j = chan; (j < n) && (i < insn->n); j = j +16 ) {
@@ -835,7 +835,7 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, } } -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return insn->n; }
@@ -930,7 +930,7 @@ static int usbduxfast_auto_attach(struct comedi_device *dev,if (!devpriv)return -ENOMEM ; -sema_init (&devpriv->sem,1 ); +mutex_init (&devpriv->mut);usb_set_intfdata (intf, devpriv); devpriv->duxbuf =kmalloc (SIZEOFDUXBUF ,GFP_KERNEL );
@@ -989,7 +989,7 @@ static void usbduxfast_detach(struct comedi_device *dev)if (!devpriv)return ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);usb_set_intfdata (intf,NULL );
@@ -1003,7 +1003,7 @@ static void usbduxfast_detach(struct comedi_device *dev)kfree (devpriv->duxbuf); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut); }static struct comedi_driver usbduxfast_driver = {
Signature · 1 line
1.9.1
PATCH 4/4 Staging: comedi: Use mutex instead of semaphore
In reply to Ksenija StanojevicReplace binary semaphore with mutex because mutex gives better performance.
--- drivers/staging/comedi/drivers/ni_usb6501.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/staging/comedi/drivers/ni_usb6501.c +8 -8
@@ -166,7 +166,7 @@ enum commands {struct ni6501_private {struct usb_endpoint_descriptor *ep_rx;struct usb_endpoint_descriptor *ep_tx; -struct semaphore sem; +struct mutex mut;u8 *usb_rx_buf;u8 *usb_tx_buf; };
@@ -183,7 +183,7 @@ static int ni6501_port_command(struct comedi_device *dev, int command,if (command !=SET_PORT_DIR && !bitmap)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);switch (command) {case READ_PORT :
@@ -248,7 +248,7 @@ static int ni6501_port_command(struct comedi_device *dev, int command, ret = -EINVAL ; } end: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -265,7 +265,7 @@ static int ni6501_counter_command(struct comedi_device *dev, int command,if ((command ==READ_COUNTER || command ==WRITE_COUNTER ) && !val)return -EINVAL ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);switch (command) {case START_COUNTER :
@@ -338,7 +338,7 @@ static int ni6501_counter_command(struct comedi_device *dev, int command, ret = -EINVAL ; } end: -up (&devpriv->sem); +mutex_unlock (&devpriv->mut);return ret; }
@@ -535,7 +535,7 @@ static int ni6501_auto_attach(struct comedi_device *dev,if (ret)return ret; -sema_init (&devpriv->sem,1 ); +mutex_init (&devpriv->mut);usb_set_intfdata (intf, devpriv); ret =comedi_alloc_subdevices (dev,2 );
@@ -573,14 +573,14 @@ static void ni6501_detach(struct comedi_device *dev)if (!devpriv)return ; -down (&devpriv->sem); +mutex_lock (&devpriv->mut);usb_set_intfdata (intf,NULL );kfree (devpriv->usb_rx_buf);kfree (devpriv->usb_tx_buf); -up (&devpriv->sem); +mutex_unlock (&devpriv->mut); }static struct comedi_driver ni6501_driver = {
Signature · 1 line
1.9.1
Quoted 9 lines · On Thursday 01 October 2015 18:05:57 Ksenija Stanojevic wrote:
This patchset replaces binary semaphore with mutex in comedi drivers.
Signed-off-by Ksenija Stanojevic <[email protected]>Ksenija Stanojevic (4):
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
The changes all look good to me, but I think it would be nice to expand the changelog a bit: in particular, how did you prove for each file that it is safe to replace the semaphore with a mutex.
Arnd
Greg KH
maintainerQuoted 9 lines · Ksenija Stanojevic
This patchset replaces binary semaphore with mutex in comedi drivers.
Signed-off-by Ksenija Stanojevic <[email protected]>Ksenija Stanojevic (4):
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
Staging: comedi: Use mutex instead of semaphore
All 4 of these patches have the same subject, which is not good :(
Please use the driver name in the subject to make them unique, otherwise it looks like something went wrong and you sent the same patch 4 times.
thanks,
greg k-h