Message ID | 1388144314-1581-2-git-send-email-thomas.petazzoni@free-electrons.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Dan Williams |
Headers | show |
T24gRnJpLCAyMDEzLTEyLTI3IGF0IDEyOjM4ICswMTAwLCBUaG9tYXMgUGV0YXp6b25pIHdyb3Rl Og0KPiBUaGUgbXZfeG9yX3N0YXR1cygpIGZ1bmN0aW9uIGFjY2Vzc2VzIHRoZSBtdl94b3JfY2hh biBzdHJ1Y3R1cmUsIGJ1dA0KPiB3YXMgbm90IHRha2luZyB0aGUgY29ycmVzcG9uZGluZyBzcGlu bG9jay4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzDQo+IHByb2JsZW0uDQo+IA0KPiBTaWduZWQtb2Zm LWJ5OiBUaG9tYXMgUGV0YXp6b25pIDx0aG9tYXMucGV0YXp6b25pQGZyZWUtZWxlY3Ryb25zLmNv bT4NCj4gLS0tDQo+ICBkcml2ZXJzL2RtYS9tdl94b3IuYyB8IDEwICsrKysrKysrLS0NCj4gIDEg ZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEvbXZfeG9yLmMgYi9kcml2ZXJzL2RtYS9tdl94b3IuYw0KPiBp bmRleCA1M2ZiMGM4Li41MjZhYjI3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2RtYS9tdl94b3Iu Yw0KPiArKysgYi9kcml2ZXJzL2RtYS9tdl94b3IuYw0KPiBAQCAtNzAxLDE0ICs3MDEsMjAgQEAg c3RhdGljIGVudW0gZG1hX3N0YXR1cyBtdl94b3Jfc3RhdHVzKHN0cnVjdCBkbWFfY2hhbiAqY2hh biwNCj4gIAlzdHJ1Y3QgbXZfeG9yX2NoYW4gKm12X2NoYW4gPSB0b19tdl94b3JfY2hhbihjaGFu KTsNCj4gIAllbnVtIGRtYV9zdGF0dXMgcmV0Ow0KPiAgDQo+ICsJc3Bpbl9sb2NrX2JoKCZtdl9j aGFuLT5sb2NrKTsNCj4gKw0KDQpJIGRvbid0IHRoaW5rIGl0J3MgYSBwcm9wZXIgcGxhY2UgZm9y IHRoaXMgc3BpbmxvY2sgc2luY2UNCmRtYV9jb29raWVfc3RhdHVzIGlzIGluZGVwZW5kZW50IHRv IHRoYXQuDQoNCj4gIAlyZXQgPSBkbWFfY29va2llX3N0YXR1cyhjaGFuLCBjb29raWUsIHR4c3Rh dGUpOw0KPiAgCWlmIChyZXQgPT0gRE1BX0NPTVBMRVRFKSB7DQoNCklmIHlvdSBhcmUgY2FyaW5n IGFib3V0IG12X2NoYW4gYWNjZXNzLCBiZXR0ZXIgdG8gdGFrZSBpdCBoZXJlLi4uDQoNCj4gIAkJ bXZfeG9yX2NsZWFuX2NvbXBsZXRlZF9zbG90cyhtdl9jaGFuKTsNCj4gKwkJc3Bpbl91bmxvY2tf YmgoJm12X2NoYW4tPmxvY2spOw0KPiAgCQlyZXR1cm4gcmV0Ow0KPiAgCX0NCg0KLi4uYW5kIGhl cmUuDQoNCj4gLQltdl94b3Jfc2xvdF9jbGVhbnVwKG12X2NoYW4pOw0KPiArCV9fbXZfeG9yX3Ns b3RfY2xlYW51cChtdl9jaGFuKTsNCj4gIA0KPiAtCXJldHVybiBkbWFfY29va2llX3N0YXR1cyhj aGFuLCBjb29raWUsIHR4c3RhdGUpOw0KPiArCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGNoYW4s IGNvb2tpZSwgdHhzdGF0ZSk7DQo+ICsJc3Bpbl91bmxvY2tfYmgoJm12X2NoYW4tPmxvY2spOw0K PiArDQo+ICsJcmV0dXJuIHJldDsNCj4gIH0NCj4gIA0KPiAgc3RhdGljIHZvaWQgbXZfZHVtcF94 b3JfcmVncyhzdHJ1Y3QgbXZfeG9yX2NoYW4gKmNoYW4pDQoNCi0tIA0KQW5keSBTaGV2Y2hlbmtv IDxhbmRyaXkuc2hldmNoZW5rb0BpbnRlbC5jb20+DQpJbnRlbCBGaW5sYW5kIE95DQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KSW50ZWwgRmlubGFuZCBPeQpSZWdpc3RlcmVkIEFkZHJlc3M6IFBMIDI4MSwgMDAxODEg SGVsc2lua2kgCkJ1c2luZXNzIElkZW50aXR5IENvZGU6IDAzNTc2MDYgLSA0IApEb21pY2lsZWQg aW4gSGVsc2lua2kgCgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWlu IGNvbmZpZGVudGlhbCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCBy ZWNpcGllbnQocykuIEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJp Y3RseSBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBw bGVhc2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4K -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Dec 27, 2013 at 3:38 AM, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote: > The mv_xor_status() function accesses the mv_xor_chan structure, but > was not taking the corresponding spinlock. This patch fixes this > problem. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > --- > drivers/dma/mv_xor.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c > index 53fb0c8..526ab27 100644 > --- a/drivers/dma/mv_xor.c > +++ b/drivers/dma/mv_xor.c > @@ -701,14 +701,20 @@ static enum dma_status mv_xor_status(struct dma_chan *chan, > struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); > enum dma_status ret; > > + spin_lock_bh(&mv_chan->lock); > + > ret = dma_cookie_status(chan, cookie, txstate); > if (ret == DMA_COMPLETE) { > mv_xor_clean_completed_slots(mv_chan); I think you can just delete this call to mv_xor_clean_completed_slots(). The fact that the descriptors are complete means that __mv_xor_slot_cleanup ran, and if that is the case there should be nothing to cleanup. -- Dan -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello Dan, Thomas is a bit busy right now, so I'm picking this where he left it. On Dec 31, Dan Williams wrote: > On Fri, Dec 27, 2013 at 3:38 AM, Thomas Petazzoni > <thomas.petazzoni@free-electrons.com> wrote: [..] > > @@ -701,14 +701,20 @@ static enum dma_status mv_xor_status(struct dma_chan *chan, > > struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); > > enum dma_status ret; > > > > + spin_lock_bh(&mv_chan->lock); > > + > > ret = dma_cookie_status(chan, cookie, txstate); > > if (ret == DMA_COMPLETE) { > > mv_xor_clean_completed_slots(mv_chan); > > I think you can just delete this call to > mv_xor_clean_completed_slots(). The fact that the descriptors are > complete means that __mv_xor_slot_cleanup ran, and if that is the case > there should be nothing to cleanup. > In that case, we don't need to take the lock anywhere in this function: 1. It's not needed for dma_cookie_status() (as per Andy's comment). 2. It's not needed for mv_xor_slot_cleanup(), which takes the lock.
diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c index 53fb0c8..526ab27 100644 --- a/drivers/dma/mv_xor.c +++ b/drivers/dma/mv_xor.c @@ -701,14 +701,20 @@ static enum dma_status mv_xor_status(struct dma_chan *chan, struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); enum dma_status ret; + spin_lock_bh(&mv_chan->lock); + ret = dma_cookie_status(chan, cookie, txstate); if (ret == DMA_COMPLETE) { mv_xor_clean_completed_slots(mv_chan); + spin_unlock_bh(&mv_chan->lock); return ret; } - mv_xor_slot_cleanup(mv_chan); + __mv_xor_slot_cleanup(mv_chan); - return dma_cookie_status(chan, cookie, txstate); + ret = dma_cookie_status(chan, cookie, txstate); + spin_unlock_bh(&mv_chan->lock); + + return ret; } static void mv_dump_xor_regs(struct mv_xor_chan *chan)
The mv_xor_status() function accesses the mv_xor_chan structure, but was not taking the corresponding spinlock. This patch fixes this problem. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> --- drivers/dma/mv_xor.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)