* [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage
@ 2013-08-06 11:53 Jussi Kivilinna
[not found] ` <20130806115324.23908.18291.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: Jussi Kivilinna @ 2013-08-06 11:53 UTC (permalink / raw)
To: alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw
Cc: Takashi Iwai, linux-usb-u79uwXL29TY76Z2rM5mHXA, Jaroslav Kysela
Patch fixes 6fire not to use stack as URB transfer_buffer. URB buffers need to
be DMA-able, which stack is not. Furthermore, transfer_buffer should not be
allocated as part of larger device structure because DMA coherency issues and
patch fixes this issue too.
Patch is only compile tested.
Cc: stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Signed-off-by: Jussi Kivilinna <jussi.kivilinna-X3B1VOXEql0@public.gmane.org>
---
sound/usb/6fire/comm.c | 38 +++++++++++++++++++++++++++++++++-----
sound/usb/6fire/comm.h | 2 +-
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c
index 9e6e3ff..23452ee 100644
--- a/sound/usb/6fire/comm.c
+++ b/sound/usb/6fire/comm.c
@@ -110,19 +110,37 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev)
static int usb6fire_comm_write8(struct comm_runtime *rt, u8 request,
u8 reg, u8 value)
{
- u8 buffer[13]; /* 13: maximum length of message */
+ u8 *buffer;
+ int ret;
+
+ /* 13: maximum length of message */
+ buffer = kmalloc(13, GFP_KERNEL);
+ if (!buffer)
+ return -ENOMEM;
usb6fire_comm_init_buffer(buffer, 0x00, request, reg, value, 0x00);
- return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
+ ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
+
+ kfree(buffer);
+ return ret;
}
static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request,
u8 reg, u8 vl, u8 vh)
{
- u8 buffer[13]; /* 13: maximum length of message */
+ u8 *buffer;
+ int ret;
+
+ /* 13: maximum length of message */
+ buffer = kmalloc(13, GFP_KERNEL);
+ if (!buffer)
+ return -ENOMEM;
usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, vh);
- return usb6fire_comm_send_buffer(buffer, rt->chip->dev);
+ ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev);
+
+ kfree(buffer);
+ return ret;
}
int usb6fire_comm_init(struct sfire_chip *chip)
@@ -135,6 +153,12 @@ int usb6fire_comm_init(struct sfire_chip *chip)
if (!rt)
return -ENOMEM;
+ rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, GFP_KERNEL);
+ if (!rt->receiver_buffer) {
+ kfree(rt);
+ return -ENOMEM;
+ }
+
urb = &rt->receiver;
rt->serial = 1;
rt->chip = chip;
@@ -153,6 +177,7 @@ int usb6fire_comm_init(struct sfire_chip *chip)
urb->interval = 1;
ret = usb_submit_urb(urb, GFP_KERNEL);
if (ret < 0) {
+ kfree(rt->receiver_buffer);
kfree(rt);
snd_printk(KERN_ERR PREFIX "cannot create comm data receiver.");
return ret;
@@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip *chip)
void usb6fire_comm_destroy(struct sfire_chip *chip)
{
- kfree(chip->comm);
+ struct comm_runtime *rt = chip->comm;
+
+ kfree(rt->receiver_buffer);
+ kfree(rt);
chip->comm = NULL;
}
diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h
index 6a0840b..780d5ed 100644
--- a/sound/usb/6fire/comm.h
+++ b/sound/usb/6fire/comm.h
@@ -24,7 +24,7 @@ struct comm_runtime {
struct sfire_chip *chip;
struct urb receiver;
- u8 receiver_buffer[COMM_RECEIVER_BUFSIZE];
+ u8 *receiver_buffer;
u8 serial; /* urb serial */
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 5+ messages in thread[parent not found: <20130806115324.23908.18291.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>]
* Re: [alsa-devel] [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage [not found] ` <20130806115324.23908.18291.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org> @ 2013-08-07 12:43 ` Takashi Iwai 2013-08-07 13:59 ` Torsten Schenk 0 siblings, 1 reply; 5+ messages in thread From: Takashi Iwai @ 2013-08-07 12:43 UTC (permalink / raw) To: Jussi Kivilinna Cc: Torsten Schenk, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, linux-usb-u79uwXL29TY76Z2rM5mHXA At Tue, 06 Aug 2013 14:53:24 +0300, Jussi Kivilinna wrote: > > Patch fixes 6fire not to use stack as URB transfer_buffer. URB buffers need to > be DMA-able, which stack is not. Furthermore, transfer_buffer should not be > allocated as part of larger device structure because DMA coherency issues and > patch fixes this issue too. > > Patch is only compile tested. The changes look OK, but I'd like to let it checked with a real hardware before putting to stable kernel. Torsten, could you check this? thanks, Takashi > > Cc: stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > Signed-off-by: Jussi Kivilinna <jussi.kivilinna-X3B1VOXEql0@public.gmane.org> > --- > sound/usb/6fire/comm.c | 38 +++++++++++++++++++++++++++++++++----- > sound/usb/6fire/comm.h | 2 +- > 2 files changed, 34 insertions(+), 6 deletions(-) > > diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c > index 9e6e3ff..23452ee 100644 > --- a/sound/usb/6fire/comm.c > +++ b/sound/usb/6fire/comm.c > @@ -110,19 +110,37 @@ static int usb6fire_comm_send_buffer(u8 *buffer, struct usb_device *dev) > static int usb6fire_comm_write8(struct comm_runtime *rt, u8 request, > u8 reg, u8 value) > { > - u8 buffer[13]; /* 13: maximum length of message */ > + u8 *buffer; > + int ret; > + > + /* 13: maximum length of message */ > + buffer = kmalloc(13, GFP_KERNEL); > + if (!buffer) > + return -ENOMEM; > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, value, 0x00); > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > + > + kfree(buffer); > + return ret; > } > > static int usb6fire_comm_write16(struct comm_runtime *rt, u8 request, > u8 reg, u8 vl, u8 vh) > { > - u8 buffer[13]; /* 13: maximum length of message */ > + u8 *buffer; > + int ret; > + > + /* 13: maximum length of message */ > + buffer = kmalloc(13, GFP_KERNEL); > + if (!buffer) > + return -ENOMEM; > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, vh); > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > + > + kfree(buffer); > + return ret; > } > > int usb6fire_comm_init(struct sfire_chip *chip) > @@ -135,6 +153,12 @@ int usb6fire_comm_init(struct sfire_chip *chip) > if (!rt) > return -ENOMEM; > > + rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, GFP_KERNEL); > + if (!rt->receiver_buffer) { > + kfree(rt); > + return -ENOMEM; > + } > + > urb = &rt->receiver; > rt->serial = 1; > rt->chip = chip; > @@ -153,6 +177,7 @@ int usb6fire_comm_init(struct sfire_chip *chip) > urb->interval = 1; > ret = usb_submit_urb(urb, GFP_KERNEL); > if (ret < 0) { > + kfree(rt->receiver_buffer); > kfree(rt); > snd_printk(KERN_ERR PREFIX "cannot create comm data receiver."); > return ret; > @@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip *chip) > > void usb6fire_comm_destroy(struct sfire_chip *chip) > { > - kfree(chip->comm); > + struct comm_runtime *rt = chip->comm; > + > + kfree(rt->receiver_buffer); > + kfree(rt); > chip->comm = NULL; > } > diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h > index 6a0840b..780d5ed 100644 > --- a/sound/usb/6fire/comm.h > +++ b/sound/usb/6fire/comm.h > @@ -24,7 +24,7 @@ struct comm_runtime { > struct sfire_chip *chip; > > struct urb receiver; > - u8 receiver_buffer[COMM_RECEIVER_BUFSIZE]; > + u8 *receiver_buffer; > > u8 serial; /* urb serial */ > > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage 2013-08-07 12:43 ` [alsa-devel] " Takashi Iwai @ 2013-08-07 13:59 ` Torsten Schenk [not found] ` <20130807155907.dfea021b3b73fcac33e4323d-ytc+IHgoah0@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: Torsten Schenk @ 2013-08-07 13:59 UTC (permalink / raw) To: Takashi Iwai; +Cc: Jussi Kivilinna, alsa-devel, Torsten Schenk, linux-usb On Wed, 07 Aug 2013 14:43:43 +0200 Takashi Iwai <tiwai@suse.de> wrote: > At Tue, 06 Aug 2013 14:53:24 +0300, > Jussi Kivilinna wrote: > > > > Patch fixes 6fire not to use stack as URB transfer_buffer. URB > > buffers need to be DMA-able, which stack is not. Furthermore, > > transfer_buffer should not be allocated as part of larger device > > structure because DMA coherency issues and patch fixes this issue > > too. Thanks for the information. There is another section where this applies in midi.c/midi.h. I can post a patch later. > > > > Patch is only compile tested. > > The changes look OK, but I'd like to let it checked with a real > hardware before putting to stable kernel. > > Torsten, could you check this? The patch works nicely. I'm just wondering if instead of calling kmalloc() every time it'd be better to put a global sender_buffer and a mutex into the comm_runtime struct and lock it every time a writeX is performed. This also would have the advantage that message blocks would never overlap which currently is possible. I can prepare a patch on top of this one and send it later, if you agree. Thanks, Torsten > > > thanks, > > Takashi > > > > > Cc: stable@vger.kernel.org > > Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi> > > --- > > sound/usb/6fire/comm.c | 38 ++++++++++++++++++++++++++++++++ > > +----- sound/usb/6fire/comm.h | 2 +- > > 2 files changed, 34 insertions(+), 6 deletions(-) > > > > diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c > > index 9e6e3ff..23452ee 100644 > > --- a/sound/usb/6fire/comm.c > > +++ b/sound/usb/6fire/comm.c > > @@ -110,19 +110,37 @@ static int usb6fire_comm_send_buffer(u8 > > *buffer, struct usb_device *dev) static int usb6fire_comm_write8 > > (struct comm_runtime *rt, u8 request, u8 reg, u8 value) > > { > > - u8 buffer[13]; /* 13: maximum length of message */ > > + u8 *buffer; > > + int ret; > > + > > + /* 13: maximum length of message */ > > + buffer = kmalloc(13, GFP_KERNEL); > > + if (!buffer) > > + return -ENOMEM; > > > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, > > value, 0x00); > > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > + > > + kfree(buffer); > > + return ret; > > } > > > > static int usb6fire_comm_write16(struct comm_runtime *rt, u8 > > request, u8 reg, u8 vl, u8 vh) > > { > > - u8 buffer[13]; /* 13: maximum length of message */ > > + u8 *buffer; > > + int ret; > > + > > + /* 13: maximum length of message */ > > + buffer = kmalloc(13, GFP_KERNEL); > > + if (!buffer) > > + return -ENOMEM; > > > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, > > vh); > > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > + > > + kfree(buffer); > > + return ret; > > } > > > > int usb6fire_comm_init(struct sfire_chip *chip) > > @@ -135,6 +153,12 @@ int usb6fire_comm_init(struct sfire_chip *chip) > > if (!rt) > > return -ENOMEM; > > > > + rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, > > GFP_KERNEL); > > + if (!rt->receiver_buffer) { > > + kfree(rt); > > + return -ENOMEM; > > + } > > + > > urb = &rt->receiver; > > rt->serial = 1; > > rt->chip = chip; > > @@ -153,6 +177,7 @@ int usb6fire_comm_init(struct sfire_chip *chip) > > urb->interval = 1; > > ret = usb_submit_urb(urb, GFP_KERNEL); > > if (ret < 0) { > > + kfree(rt->receiver_buffer); > > kfree(rt); > > snd_printk(KERN_ERR PREFIX "cannot create comm > > data receiver."); return ret; > > @@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip > > *chip) > > void usb6fire_comm_destroy(struct sfire_chip *chip) > > { > > - kfree(chip->comm); > > + struct comm_runtime *rt = chip->comm; > > + > > + kfree(rt->receiver_buffer); > > + kfree(rt); > > chip->comm = NULL; > > } > > diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h > > index 6a0840b..780d5ed 100644 > > --- a/sound/usb/6fire/comm.h > > +++ b/sound/usb/6fire/comm.h > > @@ -24,7 +24,7 @@ struct comm_runtime { > > struct sfire_chip *chip; > > > > struct urb receiver; > > - u8 receiver_buffer[COMM_RECEIVER_BUFSIZE]; > > + u8 *receiver_buffer; > > > > u8 serial; /* urb serial */ > > > > > > _______________________________________________ > > Alsa-devel mailing list > > Alsa-devel@alsa-project.org > > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <20130807155907.dfea021b3b73fcac33e4323d-ytc+IHgoah0@public.gmane.org>]
* Re: [alsa-devel] [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage [not found] ` <20130807155907.dfea021b3b73fcac33e4323d-ytc+IHgoah0@public.gmane.org> @ 2013-08-07 14:05 ` Takashi Iwai 2013-08-07 14:50 ` Jussi Kivilinna 1 sibling, 0 replies; 5+ messages in thread From: Takashi Iwai @ 2013-08-07 14:05 UTC (permalink / raw) To: Torsten Schenk Cc: Jussi Kivilinna, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, linux-usb-u79uwXL29TY76Z2rM5mHXA At Wed, 7 Aug 2013 15:59:07 +0200, Torsten Schenk wrote: > > On Wed, 07 Aug 2013 14:43:43 +0200 > Takashi Iwai <tiwai-l3A5Bk7waGM@public.gmane.org> wrote: > > > At Tue, 06 Aug 2013 14:53:24 +0300, > > Jussi Kivilinna wrote: > > > > > > Patch fixes 6fire not to use stack as URB transfer_buffer. URB > > > buffers need to be DMA-able, which stack is not. Furthermore, > > > transfer_buffer should not be allocated as part of larger device > > > structure because DMA coherency issues and patch fixes this issue > > > too. > > Thanks for the information. There is another section where this applies > in midi.c/midi.h. I can post a patch later. Yes, please. > > > Patch is only compile tested. > > > > The changes look OK, but I'd like to let it checked with a real > > hardware before putting to stable kernel. > > > > Torsten, could you check this? > > The patch works nicely. OK, I queued the patch to sound git tree now. > I'm just wondering if instead of calling kmalloc() every time it'd be > better to put a global sender_buffer and a mutex into the comm_runtime > struct and lock it every time a writeX is performed. This also would > have the advantage that message blocks would never overlap which > currently is possible. > > I can prepare a patch on top of this one and send it later, if you > agree. Yes, it'd be much better. thanks, Takashi > > Thanks, > Torsten > > > > > > > thanks, > > > > Takashi > > > > > > > > Cc: stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > > > Signed-off-by: Jussi Kivilinna <jussi.kivilinna-X3B1VOXEql0@public.gmane.org> > > > --- > > > sound/usb/6fire/comm.c | 38 ++++++++++++++++++++++++++++++++ > > > +----- sound/usb/6fire/comm.h | 2 +- > > > 2 files changed, 34 insertions(+), 6 deletions(-) > > > > > > diff --git a/sound/usb/6fire/comm.c b/sound/usb/6fire/comm.c > > > index 9e6e3ff..23452ee 100644 > > > --- a/sound/usb/6fire/comm.c > > > +++ b/sound/usb/6fire/comm.c > > > @@ -110,19 +110,37 @@ static int usb6fire_comm_send_buffer(u8 > > > *buffer, struct usb_device *dev) static int usb6fire_comm_write8 > > > (struct comm_runtime *rt, u8 request, u8 reg, u8 value) > > > { > > > - u8 buffer[13]; /* 13: maximum length of message */ > > > + u8 *buffer; > > > + int ret; > > > + > > > + /* 13: maximum length of message */ > > > + buffer = kmalloc(13, GFP_KERNEL); > > > + if (!buffer) > > > + return -ENOMEM; > > > > > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, > > > value, 0x00); > > > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > > + > > > + kfree(buffer); > > > + return ret; > > > } > > > > > > static int usb6fire_comm_write16(struct comm_runtime *rt, u8 > > > request, u8 reg, u8 vl, u8 vh) > > > { > > > - u8 buffer[13]; /* 13: maximum length of message */ > > > + u8 *buffer; > > > + int ret; > > > + > > > + /* 13: maximum length of message */ > > > + buffer = kmalloc(13, GFP_KERNEL); > > > + if (!buffer) > > > + return -ENOMEM; > > > > > > usb6fire_comm_init_buffer(buffer, 0x00, request, reg, vl, > > > vh); > > > - return usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > > + ret = usb6fire_comm_send_buffer(buffer, rt->chip->dev); > > > + > > > + kfree(buffer); > > > + return ret; > > > } > > > > > > int usb6fire_comm_init(struct sfire_chip *chip) > > > @@ -135,6 +153,12 @@ int usb6fire_comm_init(struct sfire_chip *chip) > > > if (!rt) > > > return -ENOMEM; > > > > > > + rt->receiver_buffer = kzalloc(COMM_RECEIVER_BUFSIZE, > > > GFP_KERNEL); > > > + if (!rt->receiver_buffer) { > > > + kfree(rt); > > > + return -ENOMEM; > > > + } > > > + > > > urb = &rt->receiver; > > > rt->serial = 1; > > > rt->chip = chip; > > > @@ -153,6 +177,7 @@ int usb6fire_comm_init(struct sfire_chip *chip) > > > urb->interval = 1; > > > ret = usb_submit_urb(urb, GFP_KERNEL); > > > if (ret < 0) { > > > + kfree(rt->receiver_buffer); > > > kfree(rt); > > > snd_printk(KERN_ERR PREFIX "cannot create comm > > > data receiver."); return ret; > > > @@ -171,6 +196,9 @@ void usb6fire_comm_abort(struct sfire_chip > > > *chip) > > > void usb6fire_comm_destroy(struct sfire_chip *chip) > > > { > > > - kfree(chip->comm); > > > + struct comm_runtime *rt = chip->comm; > > > + > > > + kfree(rt->receiver_buffer); > > > + kfree(rt); > > > chip->comm = NULL; > > > } > > > diff --git a/sound/usb/6fire/comm.h b/sound/usb/6fire/comm.h > > > index 6a0840b..780d5ed 100644 > > > --- a/sound/usb/6fire/comm.h > > > +++ b/sound/usb/6fire/comm.h > > > @@ -24,7 +24,7 @@ struct comm_runtime { > > > struct sfire_chip *chip; > > > > > > struct urb receiver; > > > - u8 receiver_buffer[COMM_RECEIVER_BUFSIZE]; > > > + u8 *receiver_buffer; > > > > > > u8 serial; /* urb serial */ > > > > > > > > > _______________________________________________ > > > Alsa-devel mailing list > > > Alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org > > > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > > > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [alsa-devel] [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage [not found] ` <20130807155907.dfea021b3b73fcac33e4323d-ytc+IHgoah0@public.gmane.org> 2013-08-07 14:05 ` [alsa-devel] " Takashi Iwai @ 2013-08-07 14:50 ` Jussi Kivilinna 1 sibling, 0 replies; 5+ messages in thread From: Jussi Kivilinna @ 2013-08-07 14:50 UTC (permalink / raw) To: Torsten Schenk Cc: Takashi Iwai, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw, linux-usb-u79uwXL29TY76Z2rM5mHXA On 07.08.2013 16:59, Torsten Schenk wrote: > On Wed, 07 Aug 2013 14:43:43 +0200 > Takashi Iwai <tiwai-l3A5Bk7waGM@public.gmane.org> wrote: > >> At Tue, 06 Aug 2013 14:53:24 +0300, >> Jussi Kivilinna wrote: >>> >>> Patch fixes 6fire not to use stack as URB transfer_buffer. URB >>> buffers need to be DMA-able, which stack is not. Furthermore, >>> transfer_buffer should not be allocated as part of larger device >>> structure because DMA coherency issues and patch fixes this issue >>> too. > > Thanks for the information. There is another section where this applies > in midi.c/midi.h. I can post a patch later. Appearently in pcm.c/pcm.h too: http://lxr.free-electrons.com/source/sound/usb/6fire/pcm.c#L571 http://lxr.free-electrons.com/source/sound/usb/6fire/pcm.h#L35 -Jussi > >>> >>> Patch is only compile tested. >> >> The changes look OK, but I'd like to let it checked with a real >> hardware before putting to stable kernel. >> >> Torsten, could you check this? > > The patch works nicely. > > I'm just wondering if instead of calling kmalloc() every time it'd be > better to put a global sender_buffer and a mutex into the comm_runtime > struct and lock it every time a writeX is performed. This also would > have the advantage that message blocks would never overlap which > currently is possible. > > I can prepare a patch on top of this one and send it later, if you > agree. > > Thanks, > Torsten > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-08-07 14:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-06 11:53 [PATCH] 6fire: fix DMA issues with URB transfer_buffer usage Jussi Kivilinna
[not found] ` <20130806115324.23908.18291.stgit-bi+AKbBUZKagILUCTcTcHdKyNwTtLsGr@public.gmane.org>
2013-08-07 12:43 ` [alsa-devel] " Takashi Iwai
2013-08-07 13:59 ` Torsten Schenk
[not found] ` <20130807155907.dfea021b3b73fcac33e4323d-ytc+IHgoah0@public.gmane.org>
2013-08-07 14:05 ` [alsa-devel] " Takashi Iwai
2013-08-07 14:50 ` Jussi Kivilinna
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.