Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: rotary_encoder - use guard notation when acquiring mutex

Using guard notation makes the code more compact and error handling
more robust by ensuring that mutexes are released in all code paths
when control leaves critical section.

Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Link: https://lore.kernel.org/r/20240904044929.1049700-1-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+8 -15
+8 -15
drivers/input/misc/rotary_encoder.c
··· 106 106 struct rotary_encoder *encoder = dev_id; 107 107 unsigned int state; 108 108 109 - mutex_lock(&encoder->access_mutex); 109 + guard(mutex)(&encoder->access_mutex); 110 110 111 111 state = rotary_encoder_get_state(encoder); 112 112 ··· 129 129 break; 130 130 } 131 131 132 - mutex_unlock(&encoder->access_mutex); 133 - 134 132 return IRQ_HANDLED; 135 133 } 136 134 ··· 137 139 struct rotary_encoder *encoder = dev_id; 138 140 unsigned int state; 139 141 140 - mutex_lock(&encoder->access_mutex); 142 + guard(mutex)(&encoder->access_mutex); 141 143 142 144 state = rotary_encoder_get_state(encoder); 143 145 ··· 150 152 } 151 153 } 152 154 153 - mutex_unlock(&encoder->access_mutex); 154 - 155 155 return IRQ_HANDLED; 156 156 } 157 157 ··· 158 162 struct rotary_encoder *encoder = dev_id; 159 163 unsigned int state; 160 164 161 - mutex_lock(&encoder->access_mutex); 165 + guard(mutex)(&encoder->access_mutex); 162 166 163 167 state = rotary_encoder_get_state(encoder); 164 168 165 - if ((encoder->last_stable + 1) % 4 == state) 169 + if ((encoder->last_stable + 1) % 4 == state) { 166 170 encoder->dir = 1; 167 - else if (encoder->last_stable == (state + 1) % 4) 171 + rotary_encoder_report_event(encoder); 172 + } else if (encoder->last_stable == (state + 1) % 4) { 168 173 encoder->dir = -1; 169 - else 170 - goto out; 174 + rotary_encoder_report_event(encoder); 175 + } 171 176 172 - rotary_encoder_report_event(encoder); 173 - 174 - out: 175 177 encoder->last_stable = state; 176 - mutex_unlock(&encoder->access_mutex); 177 178 178 179 return IRQ_HANDLED; 179 180 }