forked from Minki/linux
ALSA: firewire-tascam: use fixed-length array for message cache to async midi port
ALSA driver for TASCAM FireWire series internally allocates 4 byte buffer for asynchronous transaction to transfer MIDI messages. However, the buffer can be allocated with memory object of parent structure. This commit adds 4 byte array as a member of the structure and obsoletes the redundant allocation. This is deallocated with memory object of parent structure. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
27badc4c10
commit
98a00d3602
@ -239,10 +239,6 @@ static void midi_port_work(struct work_struct *work)
|
||||
int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port,
|
||||
struct fw_unit *unit)
|
||||
{
|
||||
port->buf = kzalloc(4, GFP_KERNEL);
|
||||
if (port->buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
port->parent = fw_parent_device(unit);
|
||||
port->idling = true;
|
||||
port->next_ktime = 0;
|
||||
@ -253,13 +249,6 @@ int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port)
|
||||
{
|
||||
snd_fw_async_midi_port_finish(port);
|
||||
cancel_work_sync(&port->work);
|
||||
kfree(port->buf);
|
||||
}
|
||||
|
||||
static void handle_midi_tx(struct fw_card *card, struct fw_request *request,
|
||||
int tcode, int destination, int source,
|
||||
int generation, unsigned long long offset,
|
||||
@ -389,7 +378,6 @@ int snd_tscm_transaction_reregister(struct snd_tscm *tscm)
|
||||
void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
|
||||
{
|
||||
__be32 reg;
|
||||
unsigned int i;
|
||||
|
||||
if (tscm->async_handler.callback_data == NULL)
|
||||
return;
|
||||
@ -416,7 +404,4 @@ void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
|
||||
|
||||
fw_core_remove_address_handler(&tscm->async_handler);
|
||||
tscm->async_handler.callback_data = NULL;
|
||||
|
||||
for (i = 0; i < TSCM_MIDI_OUT_PORT_MAX; i++)
|
||||
snd_fw_async_midi_port_destroy(&tscm->out_ports[i]);
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ struct snd_fw_async_midi_port {
|
||||
|
||||
struct fw_transaction transaction;
|
||||
|
||||
u8 *buf;
|
||||
u8 buf[4];
|
||||
|
||||
struct snd_rawmidi_substream *substream;
|
||||
int consume_bytes;
|
||||
@ -148,7 +148,6 @@ void snd_tscm_stream_lock_release(struct snd_tscm *tscm);
|
||||
|
||||
int snd_fw_async_midi_port_init(struct snd_fw_async_midi_port *port,
|
||||
struct fw_unit *unit);
|
||||
void snd_fw_async_midi_port_destroy(struct snd_fw_async_midi_port *port);
|
||||
|
||||
static inline void
|
||||
snd_fw_async_midi_port_run(struct snd_fw_async_midi_port *port,
|
||||
@ -164,6 +163,7 @@ static inline void
|
||||
snd_fw_async_midi_port_finish(struct snd_fw_async_midi_port *port)
|
||||
{
|
||||
port->substream = NULL;
|
||||
cancel_work_sync(&port->work);
|
||||
port->error = false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user