All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <201203082215017182231@usish.com>

diff --git a/a/1.txt b/N1/1.txt
index b4d1387..c182182 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,81 +1,97 @@
-VGhhbmtzIE1hcmsgZm9yIGxvb2sgaW50byB0aGlzLllvdSdyZSByaWdodC4gVGhlIGNoYW5nZSBm
-b3IgdGFza19zdGF0ZV9sb2NrIGlzIG5vdCByaWdodC4NClNvcnJ5IGZvciBub3QgbG9vayBjYXJl
-ZnVsbHkgYWJvdXQgdGhlIGNoYW5nZS4NCg0KDQoNCi0tLS0tLS0tLS0tLS0tDQpqYWNrX3dhbmcN
-Cj5OQUsNCj4NCj5JbiB0aGUgZnJhZ21lbnQgYmVsb3csIHRoZSAnc3Bpbl9sb2NrX2lycXNhdmUo
-JnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOycgaXMgMTAwJSBsZWdpdGltYXRlLiBUaGUgY2hh
-bmdlIHlvdSBkaWQgd2FzIG5vdCBpbmVydCwgYW5kIHJlc3VsdCBpbiB0aGUgSVJRIGJlaW5nIGRp
-c2FibGVkIHVwb24gZXhpdCBzaG91bGQgYSBTQVNfVEFTS19TVEFURV9BQk9SVEVEIHRhc2sgc3Rh
-dGUgY29uZGl0aW9uIG9jY3VyLg0KPg0KPkkgcHJvcG9zZSAoYW5ub3RhdGVkIGJlbG93KSB5b3Ug
-bGVhdmUgdGhlIGZsYWdzIGF1dG9tYXRpYyB2YXJpYWJsZSwgYnV0IHVuaW5pdGlhbGl6ZWQuIFRo
-ZSBjaGFuZ2VzIHN1cnJvdW5kaW5nIHNwaW5fKmxvY2tfaXJxKigmcG04MDAxX2hhLT5sb2NrLCBm
-bGFncykgYXJlIE9LLCBidXQgcmV2ZXJ0IGJhY2sgdGhlIGNoYW5nZXMgc3Vycm91bmRpbmcgdGhl
-IHNwaW5fKmxvY2tfaXJxKigmdC0+dGFzay0+c3RhdGVfbG9jayxmbGFncykgc28gdGhhdCBsb2Nr
-IHdvdWxkIGJlIHByb3Blcmx5IG5lc3RlZC4NCj4NCj5UbyBiZSBwZWRhbnRpYywgYW5kIHRvIGJl
-IG1vcmUgY29ycmVjdCwgdGhpcyBjb2RlIHNob3VsZCBoYXZlIHNwYXduZWQgYSB3b3JrIHF1ZXVl
-IHRhc2sgdG8gcGVyZm9ybSB0aGUgdC0+dGFza19kb25lKHQpIG9wZXJhdGlvbiBpbiBhIHNlcGFy
-YXRlIHRocmVhZCByYXRoZXIgdGhhbiBpbmxpbmUgYW5kIHByZWNhcmlvdXNseSB1bmxvY2tlZDsg
-YnV0IHRoYXQgd291bGQgYmUgYmV5b25kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBz
-aG91bGQgYmUgbGVmdCBmb3IgZnV0dXJlIHdvcmsgdG8gZGVjaWRlIGlmIGl0IGlzIGV2ZW4gbmVj
-ZXNzYXJ5LiBOb3Qgc3VyZSBob3cgc3VjaCBhIGNoYW5nZSB3b3VsZCBhZmZlY3QgcGVyZm9ybWFu
-Y2UgKHVzaW5nIHRoZSB3b3JrIHF1ZXVlKSAuLi4gc28gSSBhbSAnYWZyYWlkJyBvZiBwdXNoaW5n
-IHN1Y2ggYSBjaGFuZ2UgaW4gYW55IGNhc2UgZ2l2ZW4gdGhlIHJlbGF0aXZlbHkgcmVsaWFibGUg
-b3BlcmF0aW9uIG9mIHRoaXMgZHJpdmVyIChhbmQgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHRoZSBj
-aGFuZ2VzIERhbiBpcyBtYWtpbmcgdG8gdGhlIFNBVEEgc2lkZSBvZiB0aGluZ3MgZm9yIGluc3Rh
-bmNlIDstfSApLg0KPg0KPkkgYW0gc29ycnkgZm9yIHRha2luZyBzbyBsb25nIHRvIGdldCB0byB0
-aGUgdGFzayBvZiByZXZpZXdpbmcgdGhpcyAoYW5kIHRoZSBwcmV2aW91cykgY29kZS4gSSBsb29r
-IGZvcndhcmQgdG8geW91ciBjb21tZW50cy4NCj4NCj5TaW5jZXJlbHkgLS0gTWFyayBTYWx5enlu
-DQo+DQo+T24gRmViIDI2LCAyMDEyLCBhdCA4OjMzIEFNLCBzYW50b3NoIG5heWFrIHdyb3RlOg0K
-Pg0KPj4gQEAgLTIyMDcsNyArMjIwNiw2IEBAIG1waV9zYXRhX2NvbXBsZXRpb24oc3RydWN0IHBt
-ODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB2b2lkICpwaW9tYikNCj4+IHN0YXRpYyB2b2lkIG1w
-aV9zYXRhX2V2ZW50KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSAsIHZvaWQgKnBp
-b21iKQ0KPj4gew0KPj4gCXN0cnVjdCBzYXNfdGFzayAqdDsNCj4+IC0JdW5zaWduZWQgbG9uZyBm
-bGFncyA9IDA7DQo+TUdTPgl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gCXN0cnVjdCB0YXNrX3N0
-YXR1c19zdHJ1Y3QgKnRzOw0KPj4gCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsNCj4+IAlz
-dHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsNCj4+IEBAIC0yMjg3LDkgKzIyODUsOSBA
-QCBzdGF0aWMgdm9pZCBtcGlfc2F0YV9ldmVudChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgw
-MDFfaGEgLCB2b2lkICpwaW9tYikNCj4+IAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7DQo+
-PiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsNCj4+IAkJ
-CW1iKCk7LypkaXR0byovDQo+PiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hh
-LT5sb2NrLCBmbGFncyk7DQo+PiArCQkJc3Bpbl91bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2sp
-Ow0KPj4gCQkJdC0+dGFza19kb25lKHQpOw0KPj4gLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgw
-MDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCQlzcGluX2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxv
-Y2spOw0KPj4gCQkJcmV0dXJuOw0KPj4gCQl9DQo+PiAJCWJyZWFrOw0KPj4gQEAgLTIzODcsMzEg
-KzIzODUsMzEgQEAgc3RhdGljIHZvaWQgbXBpX3NhdGFfZXZlbnQoc3RydWN0IHBtODAwMV9oYmFf
-aW5mbyAqcG04MDAxX2hhICwgdm9pZCAqcGlvbWIpDQo+PiAJCXRzLT5zdGF0ID0gU0FTX09QRU5f
-VE87DQo+PiAJCWJyZWFrOw0KPj4gCX0NCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tf
-c3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gKwlzcGluX2xvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xv
-Y2spOw0KPk1HUz4Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3Mp
-Ow0KPj4gCXQtPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX1NUQVRFX1BFTkRJTkc7DQo+
-PiAJdC0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOw0KPj4gCXQt
-PnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfU1RBVEVfRE9ORTsNCj4+IAlpZiAodW5saWtl
-bHkoKHQtPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSkpIHsNCj4+
-IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0K
-Pj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xvY2spOw0KPk1HUz4JCXNwaW5f
-dW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gCQlQTTgw
-MDFfRkFJTF9EQkcocG04MDAxX2hhLA0KPj4gCQkJcG04MDAxX3ByaW50aygidGFzayAweCVwIGRv
-bmUgd2l0aCBpb19zdGF0dXMgMHgleCINCj4+IAkJCSIgcmVzcCAweCV4IHN0YXQgMHgleCBidXQg
-YWJvcnRlZCBieSB1cHBlciBsYXllciFcbiIsDQo+PiAJCQl0LCBldmVudCwgdHMtPnJlc3AsIHRz
-LT5zdGF0KSk7DQo+PiAJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0
-YWcpOw0KPj4gCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7DQo+PiAtCQlzcGluX3VubG9ja19p
-cnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fdW5sb2Nr
-X2lycSgmdC0+dGFza19zdGF0ZV9sb2NrKTsNCj4+IAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04
-MDAxX2hhLCB0LCBjY2IsIHRhZyk7DQo+PiAJCW1iKCk7LyogZGl0dG8gKi8NCj4+IC0JCXNwaW5f
-dW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPj4gKwkJc3Bpbl91
-bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCQl0LT50YXNrX2RvbmUodCk7DQo+PiAt
-CQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+PiArCQlzcGlu
-X2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFz
-aykgew0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+dGFza19zdGF0ZV9sb2NrLCBm
-bGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnQtPnRhc2tfc3RhdGVfbG9jayk7DQo+PiAJ
-CXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOw0KPj4gCQltYigp
-Oy8qZGl0dG8qLw0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2Nr
-LCBmbGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ
-CXQtPnRhc2tfZG9uZSh0KTsNCj4+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxv
-Y2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fbG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ
-fQ0KPj4gfQ0KPg0KPi0tDQo+VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhl
-IGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXNjc2kiIGluDQo+dGhlIGJvZHkgb2YgYSBtZXNzYWdl
-IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj5Nb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBo
-dHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCj4NCj5fX19fX19fX19f
-IEluZm9ybWF0aW9uIGZyb20gRVNFVCBOT0QzMiBBbnRpdmlydXMsIHZlcnNpb24gb2YgdmlydXMg
-c2lnbmF0dXJlIGRhdGFiYXNlIDU2NTkgKDIwMTAxMTI5KSBfX19fX19fX19fDQo+DQo+VGhlIG1l
-c3NhZ2Ugd2FzIGNoZWNrZWQgYnkgRVNFVCBOT0QzMiBBbnRpdmlydXMuDQo+DQo+aHR0cDovL3d3
-dy5lc2V0LmNvbQ0KPg0KPg0KPg=
+Thanks Mark for look into this.You're right. The change for task_state_lock is not right.
+Sorry for not look carefully about the change.
+
+
+
+--------------
+jack_wang
+>NAK
+>
+>In the fragment below, the 'spin_lock_irqsave(&t->task_state_lock, flags);' is 100% legitimate. The change you did was not inert, and result in the IRQ being disabled upon exit should a SAS_TASK_STATE_ABORTED task state condition occur.
+>
+>I propose (annotated below) you leave the flags automatic variable, but uninitialized. The changes surrounding spin_*lock_irq*(&pm8001_ha->lock, flags) are OK, but revert back the changes surrounding the spin_*lock_irq*(&t->task->state_lock,flags) so that lock would be properly nested.
+>
+>To be pedantic, and to be more correct, this code should have spawned a work queue task to perform the t->task_done(t) operation in a separate thread rather than inline and precariously unlocked; but that would be beyond the scope of these changes and should be left for future work to decide if it is even necessary. Not sure how such a change would affect performance (using the work queue) ... so I am 'afraid' of pushing such a change in any case given the relatively reliable operation of this driver (and the dynamic nature of the changes Dan is making to the SATA side of things for instance ;-} ).
+>
+>I am sorry for taking so long to get to the task of reviewing this (and the previous) code. I look forward to your comments.
+>
+>Sincerely -- Mark Salyzyn
+>
+>On Feb 26, 2012, at 8:33 AM, santosh nayak wrote:
+>
+>> @@ -2207,7 +2206,6 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+>> static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> {
+>> 	struct sas_task *t;
+>> -	unsigned long flags = 0;
+>MGS>	unsigned long flags;
+>> 	struct task_status_struct *ts;
+>> 	struct pm8001_ccb_info *ccb;
+>> 	struct pm8001_device *pm8001_dev;
+>> @@ -2287,9 +2285,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> 			ts->stat = SAS_QUEUE_FULL;
+>> 			pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 			mb();/*ditto*/
+>> -			spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +			spin_unlock_irq(&pm8001_ha->lock);
+>> 			t->task_done(t);
+>> -			spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +			spin_lock_irq(&pm8001_ha->lock);
+>> 			return;
+>> 		}
+>> 		break;
+>> @@ -2387,31 +2385,31 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> 		ts->stat = SAS_OPEN_TO;
+>> 		break;
+>> 	}
+>> -	spin_lock_irqsave(&t->task_state_lock, flags);
+>> +	spin_lock_irq(&t->task_state_lock);
+>MGS>	spin_lock_irqsave(&t->task_state_lock, flags);
+>> 	t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+>> 	t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+>> 	t->task_state_flags |= SAS_TASK_STATE_DONE;
+>> 	if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>MGS>		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> 		PM8001_FAIL_DBG(pm8001_ha,
+>> 			pm8001_printk("task 0x%p done with io_status 0x%x"
+>> 			" resp 0x%x stat 0x%x but aborted by upper layer!\n",
+>> 			t, event, ts->resp, ts->stat));
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 	} else if (t->uldd_task) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 		mb();/* ditto */
+>> -		spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +		spin_unlock_irq(&pm8001_ha->lock);
+>> 		t->task_done(t);
+>> -		spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +		spin_lock_irq(&pm8001_ha->lock);
+>> 	} else if (!t->uldd_task) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 		mb();/*ditto*/
+>> -		spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +		spin_unlock_irq(&pm8001_ha->lock);
+>> 		t->task_done(t);
+>> -		spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +		spin_lock_irq(&pm8001_ha->lock);
+>> 	}
+>> }
+>
+>--
+>To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
+>the body of a message to majordomo@vger.kernel.org
+>More majordomo info at  http://vger.kernel.org/majordomo-info.html
+>
+>__________ Information from ESET NOD32 Antivirus, version of virus signature database 5659 (20101129) __________
+>
+>The message was checked by ESET NOD32 Antivirus.
+>
+>http://www.eset.com
+>
+>
+>
diff --git a/a/content_digest b/N1/content_digest
index 0ec5a57..e652bc0 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,7 +2,7 @@
  "ref\0528D7E8A-B2F6-4EDB-A7C0-E0BF494038D0@xyratex.com\0"
  "From\0jack_wang <jack_wang@usish.com>\0"
  "Subject\0Re: Re: [PATCH 1/2] [SCSI] pm8001: Fix bogus interrupt state flag issue.\0"
- "Date\0Thu, 08 Mar 2012 14:15:03 +0000\0"
+ "Date\0Thu, 8 Mar 2012 22:15:03 +0800\0"
  "To\0santosh nayak <santoshprasadnayak@gmail.com>\0"
  "Cc\0Mark Salyzyn <mark_salyzyn@xyratex.com>"
   lindar_liu <lindar_liu@usish.com>
@@ -13,86 +13,102 @@
  " Dan Carpenter <dan.carpenter@oracle.com>\0"
  "\00:1\0"
  "b\0"
- "VGhhbmtzIE1hcmsgZm9yIGxvb2sgaW50byB0aGlzLllvdSdyZSByaWdodC4gVGhlIGNoYW5nZSBm\n"
- "b3IgdGFza19zdGF0ZV9sb2NrIGlzIG5vdCByaWdodC4NClNvcnJ5IGZvciBub3QgbG9vayBjYXJl\n"
- "ZnVsbHkgYWJvdXQgdGhlIGNoYW5nZS4NCg0KDQoNCi0tLS0tLS0tLS0tLS0tDQpqYWNrX3dhbmcN\n"
- "Cj5OQUsNCj4NCj5JbiB0aGUgZnJhZ21lbnQgYmVsb3csIHRoZSAnc3Bpbl9sb2NrX2lycXNhdmUo\n"
- "JnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOycgaXMgMTAwJSBsZWdpdGltYXRlLiBUaGUgY2hh\n"
- "bmdlIHlvdSBkaWQgd2FzIG5vdCBpbmVydCwgYW5kIHJlc3VsdCBpbiB0aGUgSVJRIGJlaW5nIGRp\n"
- "c2FibGVkIHVwb24gZXhpdCBzaG91bGQgYSBTQVNfVEFTS19TVEFURV9BQk9SVEVEIHRhc2sgc3Rh\n"
- "dGUgY29uZGl0aW9uIG9jY3VyLg0KPg0KPkkgcHJvcG9zZSAoYW5ub3RhdGVkIGJlbG93KSB5b3Ug\n"
- "bGVhdmUgdGhlIGZsYWdzIGF1dG9tYXRpYyB2YXJpYWJsZSwgYnV0IHVuaW5pdGlhbGl6ZWQuIFRo\n"
- "ZSBjaGFuZ2VzIHN1cnJvdW5kaW5nIHNwaW5fKmxvY2tfaXJxKigmcG04MDAxX2hhLT5sb2NrLCBm\n"
- "bGFncykgYXJlIE9LLCBidXQgcmV2ZXJ0IGJhY2sgdGhlIGNoYW5nZXMgc3Vycm91bmRpbmcgdGhl\n"
- "IHNwaW5fKmxvY2tfaXJxKigmdC0+dGFzay0+c3RhdGVfbG9jayxmbGFncykgc28gdGhhdCBsb2Nr\n"
- "IHdvdWxkIGJlIHByb3Blcmx5IG5lc3RlZC4NCj4NCj5UbyBiZSBwZWRhbnRpYywgYW5kIHRvIGJl\n"
- "IG1vcmUgY29ycmVjdCwgdGhpcyBjb2RlIHNob3VsZCBoYXZlIHNwYXduZWQgYSB3b3JrIHF1ZXVl\n"
- "IHRhc2sgdG8gcGVyZm9ybSB0aGUgdC0+dGFza19kb25lKHQpIG9wZXJhdGlvbiBpbiBhIHNlcGFy\n"
- "YXRlIHRocmVhZCByYXRoZXIgdGhhbiBpbmxpbmUgYW5kIHByZWNhcmlvdXNseSB1bmxvY2tlZDsg\n"
- "YnV0IHRoYXQgd291bGQgYmUgYmV5b25kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBz\n"
- "aG91bGQgYmUgbGVmdCBmb3IgZnV0dXJlIHdvcmsgdG8gZGVjaWRlIGlmIGl0IGlzIGV2ZW4gbmVj\n"
- "ZXNzYXJ5LiBOb3Qgc3VyZSBob3cgc3VjaCBhIGNoYW5nZSB3b3VsZCBhZmZlY3QgcGVyZm9ybWFu\n"
- "Y2UgKHVzaW5nIHRoZSB3b3JrIHF1ZXVlKSAuLi4gc28gSSBhbSAnYWZyYWlkJyBvZiBwdXNoaW5n\n"
- "IHN1Y2ggYSBjaGFuZ2UgaW4gYW55IGNhc2UgZ2l2ZW4gdGhlIHJlbGF0aXZlbHkgcmVsaWFibGUg\n"
- "b3BlcmF0aW9uIG9mIHRoaXMgZHJpdmVyIChhbmQgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHRoZSBj\n"
- "aGFuZ2VzIERhbiBpcyBtYWtpbmcgdG8gdGhlIFNBVEEgc2lkZSBvZiB0aGluZ3MgZm9yIGluc3Rh\n"
- "bmNlIDstfSApLg0KPg0KPkkgYW0gc29ycnkgZm9yIHRha2luZyBzbyBsb25nIHRvIGdldCB0byB0\n"
- "aGUgdGFzayBvZiByZXZpZXdpbmcgdGhpcyAoYW5kIHRoZSBwcmV2aW91cykgY29kZS4gSSBsb29r\n"
- "IGZvcndhcmQgdG8geW91ciBjb21tZW50cy4NCj4NCj5TaW5jZXJlbHkgLS0gTWFyayBTYWx5enlu\n"
- "DQo+DQo+T24gRmViIDI2LCAyMDEyLCBhdCA4OjMzIEFNLCBzYW50b3NoIG5heWFrIHdyb3RlOg0K\n"
- "Pg0KPj4gQEAgLTIyMDcsNyArMjIwNiw2IEBAIG1waV9zYXRhX2NvbXBsZXRpb24oc3RydWN0IHBt\n"
- "ODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB2b2lkICpwaW9tYikNCj4+IHN0YXRpYyB2b2lkIG1w\n"
- "aV9zYXRhX2V2ZW50KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSAsIHZvaWQgKnBp\n"
- "b21iKQ0KPj4gew0KPj4gCXN0cnVjdCBzYXNfdGFzayAqdDsNCj4+IC0JdW5zaWduZWQgbG9uZyBm\n"
- "bGFncyA9IDA7DQo+TUdTPgl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gCXN0cnVjdCB0YXNrX3N0\n"
- "YXR1c19zdHJ1Y3QgKnRzOw0KPj4gCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsNCj4+IAlz\n"
- "dHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsNCj4+IEBAIC0yMjg3LDkgKzIyODUsOSBA\n"
- "QCBzdGF0aWMgdm9pZCBtcGlfc2F0YV9ldmVudChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgw\n"
- "MDFfaGEgLCB2b2lkICpwaW9tYikNCj4+IAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7DQo+\n"
- "PiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsNCj4+IAkJ\n"
- "CW1iKCk7LypkaXR0byovDQo+PiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hh\n"
- "LT5sb2NrLCBmbGFncyk7DQo+PiArCQkJc3Bpbl91bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2sp\n"
- "Ow0KPj4gCQkJdC0+dGFza19kb25lKHQpOw0KPj4gLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgw\n"
- "MDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCQlzcGluX2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxv\n"
- "Y2spOw0KPj4gCQkJcmV0dXJuOw0KPj4gCQl9DQo+PiAJCWJyZWFrOw0KPj4gQEAgLTIzODcsMzEg\n"
- "KzIzODUsMzEgQEAgc3RhdGljIHZvaWQgbXBpX3NhdGFfZXZlbnQoc3RydWN0IHBtODAwMV9oYmFf\n"
- "aW5mbyAqcG04MDAxX2hhICwgdm9pZCAqcGlvbWIpDQo+PiAJCXRzLT5zdGF0ID0gU0FTX09QRU5f\n"
- "VE87DQo+PiAJCWJyZWFrOw0KPj4gCX0NCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tf\n"
- "c3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gKwlzcGluX2xvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xv\n"
- "Y2spOw0KPk1HUz4Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3Mp\n"
- "Ow0KPj4gCXQtPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX1NUQVRFX1BFTkRJTkc7DQo+\n"
- "PiAJdC0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOw0KPj4gCXQt\n"
- "PnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfU1RBVEVfRE9ORTsNCj4+IAlpZiAodW5saWtl\n"
- "bHkoKHQtPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSkpIHsNCj4+\n"
- "IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0K\n"
- "Pj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xvY2spOw0KPk1HUz4JCXNwaW5f\n"
- "dW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gCQlQTTgw\n"
- "MDFfRkFJTF9EQkcocG04MDAxX2hhLA0KPj4gCQkJcG04MDAxX3ByaW50aygidGFzayAweCVwIGRv\n"
- "bmUgd2l0aCBpb19zdGF0dXMgMHgleCINCj4+IAkJCSIgcmVzcCAweCV4IHN0YXQgMHgleCBidXQg\n"
- "YWJvcnRlZCBieSB1cHBlciBsYXllciFcbiIsDQo+PiAJCQl0LCBldmVudCwgdHMtPnJlc3AsIHRz\n"
- "LT5zdGF0KSk7DQo+PiAJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0\n"
- "YWcpOw0KPj4gCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7DQo+PiAtCQlzcGluX3VubG9ja19p\n"
- "cnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fdW5sb2Nr\n"
- "X2lycSgmdC0+dGFza19zdGF0ZV9sb2NrKTsNCj4+IAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04\n"
- "MDAxX2hhLCB0LCBjY2IsIHRhZyk7DQo+PiAJCW1iKCk7LyogZGl0dG8gKi8NCj4+IC0JCXNwaW5f\n"
- "dW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPj4gKwkJc3Bpbl91\n"
- "bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCQl0LT50YXNrX2RvbmUodCk7DQo+PiAt\n"
- "CQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+PiArCQlzcGlu\n"
- "X2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFz\n"
- "aykgew0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+dGFza19zdGF0ZV9sb2NrLCBm\n"
- "bGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnQtPnRhc2tfc3RhdGVfbG9jayk7DQo+PiAJ\n"
- "CXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOw0KPj4gCQltYigp\n"
- "Oy8qZGl0dG8qLw0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2Nr\n"
- "LCBmbGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ\n"
- "CXQtPnRhc2tfZG9uZSh0KTsNCj4+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxv\n"
- "Y2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fbG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ\n"
- "fQ0KPj4gfQ0KPg0KPi0tDQo+VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhl\n"
- "IGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXNjc2kiIGluDQo+dGhlIGJvZHkgb2YgYSBtZXNzYWdl\n"
- "IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj5Nb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBo\n"
- "dHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCj4NCj5fX19fX19fX19f\n"
- "IEluZm9ybWF0aW9uIGZyb20gRVNFVCBOT0QzMiBBbnRpdmlydXMsIHZlcnNpb24gb2YgdmlydXMg\n"
- "c2lnbmF0dXJlIGRhdGFiYXNlIDU2NTkgKDIwMTAxMTI5KSBfX19fX19fX19fDQo+DQo+VGhlIG1l\n"
- "c3NhZ2Ugd2FzIGNoZWNrZWQgYnkgRVNFVCBOT0QzMiBBbnRpdmlydXMuDQo+DQo+aHR0cDovL3d3\n"
- dy5lc2V0LmNvbQ0KPg0KPg0KPg=
+ "Thanks Mark for look into this.You're right. The change for task_state_lock is not right.\n"
+ "Sorry for not look carefully about the change.\n"
+ "\n"
+ "\n"
+ "\n"
+ "--------------\n"
+ "jack_wang\n"
+ ">NAK\n"
+ ">\n"
+ ">In the fragment below, the 'spin_lock_irqsave(&t->task_state_lock, flags);' is 100% legitimate. The change you did was not inert, and result in the IRQ being disabled upon exit should a SAS_TASK_STATE_ABORTED task state condition occur.\n"
+ ">\n"
+ ">I propose (annotated below) you leave the flags automatic variable, but uninitialized. The changes surrounding spin_*lock_irq*(&pm8001_ha->lock, flags) are OK, but revert back the changes surrounding the spin_*lock_irq*(&t->task->state_lock,flags) so that lock would be properly nested.\n"
+ ">\n"
+ ">To be pedantic, and to be more correct, this code should have spawned a work queue task to perform the t->task_done(t) operation in a separate thread rather than inline and precariously unlocked; but that would be beyond the scope of these changes and should be left for future work to decide if it is even necessary. Not sure how such a change would affect performance (using the work queue) ... so I am 'afraid' of pushing such a change in any case given the relatively reliable operation of this driver (and the dynamic nature of the changes Dan is making to the SATA side of things for instance ;-} ).\n"
+ ">\n"
+ ">I am sorry for taking so long to get to the task of reviewing this (and the previous) code. I look forward to your comments.\n"
+ ">\n"
+ ">Sincerely -- Mark Salyzyn\n"
+ ">\n"
+ ">On Feb 26, 2012, at 8:33 AM, santosh nayak wrote:\n"
+ ">\n"
+ ">> @@ -2207,7 +2206,6 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)\n"
+ ">> static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> {\n"
+ ">> \tstruct sas_task *t;\n"
+ ">> -\tunsigned long flags = 0;\n"
+ ">MGS>\tunsigned long flags;\n"
+ ">> \tstruct task_status_struct *ts;\n"
+ ">> \tstruct pm8001_ccb_info *ccb;\n"
+ ">> \tstruct pm8001_device *pm8001_dev;\n"
+ ">> @@ -2287,9 +2285,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> \t\t\tts->stat = SAS_QUEUE_FULL;\n"
+ ">> \t\t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\t\tmb();/*ditto*/\n"
+ ">> -\t\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\t\tt->task_done(t);\n"
+ ">> -\t\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t\t\treturn;\n"
+ ">> \t\t}\n"
+ ">> \t\tbreak;\n"
+ ">> @@ -2387,31 +2385,31 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> \t\tts->stat = SAS_OPEN_TO;\n"
+ ">> \t\tbreak;\n"
+ ">> \t}\n"
+ ">> -\tspin_lock_irqsave(&t->task_state_lock, flags);\n"
+ ">> +\tspin_lock_irq(&t->task_state_lock);\n"
+ ">MGS>\tspin_lock_irqsave(&t->task_state_lock, flags);\n"
+ ">> \tt->task_state_flags &= ~SAS_TASK_STATE_PENDING;\n"
+ ">> \tt->task_state_flags &= ~SAS_TASK_AT_INITIATOR;\n"
+ ">> \tt->task_state_flags |= SAS_TASK_STATE_DONE;\n"
+ ">> \tif (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">MGS>\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> \t\tPM8001_FAIL_DBG(pm8001_ha,\n"
+ ">> \t\t\tpm8001_printk(\"task 0x%p done with io_status 0x%x\"\n"
+ ">> \t\t\t\" resp 0x%x stat 0x%x but aborted by upper layer!\\n\",\n"
+ ">> \t\t\tt, event, ts->resp, ts->stat));\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t} else if (t->uldd_task) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\tmb();/* ditto */\n"
+ ">> -\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\tt->task_done(t);\n"
+ ">> -\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t} else if (!t->uldd_task) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\tmb();/*ditto*/\n"
+ ">> -\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\tt->task_done(t);\n"
+ ">> -\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t}\n"
+ ">> }\n"
+ ">\n"
+ ">--\n"
+ ">To unsubscribe from this list: send the line \"unsubscribe linux-scsi\" in\n"
+ ">the body of a message to majordomo@vger.kernel.org\n"
+ ">More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"
+ ">\n"
+ ">__________ Information from ESET NOD32 Antivirus, version of virus signature database 5659 (20101129) __________\n"
+ ">\n"
+ ">The message was checked by ESET NOD32 Antivirus.\n"
+ ">\n"
+ ">http://www.eset.com\n"
+ ">\n"
+ ">\n"
+ >
 
-b08eb30eeca12bd762ac1d7e1730f07b401d75d053f9680ee41b72eb4d4b81d3
+4d56f019fda4bd0eebeda39e800c2f4c9929b11a111425dce57c3fc17bf3af4f

diff --git a/a/1.txt b/N2/1.txt
index b4d1387..d7c072f 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,81 +1,97 @@
-VGhhbmtzIE1hcmsgZm9yIGxvb2sgaW50byB0aGlzLllvdSdyZSByaWdodC4gVGhlIGNoYW5nZSBm
-b3IgdGFza19zdGF0ZV9sb2NrIGlzIG5vdCByaWdodC4NClNvcnJ5IGZvciBub3QgbG9vayBjYXJl
-ZnVsbHkgYWJvdXQgdGhlIGNoYW5nZS4NCg0KDQoNCi0tLS0tLS0tLS0tLS0tDQpqYWNrX3dhbmcN
-Cj5OQUsNCj4NCj5JbiB0aGUgZnJhZ21lbnQgYmVsb3csIHRoZSAnc3Bpbl9sb2NrX2lycXNhdmUo
-JnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOycgaXMgMTAwJSBsZWdpdGltYXRlLiBUaGUgY2hh
-bmdlIHlvdSBkaWQgd2FzIG5vdCBpbmVydCwgYW5kIHJlc3VsdCBpbiB0aGUgSVJRIGJlaW5nIGRp
-c2FibGVkIHVwb24gZXhpdCBzaG91bGQgYSBTQVNfVEFTS19TVEFURV9BQk9SVEVEIHRhc2sgc3Rh
-dGUgY29uZGl0aW9uIG9jY3VyLg0KPg0KPkkgcHJvcG9zZSAoYW5ub3RhdGVkIGJlbG93KSB5b3Ug
-bGVhdmUgdGhlIGZsYWdzIGF1dG9tYXRpYyB2YXJpYWJsZSwgYnV0IHVuaW5pdGlhbGl6ZWQuIFRo
-ZSBjaGFuZ2VzIHN1cnJvdW5kaW5nIHNwaW5fKmxvY2tfaXJxKigmcG04MDAxX2hhLT5sb2NrLCBm
-bGFncykgYXJlIE9LLCBidXQgcmV2ZXJ0IGJhY2sgdGhlIGNoYW5nZXMgc3Vycm91bmRpbmcgdGhl
-IHNwaW5fKmxvY2tfaXJxKigmdC0+dGFzay0+c3RhdGVfbG9jayxmbGFncykgc28gdGhhdCBsb2Nr
-IHdvdWxkIGJlIHByb3Blcmx5IG5lc3RlZC4NCj4NCj5UbyBiZSBwZWRhbnRpYywgYW5kIHRvIGJl
-IG1vcmUgY29ycmVjdCwgdGhpcyBjb2RlIHNob3VsZCBoYXZlIHNwYXduZWQgYSB3b3JrIHF1ZXVl
-IHRhc2sgdG8gcGVyZm9ybSB0aGUgdC0+dGFza19kb25lKHQpIG9wZXJhdGlvbiBpbiBhIHNlcGFy
-YXRlIHRocmVhZCByYXRoZXIgdGhhbiBpbmxpbmUgYW5kIHByZWNhcmlvdXNseSB1bmxvY2tlZDsg
-YnV0IHRoYXQgd291bGQgYmUgYmV5b25kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBz
-aG91bGQgYmUgbGVmdCBmb3IgZnV0dXJlIHdvcmsgdG8gZGVjaWRlIGlmIGl0IGlzIGV2ZW4gbmVj
-ZXNzYXJ5LiBOb3Qgc3VyZSBob3cgc3VjaCBhIGNoYW5nZSB3b3VsZCBhZmZlY3QgcGVyZm9ybWFu
-Y2UgKHVzaW5nIHRoZSB3b3JrIHF1ZXVlKSAuLi4gc28gSSBhbSAnYWZyYWlkJyBvZiBwdXNoaW5n
-IHN1Y2ggYSBjaGFuZ2UgaW4gYW55IGNhc2UgZ2l2ZW4gdGhlIHJlbGF0aXZlbHkgcmVsaWFibGUg
-b3BlcmF0aW9uIG9mIHRoaXMgZHJpdmVyIChhbmQgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHRoZSBj
-aGFuZ2VzIERhbiBpcyBtYWtpbmcgdG8gdGhlIFNBVEEgc2lkZSBvZiB0aGluZ3MgZm9yIGluc3Rh
-bmNlIDstfSApLg0KPg0KPkkgYW0gc29ycnkgZm9yIHRha2luZyBzbyBsb25nIHRvIGdldCB0byB0
-aGUgdGFzayBvZiByZXZpZXdpbmcgdGhpcyAoYW5kIHRoZSBwcmV2aW91cykgY29kZS4gSSBsb29r
-IGZvcndhcmQgdG8geW91ciBjb21tZW50cy4NCj4NCj5TaW5jZXJlbHkgLS0gTWFyayBTYWx5enlu
-DQo+DQo+T24gRmViIDI2LCAyMDEyLCBhdCA4OjMzIEFNLCBzYW50b3NoIG5heWFrIHdyb3RlOg0K
-Pg0KPj4gQEAgLTIyMDcsNyArMjIwNiw2IEBAIG1waV9zYXRhX2NvbXBsZXRpb24oc3RydWN0IHBt
-ODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB2b2lkICpwaW9tYikNCj4+IHN0YXRpYyB2b2lkIG1w
-aV9zYXRhX2V2ZW50KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSAsIHZvaWQgKnBp
-b21iKQ0KPj4gew0KPj4gCXN0cnVjdCBzYXNfdGFzayAqdDsNCj4+IC0JdW5zaWduZWQgbG9uZyBm
-bGFncyA9IDA7DQo+TUdTPgl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gCXN0cnVjdCB0YXNrX3N0
-YXR1c19zdHJ1Y3QgKnRzOw0KPj4gCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsNCj4+IAlz
-dHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsNCj4+IEBAIC0yMjg3LDkgKzIyODUsOSBA
-QCBzdGF0aWMgdm9pZCBtcGlfc2F0YV9ldmVudChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgw
-MDFfaGEgLCB2b2lkICpwaW9tYikNCj4+IAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7DQo+
-PiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsNCj4+IAkJ
-CW1iKCk7LypkaXR0byovDQo+PiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hh
-LT5sb2NrLCBmbGFncyk7DQo+PiArCQkJc3Bpbl91bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2sp
-Ow0KPj4gCQkJdC0+dGFza19kb25lKHQpOw0KPj4gLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgw
-MDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCQlzcGluX2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxv
-Y2spOw0KPj4gCQkJcmV0dXJuOw0KPj4gCQl9DQo+PiAJCWJyZWFrOw0KPj4gQEAgLTIzODcsMzEg
-KzIzODUsMzEgQEAgc3RhdGljIHZvaWQgbXBpX3NhdGFfZXZlbnQoc3RydWN0IHBtODAwMV9oYmFf
-aW5mbyAqcG04MDAxX2hhICwgdm9pZCAqcGlvbWIpDQo+PiAJCXRzLT5zdGF0ID0gU0FTX09QRU5f
-VE87DQo+PiAJCWJyZWFrOw0KPj4gCX0NCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tf
-c3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gKwlzcGluX2xvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xv
-Y2spOw0KPk1HUz4Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3Mp
-Ow0KPj4gCXQtPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX1NUQVRFX1BFTkRJTkc7DQo+
-PiAJdC0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOw0KPj4gCXQt
-PnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfU1RBVEVfRE9ORTsNCj4+IAlpZiAodW5saWtl
-bHkoKHQtPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSkpIHsNCj4+
-IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0K
-Pj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xvY2spOw0KPk1HUz4JCXNwaW5f
-dW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gCQlQTTgw
-MDFfRkFJTF9EQkcocG04MDAxX2hhLA0KPj4gCQkJcG04MDAxX3ByaW50aygidGFzayAweCVwIGRv
-bmUgd2l0aCBpb19zdGF0dXMgMHgleCINCj4+IAkJCSIgcmVzcCAweCV4IHN0YXQgMHgleCBidXQg
-YWJvcnRlZCBieSB1cHBlciBsYXllciFcbiIsDQo+PiAJCQl0LCBldmVudCwgdHMtPnJlc3AsIHRz
-LT5zdGF0KSk7DQo+PiAJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0
-YWcpOw0KPj4gCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7DQo+PiAtCQlzcGluX3VubG9ja19p
-cnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fdW5sb2Nr
-X2lycSgmdC0+dGFza19zdGF0ZV9sb2NrKTsNCj4+IAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04
-MDAxX2hhLCB0LCBjY2IsIHRhZyk7DQo+PiAJCW1iKCk7LyogZGl0dG8gKi8NCj4+IC0JCXNwaW5f
-dW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPj4gKwkJc3Bpbl91
-bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCQl0LT50YXNrX2RvbmUodCk7DQo+PiAt
-CQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+PiArCQlzcGlu
-X2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFz
-aykgew0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+dGFza19zdGF0ZV9sb2NrLCBm
-bGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnQtPnRhc2tfc3RhdGVfbG9jayk7DQo+PiAJ
-CXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOw0KPj4gCQltYigp
-Oy8qZGl0dG8qLw0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2Nr
-LCBmbGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ
-CXQtPnRhc2tfZG9uZSh0KTsNCj4+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxv
-Y2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fbG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ
-fQ0KPj4gfQ0KPg0KPi0tDQo+VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhl
-IGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXNjc2kiIGluDQo+dGhlIGJvZHkgb2YgYSBtZXNzYWdl
-IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj5Nb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBo
-dHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCj4NCj5fX19fX19fX19f
-IEluZm9ybWF0aW9uIGZyb20gRVNFVCBOT0QzMiBBbnRpdmlydXMsIHZlcnNpb24gb2YgdmlydXMg
-c2lnbmF0dXJlIGRhdGFiYXNlIDU2NTkgKDIwMTAxMTI5KSBfX19fX19fX19fDQo+DQo+VGhlIG1l
-c3NhZ2Ugd2FzIGNoZWNrZWQgYnkgRVNFVCBOT0QzMiBBbnRpdmlydXMuDQo+DQo+aHR0cDovL3d3
-dy5lc2V0LmNvbQ0KPg0KPg0KPg=
+Thanks Mark for look into this.You're right. The change for task_state_lock is not right.
+Sorry for not look carefully about the change.
+
+
+
+--------------
+jack_wang
+>NAK
+>
+>In the fragment below, the 'spin_lock_irqsave(&t->task_state_lock, flags);' is 100% legitimate. The change you did was not inert, and result in the IRQ being disabled upon exit should a SAS_TASK_STATE_ABORTED task state condition occur.
+>
+>I propose (annotated below) you leave the flags automatic variable, but uninitialized. The changes surrounding spin_*lock_irq*(&pm8001_ha->lock, flags) are OK, but revert back the changes surrounding the spin_*lock_irq*(&t->task->state_lock,flags) so that lock would be properly nested.
+>
+>To be pedantic, and to be more correct, this code should have spawned a work queue task to perform the t->task_done(t) operation in a separate thread rather than inline and precariously unlocked; but that would be beyond the scope of these changes and should be left for future work to decide if it is even necessary. Not sure how such a change would affect performance (using the work queue) ... so I am 'afraid' of pushing such a change in any case given the relatively reliable operation of this driver (and the dynamic nature of the changes Dan is making to the SATA side of things for instance ;-} ).
+>
+>I am sorry for taking so long to get to the task of reviewing this (and the previous) code. I look forward to your comments.
+>
+>Sincerely -- Mark Salyzyn
+>
+>On Feb 26, 2012, at 8:33 AM, santosh nayak wrote:
+>
+>> @@ -2207,7 +2206,6 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)
+>> static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> {
+>> 	struct sas_task *t;
+>> -	unsigned long flags = 0;
+>MGS>	unsigned long flags;
+>> 	struct task_status_struct *ts;
+>> 	struct pm8001_ccb_info *ccb;
+>> 	struct pm8001_device *pm8001_dev;
+>> @@ -2287,9 +2285,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> 			ts->stat = SAS_QUEUE_FULL;
+>> 			pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 			mb();/*ditto*/
+>> -			spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +			spin_unlock_irq(&pm8001_ha->lock);
+>> 			t->task_done(t);
+>> -			spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +			spin_lock_irq(&pm8001_ha->lock);
+>> 			return;
+>> 		}
+>> 		break;
+>> @@ -2387,31 +2385,31 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)
+>> 		ts->stat = SAS_OPEN_TO;
+>> 		break;
+>> 	}
+>> -	spin_lock_irqsave(&t->task_state_lock, flags);
+>> +	spin_lock_irq(&t->task_state_lock);
+>MGS>	spin_lock_irqsave(&t->task_state_lock, flags);
+>> 	t->task_state_flags &= ~SAS_TASK_STATE_PENDING;
+>> 	t->task_state_flags &= ~SAS_TASK_AT_INITIATOR;
+>> 	t->task_state_flags |= SAS_TASK_STATE_DONE;
+>> 	if (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>MGS>		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> 		PM8001_FAIL_DBG(pm8001_ha,
+>> 			pm8001_printk("task 0x%p done with io_status 0x%x"
+>> 			" resp 0x%x stat 0x%x but aborted by upper layer!\n",
+>> 			t, event, ts->resp, ts->stat));
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 	} else if (t->uldd_task) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 		mb();/* ditto */
+>> -		spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +		spin_unlock_irq(&pm8001_ha->lock);
+>> 		t->task_done(t);
+>> -		spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +		spin_lock_irq(&pm8001_ha->lock);
+>> 	} else if (!t->uldd_task) {
+>> -		spin_unlock_irqrestore(&t->task_state_lock, flags);
+>> +		spin_unlock_irq(&t->task_state_lock);
+>> 		pm8001_ccb_task_free(pm8001_ha, t, ccb, tag);
+>> 		mb();/*ditto*/
+>> -		spin_unlock_irqrestore(&pm8001_ha->lock, flags);
+>> +		spin_unlock_irq(&pm8001_ha->lock);
+>> 		t->task_done(t);
+>> -		spin_lock_irqsave(&pm8001_ha->lock, flags);
+>> +		spin_lock_irq(&pm8001_ha->lock);
+>> 	}
+>> }
+>
+>--
+>To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
+>the body of a message to majordomo@vger.kernel.org
+>More majordomo info at  http://vger.kernel.org/majordomo-info.html
+>
+>__________ Information from ESET NOD32 Antivirus, version of virus signature database 5659 (20101129) __________
+>
+>The message was checked by ESET NOD32 Antivirus.
+>
+>http://www.eset.com
+>
+>
+>ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥
diff --git a/a/content_digest b/N2/content_digest
index 0ec5a57..7317d11 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,8 +2,9 @@
  "ref\0528D7E8A-B2F6-4EDB-A7C0-E0BF494038D0@xyratex.com\0"
  "From\0jack_wang <jack_wang@usish.com>\0"
  "Subject\0Re: Re: [PATCH 1/2] [SCSI] pm8001: Fix bogus interrupt state flag issue.\0"
- "Date\0Thu, 08 Mar 2012 14:15:03 +0000\0"
- "To\0santosh nayak <santoshprasadnayak@gmail.com>\0"
+ "Date\0Thu, 8 Mar 2012 22:15:03 +0800\0"
+ "To\0Mark Salyzyn <mark_salyzyn@xyratex.com>"
+ " santosh nayak <santoshprasadnayak@gmail.com>\0"
  "Cc\0Mark Salyzyn <mark_salyzyn@xyratex.com>"
   lindar_liu <lindar_liu@usish.com>
   James Bottomley <JBottomley@parallels.com>
@@ -13,86 +14,102 @@
  " Dan Carpenter <dan.carpenter@oracle.com>\0"
  "\00:1\0"
  "b\0"
- "VGhhbmtzIE1hcmsgZm9yIGxvb2sgaW50byB0aGlzLllvdSdyZSByaWdodC4gVGhlIGNoYW5nZSBm\n"
- "b3IgdGFza19zdGF0ZV9sb2NrIGlzIG5vdCByaWdodC4NClNvcnJ5IGZvciBub3QgbG9vayBjYXJl\n"
- "ZnVsbHkgYWJvdXQgdGhlIGNoYW5nZS4NCg0KDQoNCi0tLS0tLS0tLS0tLS0tDQpqYWNrX3dhbmcN\n"
- "Cj5OQUsNCj4NCj5JbiB0aGUgZnJhZ21lbnQgYmVsb3csIHRoZSAnc3Bpbl9sb2NrX2lycXNhdmUo\n"
- "JnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOycgaXMgMTAwJSBsZWdpdGltYXRlLiBUaGUgY2hh\n"
- "bmdlIHlvdSBkaWQgd2FzIG5vdCBpbmVydCwgYW5kIHJlc3VsdCBpbiB0aGUgSVJRIGJlaW5nIGRp\n"
- "c2FibGVkIHVwb24gZXhpdCBzaG91bGQgYSBTQVNfVEFTS19TVEFURV9BQk9SVEVEIHRhc2sgc3Rh\n"
- "dGUgY29uZGl0aW9uIG9jY3VyLg0KPg0KPkkgcHJvcG9zZSAoYW5ub3RhdGVkIGJlbG93KSB5b3Ug\n"
- "bGVhdmUgdGhlIGZsYWdzIGF1dG9tYXRpYyB2YXJpYWJsZSwgYnV0IHVuaW5pdGlhbGl6ZWQuIFRo\n"
- "ZSBjaGFuZ2VzIHN1cnJvdW5kaW5nIHNwaW5fKmxvY2tfaXJxKigmcG04MDAxX2hhLT5sb2NrLCBm\n"
- "bGFncykgYXJlIE9LLCBidXQgcmV2ZXJ0IGJhY2sgdGhlIGNoYW5nZXMgc3Vycm91bmRpbmcgdGhl\n"
- "IHNwaW5fKmxvY2tfaXJxKigmdC0+dGFzay0+c3RhdGVfbG9jayxmbGFncykgc28gdGhhdCBsb2Nr\n"
- "IHdvdWxkIGJlIHByb3Blcmx5IG5lc3RlZC4NCj4NCj5UbyBiZSBwZWRhbnRpYywgYW5kIHRvIGJl\n"
- "IG1vcmUgY29ycmVjdCwgdGhpcyBjb2RlIHNob3VsZCBoYXZlIHNwYXduZWQgYSB3b3JrIHF1ZXVl\n"
- "IHRhc2sgdG8gcGVyZm9ybSB0aGUgdC0+dGFza19kb25lKHQpIG9wZXJhdGlvbiBpbiBhIHNlcGFy\n"
- "YXRlIHRocmVhZCByYXRoZXIgdGhhbiBpbmxpbmUgYW5kIHByZWNhcmlvdXNseSB1bmxvY2tlZDsg\n"
- "YnV0IHRoYXQgd291bGQgYmUgYmV5b25kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzIGFuZCBz\n"
- "aG91bGQgYmUgbGVmdCBmb3IgZnV0dXJlIHdvcmsgdG8gZGVjaWRlIGlmIGl0IGlzIGV2ZW4gbmVj\n"
- "ZXNzYXJ5LiBOb3Qgc3VyZSBob3cgc3VjaCBhIGNoYW5nZSB3b3VsZCBhZmZlY3QgcGVyZm9ybWFu\n"
- "Y2UgKHVzaW5nIHRoZSB3b3JrIHF1ZXVlKSAuLi4gc28gSSBhbSAnYWZyYWlkJyBvZiBwdXNoaW5n\n"
- "IHN1Y2ggYSBjaGFuZ2UgaW4gYW55IGNhc2UgZ2l2ZW4gdGhlIHJlbGF0aXZlbHkgcmVsaWFibGUg\n"
- "b3BlcmF0aW9uIG9mIHRoaXMgZHJpdmVyIChhbmQgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIHRoZSBj\n"
- "aGFuZ2VzIERhbiBpcyBtYWtpbmcgdG8gdGhlIFNBVEEgc2lkZSBvZiB0aGluZ3MgZm9yIGluc3Rh\n"
- "bmNlIDstfSApLg0KPg0KPkkgYW0gc29ycnkgZm9yIHRha2luZyBzbyBsb25nIHRvIGdldCB0byB0\n"
- "aGUgdGFzayBvZiByZXZpZXdpbmcgdGhpcyAoYW5kIHRoZSBwcmV2aW91cykgY29kZS4gSSBsb29r\n"
- "IGZvcndhcmQgdG8geW91ciBjb21tZW50cy4NCj4NCj5TaW5jZXJlbHkgLS0gTWFyayBTYWx5enlu\n"
- "DQo+DQo+T24gRmViIDI2LCAyMDEyLCBhdCA4OjMzIEFNLCBzYW50b3NoIG5heWFrIHdyb3RlOg0K\n"
- "Pg0KPj4gQEAgLTIyMDcsNyArMjIwNiw2IEBAIG1waV9zYXRhX2NvbXBsZXRpb24oc3RydWN0IHBt\n"
- "ODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB2b2lkICpwaW9tYikNCj4+IHN0YXRpYyB2b2lkIG1w\n"
- "aV9zYXRhX2V2ZW50KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSAsIHZvaWQgKnBp\n"
- "b21iKQ0KPj4gew0KPj4gCXN0cnVjdCBzYXNfdGFzayAqdDsNCj4+IC0JdW5zaWduZWQgbG9uZyBm\n"
- "bGFncyA9IDA7DQo+TUdTPgl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPj4gCXN0cnVjdCB0YXNrX3N0\n"
- "YXR1c19zdHJ1Y3QgKnRzOw0KPj4gCXN0cnVjdCBwbTgwMDFfY2NiX2luZm8gKmNjYjsNCj4+IAlz\n"
- "dHJ1Y3QgcG04MDAxX2RldmljZSAqcG04MDAxX2RldjsNCj4+IEBAIC0yMjg3LDkgKzIyODUsOSBA\n"
- "QCBzdGF0aWMgdm9pZCBtcGlfc2F0YV9ldmVudChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgw\n"
- "MDFfaGEgLCB2b2lkICpwaW9tYikNCj4+IAkJCXRzLT5zdGF0ID0gU0FTX1FVRVVFX0ZVTEw7DQo+\n"
- "PiAJCQlwbTgwMDFfY2NiX3Rhc2tfZnJlZShwbTgwMDFfaGEsIHQsIGNjYiwgdGFnKTsNCj4+IAkJ\n"
- "CW1iKCk7LypkaXR0byovDQo+PiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hh\n"
- "LT5sb2NrLCBmbGFncyk7DQo+PiArCQkJc3Bpbl91bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2sp\n"
- "Ow0KPj4gCQkJdC0+dGFza19kb25lKHQpOw0KPj4gLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgw\n"
- "MDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4+ICsJCQlzcGluX2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxv\n"
- "Y2spOw0KPj4gCQkJcmV0dXJuOw0KPj4gCQl9DQo+PiAJCWJyZWFrOw0KPj4gQEAgLTIzODcsMzEg\n"
- "KzIzODUsMzEgQEAgc3RhdGljIHZvaWQgbXBpX3NhdGFfZXZlbnQoc3RydWN0IHBtODAwMV9oYmFf\n"
- "aW5mbyAqcG04MDAxX2hhICwgdm9pZCAqcGlvbWIpDQo+PiAJCXRzLT5zdGF0ID0gU0FTX09QRU5f\n"
- "VE87DQo+PiAJCWJyZWFrOw0KPj4gCX0NCj4+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tf\n"
- "c3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gKwlzcGluX2xvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xv\n"
- "Y2spOw0KPk1HUz4Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3Mp\n"
- "Ow0KPj4gCXQtPnRhc2tfc3RhdGVfZmxhZ3MgJj0gflNBU19UQVNLX1NUQVRFX1BFTkRJTkc7DQo+\n"
- "PiAJdC0+dGFza19zdGF0ZV9mbGFncyAmPSB+U0FTX1RBU0tfQVRfSU5JVElBVE9SOw0KPj4gCXQt\n"
- "PnRhc2tfc3RhdGVfZmxhZ3MgfD0gU0FTX1RBU0tfU1RBVEVfRE9ORTsNCj4+IAlpZiAodW5saWtl\n"
- "bHkoKHQtPnRhc2tfc3RhdGVfZmxhZ3MgJiBTQVNfVEFTS19TVEFURV9BQk9SVEVEKSkpIHsNCj4+\n"
- "IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0K\n"
- "Pj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZ0LT50YXNrX3N0YXRlX2xvY2spOw0KPk1HUz4JCXNwaW5f\n"
- "dW5sb2NrX2lycXJlc3RvcmUoJnQtPnRhc2tfc3RhdGVfbG9jaywgZmxhZ3MpOw0KPj4gCQlQTTgw\n"
- "MDFfRkFJTF9EQkcocG04MDAxX2hhLA0KPj4gCQkJcG04MDAxX3ByaW50aygidGFzayAweCVwIGRv\n"
- "bmUgd2l0aCBpb19zdGF0dXMgMHgleCINCj4+IAkJCSIgcmVzcCAweCV4IHN0YXQgMHgleCBidXQg\n"
- "YWJvcnRlZCBieSB1cHBlciBsYXllciFcbiIsDQo+PiAJCQl0LCBldmVudCwgdHMtPnJlc3AsIHRz\n"
- "LT5zdGF0KSk7DQo+PiAJCXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0\n"
- "YWcpOw0KPj4gCX0gZWxzZSBpZiAodC0+dWxkZF90YXNrKSB7DQo+PiAtCQlzcGluX3VubG9ja19p\n"
- "cnFyZXN0b3JlKCZ0LT50YXNrX3N0YXRlX2xvY2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fdW5sb2Nr\n"
- "X2lycSgmdC0+dGFza19zdGF0ZV9sb2NrKTsNCj4+IAkJcG04MDAxX2NjYl90YXNrX2ZyZWUocG04\n"
- "MDAxX2hhLCB0LCBjY2IsIHRhZyk7DQo+PiAJCW1iKCk7LyogZGl0dG8gKi8NCj4+IC0JCXNwaW5f\n"
- "dW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPj4gKwkJc3Bpbl91\n"
- "bmxvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCQl0LT50YXNrX2RvbmUodCk7DQo+PiAt\n"
- "CQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+PiArCQlzcGlu\n"
- "X2xvY2tfaXJxKCZwbTgwMDFfaGEtPmxvY2spOw0KPj4gCX0gZWxzZSBpZiAoIXQtPnVsZGRfdGFz\n"
- "aykgew0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdC0+dGFza19zdGF0ZV9sb2NrLCBm\n"
- "bGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnQtPnRhc2tfc3RhdGVfbG9jayk7DQo+PiAJ\n"
- "CXBtODAwMV9jY2JfdGFza19mcmVlKHBtODAwMV9oYSwgdCwgY2NiLCB0YWcpOw0KPj4gCQltYigp\n"
- "Oy8qZGl0dG8qLw0KPj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2Nr\n"
- "LCBmbGFncyk7DQo+PiArCQlzcGluX3VubG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ\n"
- "CXQtPnRhc2tfZG9uZSh0KTsNCj4+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxv\n"
- "Y2ssIGZsYWdzKTsNCj4+ICsJCXNwaW5fbG9ja19pcnEoJnBtODAwMV9oYS0+bG9jayk7DQo+PiAJ\n"
- "fQ0KPj4gfQ0KPg0KPi0tDQo+VG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhl\n"
- "IGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXNjc2kiIGluDQo+dGhlIGJvZHkgb2YgYSBtZXNzYWdl\n"
- "IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcNCj5Nb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBo\n"
- "dHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwNCj4NCj5fX19fX19fX19f\n"
- "IEluZm9ybWF0aW9uIGZyb20gRVNFVCBOT0QzMiBBbnRpdmlydXMsIHZlcnNpb24gb2YgdmlydXMg\n"
- "c2lnbmF0dXJlIGRhdGFiYXNlIDU2NTkgKDIwMTAxMTI5KSBfX19fX19fX19fDQo+DQo+VGhlIG1l\n"
- "c3NhZ2Ugd2FzIGNoZWNrZWQgYnkgRVNFVCBOT0QzMiBBbnRpdmlydXMuDQo+DQo+aHR0cDovL3d3\n"
- dy5lc2V0LmNvbQ0KPg0KPg0KPg=
+ "Thanks Mark for look into this.You're right. The change for task_state_lock is not right.\n"
+ "Sorry for not look carefully about the change.\n"
+ "\n"
+ "\n"
+ "\n"
+ "--------------\n"
+ "jack_wang\n"
+ ">NAK\n"
+ ">\n"
+ ">In the fragment below, the 'spin_lock_irqsave(&t->task_state_lock, flags);' is 100% legitimate. The change you did was not inert, and result in the IRQ being disabled upon exit should a SAS_TASK_STATE_ABORTED task state condition occur.\n"
+ ">\n"
+ ">I propose (annotated below) you leave the flags automatic variable, but uninitialized. The changes surrounding spin_*lock_irq*(&pm8001_ha->lock, flags) are OK, but revert back the changes surrounding the spin_*lock_irq*(&t->task->state_lock,flags) so that lock would be properly nested.\n"
+ ">\n"
+ ">To be pedantic, and to be more correct, this code should have spawned a work queue task to perform the t->task_done(t) operation in a separate thread rather than inline and precariously unlocked; but that would be beyond the scope of these changes and should be left for future work to decide if it is even necessary. Not sure how such a change would affect performance (using the work queue) ... so I am 'afraid' of pushing such a change in any case given the relatively reliable operation of this driver (and the dynamic nature of the changes Dan is making to the SATA side of things for instance ;-} ).\n"
+ ">\n"
+ ">I am sorry for taking so long to get to the task of reviewing this (and the previous) code. I look forward to your comments.\n"
+ ">\n"
+ ">Sincerely -- Mark Salyzyn\n"
+ ">\n"
+ ">On Feb 26, 2012, at 8:33 AM, santosh nayak wrote:\n"
+ ">\n"
+ ">> @@ -2207,7 +2206,6 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb)\n"
+ ">> static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> {\n"
+ ">> \tstruct sas_task *t;\n"
+ ">> -\tunsigned long flags = 0;\n"
+ ">MGS>\tunsigned long flags;\n"
+ ">> \tstruct task_status_struct *ts;\n"
+ ">> \tstruct pm8001_ccb_info *ccb;\n"
+ ">> \tstruct pm8001_device *pm8001_dev;\n"
+ ">> @@ -2287,9 +2285,9 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> \t\t\tts->stat = SAS_QUEUE_FULL;\n"
+ ">> \t\t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\t\tmb();/*ditto*/\n"
+ ">> -\t\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\t\tt->task_done(t);\n"
+ ">> -\t\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t\t\treturn;\n"
+ ">> \t\t}\n"
+ ">> \t\tbreak;\n"
+ ">> @@ -2387,31 +2385,31 @@ static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb)\n"
+ ">> \t\tts->stat = SAS_OPEN_TO;\n"
+ ">> \t\tbreak;\n"
+ ">> \t}\n"
+ ">> -\tspin_lock_irqsave(&t->task_state_lock, flags);\n"
+ ">> +\tspin_lock_irq(&t->task_state_lock);\n"
+ ">MGS>\tspin_lock_irqsave(&t->task_state_lock, flags);\n"
+ ">> \tt->task_state_flags &= ~SAS_TASK_STATE_PENDING;\n"
+ ">> \tt->task_state_flags &= ~SAS_TASK_AT_INITIATOR;\n"
+ ">> \tt->task_state_flags |= SAS_TASK_STATE_DONE;\n"
+ ">> \tif (unlikely((t->task_state_flags & SAS_TASK_STATE_ABORTED))) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">MGS>\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> \t\tPM8001_FAIL_DBG(pm8001_ha,\n"
+ ">> \t\t\tpm8001_printk(\"task 0x%p done with io_status 0x%x\"\n"
+ ">> \t\t\t\" resp 0x%x stat 0x%x but aborted by upper layer!\\n\",\n"
+ ">> \t\t\tt, event, ts->resp, ts->stat));\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t} else if (t->uldd_task) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\tmb();/* ditto */\n"
+ ">> -\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\tt->task_done(t);\n"
+ ">> -\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t} else if (!t->uldd_task) {\n"
+ ">> -\t\tspin_unlock_irqrestore(&t->task_state_lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&t->task_state_lock);\n"
+ ">> \t\tpm8001_ccb_task_free(pm8001_ha, t, ccb, tag);\n"
+ ">> \t\tmb();/*ditto*/\n"
+ ">> -\t\tspin_unlock_irqrestore(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_unlock_irq(&pm8001_ha->lock);\n"
+ ">> \t\tt->task_done(t);\n"
+ ">> -\t\tspin_lock_irqsave(&pm8001_ha->lock, flags);\n"
+ ">> +\t\tspin_lock_irq(&pm8001_ha->lock);\n"
+ ">> \t}\n"
+ ">> }\n"
+ ">\n"
+ ">--\n"
+ ">To unsubscribe from this list: send the line \"unsubscribe linux-scsi\" in\n"
+ ">the body of a message to majordomo@vger.kernel.org\n"
+ ">More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"
+ ">\n"
+ ">__________ Information from ESET NOD32 Antivirus, version of virus signature database 5659 (20101129) __________\n"
+ ">\n"
+ ">The message was checked by ESET NOD32 Antivirus.\n"
+ ">\n"
+ ">http://www.eset.com\n"
+ ">\n"
+ ">\n"
+ ">\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\276G\302\253\302\235\303\251\303\277\302\212{ay\302\272\035\303\212\302\207\303\232\302\231\303\253,j\a\302\255\302\242f\302\243\302\242\302\267h\302\232\302\217\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\003(\302\255\303\251\302\232\302\216\302\212\303\235\302\242j\"\302\235\303\272\032\302\266\033m\302\247\303\277\303\277\302\276\a\302\253\303\276G\302\253\302\235\303\251\303\277\302\242\302\270?\302\231\302\250\303\250\302\255\303\232&\302\243\303\270\302\247~\302\217\303\241\302\266iO\302\225\303\246\302\254z\302\267\302\232v\303\230^\024\004\032\302\266\033m\302\247\303\277\303\277\303\203\f\303\277\302\266\303\254\303\277\302\242\302\270?\302\226I\302\245"
 
-b08eb30eeca12bd762ac1d7e1730f07b401d75d053f9680ee41b72eb4d4b81d3
+97b3465542a4e751330800cfd5c71349db83bec3c291a15a43efff8b03e81cd8

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.