ALSA: usb-audio: Optimize the copy of packet sizes for implicit fb handling
authorTakashi Iwai <tiwai@suse.de>
Mon, 16 Feb 2026 14:12:06 +0000 (15:12 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 16 Feb 2026 14:13:35 +0000 (15:13 +0100)
We did manual copies over loop for the packet data update of the
implicit feedback, but this can be optimized with a simple memcpy().

Along with it, change the data type of snd_usb_packet_info struct to
align with other (from uint32_t to int).

No functional changes but only code optimizations.

Link: https://patch.msgid.link/20260216141209.1849200-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.h
sound/usb/endpoint.c

index 94404c2..e34d92d 100644 (file)
@@ -90,7 +90,7 @@ struct snd_usb_endpoint {
        struct snd_urb_ctx urb[MAX_URBS];
 
        struct snd_usb_packet_info {
-               uint32_t packet_size[MAX_PACKS_HS];
+               int packet_size[MAX_PACKS_HS];
                int packets;
        } next_packet[MAX_URBS];
        unsigned int next_packet_head;  /* ring buffer offset to read */
index 27ade2a..08cc2ee 100644 (file)
@@ -462,7 +462,7 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
        while (ep_state_running(ep)) {
                struct snd_usb_packet_info *packet;
                struct snd_urb_ctx *ctx = NULL;
-               int err, i;
+               int err;
 
                scoped_guard(spinlock_irqsave, &ep->lock) {
                        if ((!implicit_fb || ep->next_packet_queued > 0) &&
@@ -482,8 +482,8 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
                /* copy over the length information */
                if (implicit_fb) {
                        ctx->packets = packet->packets;
-                       for (i = 0; i < packet->packets; i++)
-                               ctx->packet_size[i] = packet->packet_size[i];
+                       memcpy(ctx->packet_size, packet->packet_size,
+                              packet->packets * sizeof(packet->packet_size[0]));
                }
 
                /* call the data handler to fill in playback data */