hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/scsi/megaraid/megaraid_sas_base.c
....@@ -3221,14 +3221,13 @@
32213221 struct megasas_instance *instance =
32223222 (struct megasas_instance *) shost->hostdata;
32233223 int val = 0;
3224
- unsigned long flags;
32253224
32263225 if (kstrtoint(buf, 0, &val) != 0)
32273226 return -EINVAL;
32283227
3229
- spin_lock_irqsave(&instance->crashdump_lock, flags);
3228
+ mutex_lock(&instance->crashdump_lock);
32303229 instance->fw_crash_buffer_offset = val;
3231
- spin_unlock_irqrestore(&instance->crashdump_lock, flags);
3230
+ mutex_unlock(&instance->crashdump_lock);
32323231 return strlen(buf);
32333232 }
32343233
....@@ -3243,24 +3242,23 @@
32433242 unsigned long dmachunk = CRASH_DMA_BUF_SIZE;
32443243 unsigned long chunk_left_bytes;
32453244 unsigned long src_addr;
3246
- unsigned long flags;
32473245 u32 buff_offset;
32483246
3249
- spin_lock_irqsave(&instance->crashdump_lock, flags);
3247
+ mutex_lock(&instance->crashdump_lock);
32503248 buff_offset = instance->fw_crash_buffer_offset;
3251
- if (!instance->crash_dump_buf &&
3249
+ if (!instance->crash_dump_buf ||
32523250 !((instance->fw_crash_state == AVAILABLE) ||
32533251 (instance->fw_crash_state == COPYING))) {
32543252 dev_err(&instance->pdev->dev,
32553253 "Firmware crash dump is not available\n");
3256
- spin_unlock_irqrestore(&instance->crashdump_lock, flags);
3254
+ mutex_unlock(&instance->crashdump_lock);
32573255 return -EINVAL;
32583256 }
32593257
32603258 if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) {
32613259 dev_err(&instance->pdev->dev,
32623260 "Firmware crash dump offset is out of range\n");
3263
- spin_unlock_irqrestore(&instance->crashdump_lock, flags);
3261
+ mutex_unlock(&instance->crashdump_lock);
32643262 return 0;
32653263 }
32663264
....@@ -3272,7 +3270,7 @@
32723270 src_addr = (unsigned long)instance->crash_buf[buff_offset / dmachunk] +
32733271 (buff_offset % dmachunk);
32743272 memcpy(buf, (void *)src_addr, size);
3275
- spin_unlock_irqrestore(&instance->crashdump_lock, flags);
3273
+ mutex_unlock(&instance->crashdump_lock);
32763274
32773275 return size;
32783276 }
....@@ -3297,7 +3295,6 @@
32973295 struct megasas_instance *instance =
32983296 (struct megasas_instance *) shost->hostdata;
32993297 int val = 0;
3300
- unsigned long flags;
33013298
33023299 if (kstrtoint(buf, 0, &val) != 0)
33033300 return -EINVAL;
....@@ -3311,9 +3308,9 @@
33113308 instance->fw_crash_state = val;
33123309
33133310 if ((val == COPIED) || (val == COPY_ERROR)) {
3314
- spin_lock_irqsave(&instance->crashdump_lock, flags);
3311
+ mutex_lock(&instance->crashdump_lock);
33153312 megasas_free_host_crash_buffer(instance);
3316
- spin_unlock_irqrestore(&instance->crashdump_lock, flags);
3313
+ mutex_unlock(&instance->crashdump_lock);
33173314 if (val == COPY_ERROR)
33183315 dev_info(&instance->pdev->dev, "application failed to "
33193316 "copy Firmware crash dump\n");
....@@ -7325,7 +7322,7 @@
73257322 init_waitqueue_head(&instance->int_cmd_wait_q);
73267323 init_waitqueue_head(&instance->abort_cmd_wait_q);
73277324
7328
- spin_lock_init(&instance->crashdump_lock);
7325
+ mutex_init(&instance->crashdump_lock);
73297326 spin_lock_init(&instance->mfi_pool_lock);
73307327 spin_lock_init(&instance->hba_lock);
73317328 spin_lock_init(&instance->stream_lock);