[Cc'ed to linux-usb ML] At Wed, 7 Aug 2013 16:51:49 +0200, Torsten Schenk wrote: > > Patch fixes URB transfer buffer allocation for midi output to be DMA-able. Is this really needed? That is, can't a transfer buffer be at middle of kmalloc'ed space, but must be always the head of the kmalloc'ed space? Takashi > > Signed-off-by: Torsten Schenk <torsten.schenk@xxxxxxxx> > --- > diff -Nur a/sound/usb/6fire/midi.c b/sound/usb/6fire/midi.c > --- a/sound/usb/6fire/midi.c 2013-08-07 16:32:10.579639391 +0200 > +++ b/sound/usb/6fire/midi.c 2013-08-07 16:32:31.363378104 +0200 > @@ -19,6 +19,10 @@ > #include "chip.h" > #include "comm.h" > > +enum { > + MIDI_BUFSIZE = 64 > +}; > + > static void usb6fire_midi_out_handler(struct urb *urb) > { > struct midi_runtime *rt = urb->context; > @@ -156,6 +160,12 @@ > if (!rt) > return -ENOMEM; > > + rt->out_buffer = kzalloc(MIDI_BUFSIZE, GFP_KERNEL); > + if (!rt->out_buffer) { > + kfree(rt); > + return -ENOMEM; > + } > + > rt->chip = chip; > rt->in_received = usb6fire_midi_in_received; > rt->out_buffer[0] = 0x80; /* 'send midi' command */ > @@ -169,6 +179,7 @@ > > ret = snd_rawmidi_new(chip->card, "6FireUSB", 0, 1, 1, &rt->instance); > if (ret < 0) { > + kfree(rt->out_buffer); > kfree(rt); > snd_printk(KERN_ERR PREFIX "unable to create midi.\n"); > return ret; > @@ -197,6 +208,9 @@ > > void usb6fire_midi_destroy(struct sfire_chip *chip) > { > - kfree(chip->midi); > + struct midi_runtime *rt = chip->midi; > + > + kfree(rt->out_buffer); > + kfree(rt); > chip->midi = NULL; > } > diff -Nur a/sound/usb/6fire/midi.h b/sound/usb/6fire/midi.h > --- a/sound/usb/6fire/midi.h 2013-08-07 16:32:10.579639391 +0200 > +++ b/sound/usb/6fire/midi.h 2013-08-07 16:32:31.363378104 +0200 > @@ -16,10 +16,6 @@ > > #include "common.h" > > -enum { > - MIDI_BUFSIZE = 64 > -}; > - > struct midi_runtime { > struct sfire_chip *chip; > struct snd_rawmidi *instance; > @@ -32,7 +28,7 @@ > struct snd_rawmidi_substream *out; > struct urb out_urb; > u8 out_serial; /* serial number of out packet */ > - u8 out_buffer[MIDI_BUFSIZE]; > + u8 *out_buffer; > int buffer_offset; > > void (*in_received)(struct midi_runtime *rt, u8 *data, int length); > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html