Skip to content

Commit 893f4a1

Browse files
ching Huangmartinkpetersen
authored andcommitted
scsi: arcmsr: Fix device hot-plug monitoring timer stop
Fix device hot-plug monitoring timer stop. Link: https://lore.kernel.org/r/969213d4f124e230c3febc01e2b1db291bf4585c.camel@areca.com.tw Signed-off-by: ching Huang <ching2048@areca.com.tw> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 9aae1c1 commit 893f4a1

2 files changed

Lines changed: 3 additions & 26 deletions

File tree

drivers/scsi/arcmsr/arcmsr.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -836,8 +836,6 @@ struct AdapterControlBlock
836836
#define FW_NORMAL 0x0000
837837
#define FW_BOG 0x0001
838838
#define FW_DEADLOCK 0x0010
839-
atomic_t rq_map_token;
840-
atomic_t ante_token_value;
841839
uint32_t maxOutstanding;
842840
int vector_count;
843841
uint32_t maxFreeCCB;

drivers/scsi/arcmsr/arcmsr_hba.c

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,6 @@ static void arcmsr_message_isr_bh_fn(struct work_struct *work)
777777
struct scsi_device *psdev;
778778
char diff, temp;
779779

780-
acb->acb_flags &= ~ACB_F_MSG_GET_CONFIG;
781780
switch (acb->adapter_type) {
782781
case ACB_ADAPTER_TYPE_A: {
783782
struct MessageUnit_A __iomem *reg = acb->pmuA;
@@ -815,7 +814,6 @@ static void arcmsr_message_isr_bh_fn(struct work_struct *work)
815814
break;
816815
}
817816
}
818-
atomic_inc(&acb->rq_map_token);
819817
if (readl(signature) != ARCMSR_SIGNATURE_GET_CONFIG)
820818
return;
821819
for (target = 0; target < ARCMSR_MAX_TARGETID - 1;
@@ -846,6 +844,7 @@ static void arcmsr_message_isr_bh_fn(struct work_struct *work)
846844
devicemap++;
847845
acb_dev_map++;
848846
}
847+
acb->acb_flags &= ~ACB_F_MSG_GET_CONFIG;
849848
}
850849

851850
static int
@@ -898,8 +897,6 @@ arcmsr_request_irq(struct pci_dev *pdev, struct AdapterControlBlock *acb)
898897
static void arcmsr_init_get_devmap_timer(struct AdapterControlBlock *pacb)
899898
{
900899
INIT_WORK(&pacb->arcmsr_do_message_isr_bh, arcmsr_message_isr_bh_fn);
901-
atomic_set(&pacb->rq_map_token, 16);
902-
atomic_set(&pacb->ante_token_value, 16);
903900
pacb->fw_flag = FW_NORMAL;
904901
timer_setup(&pacb->eternal_timer, arcmsr_request_device_map, 0);
905902
pacb->eternal_timer.expires = jiffies + msecs_to_jiffies(6 * HZ);
@@ -3925,24 +3922,10 @@ static void arcmsr_wait_firmware_ready(struct AdapterControlBlock *acb)
39253922
static void arcmsr_request_device_map(struct timer_list *t)
39263923
{
39273924
struct AdapterControlBlock *acb = from_timer(acb, t, eternal_timer);
3928-
if (unlikely(atomic_read(&acb->rq_map_token) == 0) ||
3929-
(acb->acb_flags & ACB_F_BUS_RESET) ||
3930-
(acb->acb_flags & ACB_F_ABORT)) {
3931-
mod_timer(&acb->eternal_timer,
3932-
jiffies + msecs_to_jiffies(6 * HZ));
3925+
if (acb->acb_flags & (ACB_F_MSG_GET_CONFIG | ACB_F_BUS_RESET | ACB_F_ABORT)) {
3926+
mod_timer(&acb->eternal_timer, jiffies + msecs_to_jiffies(6 * HZ));
39333927
} else {
39343928
acb->fw_flag = FW_NORMAL;
3935-
if (atomic_read(&acb->ante_token_value) ==
3936-
atomic_read(&acb->rq_map_token)) {
3937-
atomic_set(&acb->rq_map_token, 16);
3938-
}
3939-
atomic_set(&acb->ante_token_value,
3940-
atomic_read(&acb->rq_map_token));
3941-
if (atomic_dec_and_test(&acb->rq_map_token)) {
3942-
mod_timer(&acb->eternal_timer, jiffies +
3943-
msecs_to_jiffies(6 * HZ));
3944-
return;
3945-
}
39463929
switch (acb->adapter_type) {
39473930
case ACB_ADAPTER_TYPE_A: {
39483931
struct MessageUnit_A __iomem *reg = acb->pmuA;
@@ -4362,8 +4345,6 @@ static int arcmsr_bus_reset(struct scsi_cmnd *cmd)
43624345
goto wait_reset_done;
43634346
}
43644347
arcmsr_iop_init(acb);
4365-
atomic_set(&acb->rq_map_token, 16);
4366-
atomic_set(&acb->ante_token_value, 16);
43674348
acb->fw_flag = FW_NORMAL;
43684349
mod_timer(&acb->eternal_timer, jiffies +
43694350
msecs_to_jiffies(6 * HZ));
@@ -4372,8 +4353,6 @@ static int arcmsr_bus_reset(struct scsi_cmnd *cmd)
43724353
pr_notice("arcmsr: scsi bus reset eh returns with success\n");
43734354
} else {
43744355
acb->acb_flags &= ~ACB_F_BUS_RESET;
4375-
atomic_set(&acb->rq_map_token, 16);
4376-
atomic_set(&acb->ante_token_value, 16);
43774356
acb->fw_flag = FW_NORMAL;
43784357
mod_timer(&acb->eternal_timer, jiffies +
43794358
msecs_to_jiffies(6 * HZ));

0 commit comments

Comments
 (0)