diff options
Diffstat (limited to 'drivers/scsi/aacraid/commsup.c')
| -rw-r--r-- | drivers/scsi/aacraid/commsup.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c index 5322865942e2..a1d303f03480 100644 --- a/drivers/scsi/aacraid/commsup.c +++ b/drivers/scsi/aacraid/commsup.c | |||
| @@ -254,6 +254,7 @@ static void fib_dealloc(struct fib * fibptr) | |||
| 254 | static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entry, u32 * index, unsigned long *nonotify) | 254 | static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entry, u32 * index, unsigned long *nonotify) |
| 255 | { | 255 | { |
| 256 | struct aac_queue * q; | 256 | struct aac_queue * q; |
| 257 | unsigned long idx; | ||
| 257 | 258 | ||
| 258 | /* | 259 | /* |
| 259 | * All of the queues wrap when they reach the end, so we check | 260 | * All of the queues wrap when they reach the end, so we check |
| @@ -263,10 +264,23 @@ static int aac_get_entry (struct aac_dev * dev, u32 qid, struct aac_entry **entr | |||
| 263 | */ | 264 | */ |
| 264 | 265 | ||
| 265 | q = &dev->queues->queue[qid]; | 266 | q = &dev->queues->queue[qid]; |
| 266 | 267 | ||
| 267 | *index = le32_to_cpu(*(q->headers.producer)); | 268 | idx = *index = le32_to_cpu(*(q->headers.producer)); |
| 268 | if ((*index - 2) == le32_to_cpu(*(q->headers.consumer))) | 269 | /* Interrupt Moderation, only interrupt for first two entries */ |
| 270 | if (idx != le32_to_cpu(*(q->headers.consumer))) { | ||
| 271 | if (--idx == 0) { | ||
| 272 | if (qid == AdapHighCmdQueue) | ||
| 273 | idx = ADAP_HIGH_CMD_ENTRIES; | ||
| 274 | else if (qid == AdapNormCmdQueue) | ||
| 275 | idx = ADAP_NORM_CMD_ENTRIES; | ||
| 276 | else if (qid == AdapHighRespQueue) | ||
| 277 | idx = ADAP_HIGH_RESP_ENTRIES; | ||
| 278 | else if (qid == AdapNormRespQueue) | ||
| 279 | idx = ADAP_NORM_RESP_ENTRIES; | ||
| 280 | } | ||
| 281 | if (idx != le32_to_cpu(*(q->headers.consumer))) | ||
| 269 | *nonotify = 1; | 282 | *nonotify = 1; |
| 283 | } | ||
| 270 | 284 | ||
| 271 | if (qid == AdapHighCmdQueue) { | 285 | if (qid == AdapHighCmdQueue) { |
| 272 | if (*index >= ADAP_HIGH_CMD_ENTRIES) | 286 | if (*index >= ADAP_HIGH_CMD_ENTRIES) |
