From nobody Fri Sep 12 23:54:59 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1584017906; cv=none; d=zohomail.com; s=zohoarc; b=O1ropda3q6Jo6mlE93V4Vq8s6XxZELIUj6c24eBAbqHy5+w4BD+PIillxVHVeh8unY0awWoFGJ+6JHhG0iguTOzJAvBbObNK1l2OLdwDK1+y9vLUzrVrARlvKXL9ydMGlpcuNolVIkwoBBtFyN92mzWpTS8VDzH5sodjcPdP9dI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584017906; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=S4VyMnnrXmFdqqKgbyIqtVlSvsxqhziTW8yuqDzG8uY=; b=WqziwBxPvt0xGYY2oZrlVUlJA3tNH9C6BIq2p0cvj8IkcUDVGsL18xR07mKwJz4ATSYt8LYKXDy120H0hV8C2QDIeLI7NnmP3GnL4tifOoRYC5pF4QTliW+2BVgH7eXj62WqaTwpDVufPoyro7BdLa+YV3bSEc+0TpM1L6R2pZs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584017906290263.5968956002496; Thu, 12 Mar 2020 05:58:26 -0700 (PDT) Received: from localhost ([::1]:41030 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNPt-0002pz-7D for importer@patchew.org; Thu, 12 Mar 2020 08:58:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46425) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNNl-0008RL-HG for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCNNk-0006vv-FM for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:13 -0400 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]:42959) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jCNNk-0006vd-BH for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:12 -0400 Received: by mail-qk1-x743.google.com with SMTP id e11so5888771qkg.9 for ; Thu, 12 Mar 2020 05:56:12 -0700 (PDT) Received: from pm2-ws13.praxislan02.com ([2001:470:8:67e:ba27:ebff:fee8:ce27]) by smtp.gmail.com with ESMTPSA id u3sm8001236qkc.4.2020.03.12.05.56.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 05:56:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S4VyMnnrXmFdqqKgbyIqtVlSvsxqhziTW8yuqDzG8uY=; b=Pr7tUsKGJi3dEZRTd3xcTFE7RxiTs3vIQ2t0jwiZc+DNXOUAhCsP9XH8cJaCxsdI0u 2tv6TACuE1ktqkCX3yNXWr2aWtnPwo8AR/+2O/oxscvWz6ciQnw+K9aeuRAuCsu+bFLD hrSky4SXWFmfshaJ3ciO2lZN31FLt+tfYFfSK+vzgNGRiSmnknXZgqKbD3SQlK9HIoiN sFEOkuCeAbk1G/cEIT54adOLfqrARBs+SNqTf6JmZCKDxX+bGNwJN+RM741XN79JbhAk ycDCy95kakQc+snjBsX3PoNahnQ/s88t5z+hVuWYL46DE4iKmkQYxjKEVQI/M7aAPOCr KUWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=S4VyMnnrXmFdqqKgbyIqtVlSvsxqhziTW8yuqDzG8uY=; b=dJzTDrV3ZMf0F5P/tf7BJB+vBIda7fTwIb1oNnYmkpn+yOPidguGoFNqbWjUmfSmpI Hk4+JCyEM9hYmqsWuV7sbIIOTtW8I7eSmgKwQ8Osj8/m2MoKPax9zlTPr6MUgenlSLtU u4RKBwIgB0y1994diozr7zPi9gSKAuqt6ipICyn02t83Y+WYVo+PHzyqEvOquHpTKxKE 8BbvQgPIvzSs6I8PYWM6IxRhqHnj3ufCkmc4ikzcZ29wG4Md0wnr+l+G02txzo+dqP9P 0G/suftAMXQ4L99jG0aWsGMGwuKBcBvPLa/ZRRIWMU1iWHEVoVHSklVoagtFY2r4V/LK 6zPg== X-Gm-Message-State: ANhLgQ0+LVriJ6bisRbUWjK1H9uZm8ibZU6joZvL7ThIHyNkbnpO9I1r UOeTacFV2KrsLOs4zaFIepI= X-Google-Smtp-Source: ADFU+vuYq5CWSFKQGOP/W+a57/GZLJAjsFxOKEk51zmAUl3nxjekLuONwtouc9cJxNbSRQ6y46k+rw== X-Received: by 2002:a05:620a:895:: with SMTP id b21mr7524363qka.318.1584017771671; Thu, 12 Mar 2020 05:56:11 -0700 (PDT) From: Jason Andryuk To: Gerd Hoffmann , Samuel Thibault Subject: [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function Date: Thu, 12 Mar 2020 08:55:20 -0400 Message-Id: <20200312125524.7812-2-jandryuk@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200312125524.7812-1-jandryuk@gmail.com> References: <20200312125524.7812-1-jandryuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::743 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Jason Andryuk Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" We'll be adding a loop, so move the code into a helper function. breaks are replaced with returns. Signed-off-by: Jason Andryuk Reviewed-by: Samuel Thibault --- hw/usb/dev-serial.c | 77 +++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index daac75b7ae..71fa786bd8 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -358,13 +358,53 @@ static void usb_serial_handle_control(USBDevice *dev,= USBPacket *p, } } =20 +static void usb_serial_token_in(USBSerialState *s, USBPacket *p) +{ + int first_len, len; + uint8_t header[2]; + + first_len =3D RECV_BUF - s->recv_ptr; + len =3D p->iov.size; + if (len <=3D 2) { + p->status =3D USB_RET_NAK; + return; + } + header[0] =3D usb_get_modem_lines(s) | 1; + /* We do not have the uart details */ + /* handle serial break */ + if (s->event_trigger && s->event_trigger & FTDI_BI) { + s->event_trigger &=3D ~FTDI_BI; + header[1] =3D FTDI_BI; + usb_packet_copy(p, header, 2); + return; + } else { + header[1] =3D 0; + } + len -=3D 2; + if (len > s->recv_used) + len =3D s->recv_used; + if (!len) { + p->status =3D USB_RET_NAK; + return; + } + if (first_len > len) + first_len =3D len; + usb_packet_copy(p, header, 2); + usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len); + if (len > first_len) + usb_packet_copy(p, s->recv_buf, len - first_len); + s->recv_used -=3D len; + s->recv_ptr =3D (s->recv_ptr + len) % RECV_BUF; + + return; +} + static void usb_serial_handle_data(USBDevice *dev, USBPacket *p) { USBSerialState *s =3D (USBSerialState *)dev; uint8_t devep =3D p->ep->nr; struct iovec *iov; - uint8_t header[2]; - int i, first_len, len; + int i; =20 switch (p->pid) { case USB_TOKEN_OUT: @@ -382,38 +422,7 @@ static void usb_serial_handle_data(USBDevice *dev, USB= Packet *p) case USB_TOKEN_IN: if (devep !=3D 1) goto fail; - first_len =3D RECV_BUF - s->recv_ptr; - len =3D p->iov.size; - if (len <=3D 2) { - p->status =3D USB_RET_NAK; - break; - } - header[0] =3D usb_get_modem_lines(s) | 1; - /* We do not have the uart details */ - /* handle serial break */ - if (s->event_trigger && s->event_trigger & FTDI_BI) { - s->event_trigger &=3D ~FTDI_BI; - header[1] =3D FTDI_BI; - usb_packet_copy(p, header, 2); - break; - } else { - header[1] =3D 0; - } - len -=3D 2; - if (len > s->recv_used) - len =3D s->recv_used; - if (!len) { - p->status =3D USB_RET_NAK; - break; - } - if (first_len > len) - first_len =3D len; - usb_packet_copy(p, header, 2); - usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len); - if (len > first_len) - usb_packet_copy(p, s->recv_buf, len - first_len); - s->recv_used -=3D len; - s->recv_ptr =3D (s->recv_ptr + len) % RECV_BUF; + usb_serial_token_in(s, p); break; =20 default: --=20 2.24.1 From nobody Fri Sep 12 23:54:59 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1584017845; cv=none; d=zohomail.com; s=zohoarc; b=W6E9NX7u6uMne605gdcr6UmEjwRVkeY7pb7htBv1J8RzvzSl70J/NwpUFUmkqQxgwzOKek3PH7vNgRNaLVboGFCT9btx7pUjMotTlh9EnZrVyhalV3zXIyIyx0Ipp/yQdbmnh1WdtpnXSQvniZ4zxpOFXe1tGw0jI/E3V3rT4Pw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584017845; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4z9fu4xftoAJXpbaT1HbZZon3sBmsuESzWRYay2EczM=; b=XKV+PCZVBs/YFWMfR5pgQMTzaxOwsoFlygf6eb8PIGZkIUKbWE3ZP3DKK9MFF8WRePl0T8kmhWHkX5kgVxVi543t8k7c7dMzn2KExDG3+LbJoo7LxcjRsXUrrW3ZloPDqys+/JpD5KXEimtlAL/F50tSMz3pDlzyYjvpuLn+RIo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584017845191443.8991015147192; Thu, 12 Mar 2020 05:57:25 -0700 (PDT) Received: from localhost ([::1]:41014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNOu-0001Sz-5p for importer@patchew.org; Thu, 12 Mar 2020 08:57:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46436) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNNs-00007v-IW for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCNNr-0006yd-Eb for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:20 -0400 Received: from mail-qv1-xf41.google.com ([2607:f8b0:4864:20::f41]:40836) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jCNNr-0006yQ-AX for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:19 -0400 Received: by mail-qv1-xf41.google.com with SMTP id u17so2513065qvv.7 for ; Thu, 12 Mar 2020 05:56:19 -0700 (PDT) Received: from pm2-ws13.praxislan02.com ([2001:470:8:67e:ba27:ebff:fee8:ce27]) by smtp.gmail.com with ESMTPSA id u3sm8001236qkc.4.2020.03.12.05.56.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 05:56:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4z9fu4xftoAJXpbaT1HbZZon3sBmsuESzWRYay2EczM=; b=rqPFAbpujbuqIWfV0t/8pk2q2TiJNsEPYy5iFs/3l0DX9ja66X7vVAb7ILOLm9aEbx 9X9Cb6k7qJ1fROdhm+HRqNuu/AlmOgQmEh6NGAuaZrjNYAEWUYjBwAHIzgSynn9EAzMx THXIazwrOvUUSGQKoPnFkasIh5UxFJoI/fPm/zjZcnSe/HQ/CzBUoP3iEPfHu3clGQ1t cGMeig9s5SVgE6RA2vxBSznkxlebr3PXEA3h4oisokTarv6HzqhV1xfkvEG8CAUGfdwV lclUMqRaKQx07/uVSxK+Fyk2ngrjlg4132TMcuCyPQPH9U0D6MHye7yDKWEdwUcMVGML knyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4z9fu4xftoAJXpbaT1HbZZon3sBmsuESzWRYay2EczM=; b=PWSAReilF1BW9AzJ5CPdZg0XEwumnCKp9cMZWa7Ix9HvV5pint9ZEPeKP4jKXbR6n1 IOli0qtrFdu8nBvs2QVCdkmTACRpqdGRAVrZZQAKXj/AcD+HAWl7etWW3MH/I+Kv0oP1 OqDQ2vguECps4wkwhWQUPu22r2txbPdRJap7nQ5VApC5k66v3xkJRSrBRSQ99R6l8Q6w Zdxg+KN6o9zHwyt28Xsmr8N7ABZ3IAKAUHVSmLwDbLLWcsR9DF6s2uMa/P8U5VR1imrE x7L6iixfbkHLEJDI61sz/JGrTHfTZGgmvNYvxx57btGmfJZMgXObLbQe3ezSdU79j8cs LmYQ== X-Gm-Message-State: ANhLgQ1TWqTc/IOLNalWpVUcWZe7T6MVvGzN1QkblS2cuCT6OqkO37Yb nY6YDNYPrYWdvzfZEm0YHQA= X-Google-Smtp-Source: ADFU+vtjOgVbtAYoWDePx8jh8danVl7zMEXxJJP8City2OKT5rati/En6CzdzN4EwpKTQycwGB4qNw== X-Received: by 2002:ad4:4862:: with SMTP id u2mr7249542qvy.67.1584017778757; Thu, 12 Mar 2020 05:56:18 -0700 (PDT) From: Jason Andryuk To: Gerd Hoffmann , Samuel Thibault Subject: [PATCH 2/4] usb-serial: chunk data to wMaxPacketSize Date: Thu, 12 Mar 2020 08:55:21 -0400 Message-Id: <20200312125524.7812-3-jandryuk@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200312125524.7812-1-jandryuk@gmail.com> References: <20200312125524.7812-1-jandryuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::f41 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Jason Andryuk Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" usb-serial has issues with xHCI controllers where data is lost in the VM. Inspecting the URBs in the guest, EHCI starts every 64 byte boundary (wMaxPacketSize) with a header. EHCI hands packets into usb_serial_token_in() with size 64, so these cannot cross the 64 byte boundary. The xHCI controller has packets of 512 bytes and the usb-serial will just write through the 64 byte boundary. In the guest, this means data bytes are interpreted as header, so data bytes don't make it out the serial interface. Re-work usb_serial_token_in to chunk data into 64 byte units - 2 byte header and 62 bytes data. The Linux driver reads wMaxPacketSize to find the chunk size, so we match that. Real hardware was observed to pass in 512 byte URBs (496 bytes data + 8 * 2 byte headers). Since usb-serial only buffers 384 bytes of data, usb-serial will pass in 6 64 byte blocks and 1 12 byte partial block for 462 bytes max. Signed-off-by: Jason Andryuk Reviewed-by: Samuel Thibault --- hw/usb/dev-serial.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 71fa786bd8..96b6c34202 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -360,15 +360,16 @@ static void usb_serial_handle_control(USBDevice *dev,= USBPacket *p, =20 static void usb_serial_token_in(USBSerialState *s, USBPacket *p) { - int first_len, len; + const int max_packet_size =3D desc_iface0.eps[0].wMaxPacketSize; + int packet_len; uint8_t header[2]; =20 - first_len =3D RECV_BUF - s->recv_ptr; - len =3D p->iov.size; - if (len <=3D 2) { + packet_len =3D p->iov.size; + if (packet_len <=3D 2) { p->status =3D USB_RET_NAK; return; } + header[0] =3D usb_get_modem_lines(s) | 1; /* We do not have the uart details */ /* handle serial break */ @@ -380,21 +381,31 @@ static void usb_serial_token_in(USBSerialState *s, US= BPacket *p) } else { header[1] =3D 0; } - len -=3D 2; - if (len > s->recv_used) - len =3D s->recv_used; - if (!len) { + + if (!s->recv_used) { p->status =3D USB_RET_NAK; return; } - if (first_len > len) - first_len =3D len; - usb_packet_copy(p, header, 2); - usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len); - if (len > first_len) - usb_packet_copy(p, s->recv_buf, len - first_len); - s->recv_used -=3D len; - s->recv_ptr =3D (s->recv_ptr + len) % RECV_BUF; + + while (s->recv_used && packet_len > 2) { + int first_len, len; + + len =3D MIN(packet_len, max_packet_size); + len -=3D 2; + if (len > s->recv_used) + len =3D s->recv_used; + + first_len =3D RECV_BUF - s->recv_ptr; + if (first_len > len) + first_len =3D len; + usb_packet_copy(p, header, 2); + usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len); + if (len > first_len) + usb_packet_copy(p, s->recv_buf, len - first_len); + s->recv_used -=3D len; + s->recv_ptr =3D (s->recv_ptr + len) % RECV_BUF; + packet_len -=3D len + 2; + } =20 return; } --=20 2.24.1 From nobody Fri Sep 12 23:54:59 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1584017948; cv=none; d=zohomail.com; s=zohoarc; b=BANbogXeTvgoOWsgx6Y6+eQ3NTNsrAOAQqWjOsFlbQH75zdRZypVqqJ9B/mRMUyfbADS17J/C6ZuhWQacxdGW42ePXcZVZQYYAhVDvfErDfqJBwGsYxmQ/9laVZyPfQ9vbgrHeM7oqWzu5eqHE6drCVjJg3KIfOwqRD7QgVoYwo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584017948; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UG4m6nBY/x3HnWJceuhcnmoPek0jkN3T0AxBQPCCNJM=; b=kiHKCUZsQhCHkU9wqYrZLZ/iCHxQe7kslUTDpnq+bkmdcmUrfPmdMO4LBA0Be08CjUn5zVSXwrmKX1f4/JYGNyIM/wZ3rFTk4R/GxqKvGkGw7fxNugHfv2fwvD8k39LdE6gYE4ih/bRghZmVg6NMSka7U2LEK8BNW7+SYSbY/Kk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584017948639541.6846812174754; Thu, 12 Mar 2020 05:59:08 -0700 (PDT) Received: from localhost ([::1]:41034 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNQY-0003zu-Rf for importer@patchew.org; Thu, 12 Mar 2020 08:59:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46447) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNNz-0000Md-2v for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCNNy-000728-5J for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:26 -0400 Received: from mail-qk1-x741.google.com ([2607:f8b0:4864:20::741]:33713) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jCNNy-00071v-1W for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:26 -0400 Received: by mail-qk1-x741.google.com with SMTP id p62so5938039qkb.0 for ; Thu, 12 Mar 2020 05:56:26 -0700 (PDT) Received: from pm2-ws13.praxislan02.com ([2001:470:8:67e:ba27:ebff:fee8:ce27]) by smtp.gmail.com with ESMTPSA id u3sm8001236qkc.4.2020.03.12.05.56.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 05:56:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UG4m6nBY/x3HnWJceuhcnmoPek0jkN3T0AxBQPCCNJM=; b=unYkWqbGENx7v41jlgwEIRmjv9vnQwnTcK4ladC9SrgfjhuL+j+Kslv1n5JihcBJts OWXPPFF8F503nlDUMLxewYMaxDE58Af/bsBA0WO3OiOKPnK2KJ4lso6aIN/jkp9ZvzJe Fruca1m6xTk7BTw0wKqvxPx4ZNo+VNIFHdE0n+JN8DVq2+mG1lh9xmMTBlMSXY3qOfwB LaD5PHvi+rjv3oB8hA+N53s/yE9ib+34WGLwMLa7CNEbqexwxoGwBYVvcktm2EDptYTM hPkKT++zzlJW1JCmrXU2+qeQ2uYzQOnTQg/jadnz+594SVaAar4KTRw17GjMny4+5zz8 PW6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UG4m6nBY/x3HnWJceuhcnmoPek0jkN3T0AxBQPCCNJM=; b=uFcT1/fu1Eel9gxVJQOOsK+fC75ze+7ag4oAFa8NUWGWpHBg/mnK1KlhT+y3MiT/i6 YYyZbJ+RmvXXwycFKcHZJSNUtnsanvSNge4OMz1CM9PVznw4GzJcnDnCz88SPY0UCmgU L0s+/HqANIWJirFuV2qQEoAUjUZ0xqcSRxQ5L7DiOQnbUlz9Xn0L+1i5Lfn9PjDyGO0v oxvA/d5nTDniKz8r/WHlPdew8WHvoWB9+bZ3wAs4xJ+siFXVbkMwdP99W40hg6tw4Vgf 0OtopSgZJSzFVQZpscaeiiZrmPdhgBTkNnZGo9RaIS6Qi6naGwcn7Ce7yOGyDKTpcszt CIyg== X-Gm-Message-State: ANhLgQ1kiRYhDxTu1+qh/2dcd+kl+Z3F2eSpDMq4cloAF6gmGuciGC0X fa4sn2tIzGLsMiHyO6QhByE= X-Google-Smtp-Source: ADFU+vtna1WHnqmIguikH2v/QI7VNUzznH+3AWOmsv6ISJAYhfhxKuYj/v4swd8HKvCgj4+GP/AOAQ== X-Received: by 2002:a05:620a:1210:: with SMTP id u16mr7511441qkj.493.1584017785554; Thu, 12 Mar 2020 05:56:25 -0700 (PDT) From: Jason Andryuk To: Gerd Hoffmann , Samuel Thibault Subject: [PATCH 3/4] usb-serial: Increase receive buffer to 496 Date: Thu, 12 Mar 2020 08:55:22 -0400 Message-Id: <20200312125524.7812-4-jandryuk@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200312125524.7812-1-jandryuk@gmail.com> References: <20200312125524.7812-1-jandryuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::741 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Jason Andryuk Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" A FTDI USB adapter on an xHCI controller can send 512 byte USB packets. These are 8 * ( 2 bytes header + 62 bytes data). A 384 byte receive buffer is insufficient to fill a 512 byte packet, so bump the receive size to 496 ( 512 - 2 * 8 ). Signed-off-by: Jason Andryuk Reviewed-by: Samuel Thibault --- hw/usb/dev-serial.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 96b6c34202..ef33bcd127 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -29,7 +29,7 @@ do { printf("usb-serial: " fmt , ## __VA_ARGS__); } while= (0) #define DPRINTF(fmt, ...) do {} while(0) #endif =20 -#define RECV_BUF 384 +#define RECV_BUF (512 - (2 * 8)) =20 /* Commands */ #define FTDI_RESET 0 --=20 2.24.1 From nobody Fri Sep 12 23:54:59 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1584018037; cv=none; d=zohomail.com; s=zohoarc; b=Gg0lrqsEa2C/bP7mZxctnhrXU2IS3w1AQVQALKc7OMJp5ONrwVfBHYg4Ujs20tN9vXeZsCbCdx0QUzPFck6BVwTONi0nc+GmKzKL4fjOb3pjdnoA7jQnyzOanen0JbC3vWBICLmgKLSV+YEYCzPrl9Xx618QlqDcH1Q7jp8M454= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584018037; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1VSF7YAtLh+8LFVIeTwCMtUaSmVrA9/zD3UEqGOwfDU=; b=NzHWsgm/u5Lu40NDA+pBLFxVaF1xUkRUcomJ98zLo13Q4GrhVC1BANlNt7IfJNA+jZSn/rEmM3RjoAU5gTjwZ+LBOo/Ox2liuc+pahGILRC9MlU/5MvK3sHunkqIUxEd4pOGe9ksZi2q8tbcgbgGmHFiHg9Fc16FA0/zP+5EYfQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584018037454416.3572106955304; Thu, 12 Mar 2020 06:00:37 -0700 (PDT) Received: from localhost ([::1]:41072 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNRw-0005KG-SR for importer@patchew.org; Thu, 12 Mar 2020 09:00:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46459) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jCNO4-0000YJ-8p for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jCNO3-00074w-Az for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:32 -0400 Received: from mail-qk1-x742.google.com ([2607:f8b0:4864:20::742]:36914) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jCNO3-00074g-7J for qemu-devel@nongnu.org; Thu, 12 Mar 2020 08:56:31 -0400 Received: by mail-qk1-x742.google.com with SMTP id z25so1021249qkj.4 for ; Thu, 12 Mar 2020 05:56:31 -0700 (PDT) Received: from pm2-ws13.praxislan02.com ([2001:470:8:67e:ba27:ebff:fee8:ce27]) by smtp.gmail.com with ESMTPSA id u3sm8001236qkc.4.2020.03.12.05.56.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Mar 2020 05:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1VSF7YAtLh+8LFVIeTwCMtUaSmVrA9/zD3UEqGOwfDU=; b=nWHFoL+VTAwwfalpjOc31nwWzR4h++PjFNO2zoscIhQ+SooUhd3IeUiwdBZzvJ5ktX ewhlwk4BSr6Nl44hvabDFqlfk2V40OozBCsJ6087uwkIAxB/nNpvNnaVWhuqW03cYGm3 suij1NKFigGeEAsBPXtEXygNCwJYRUOnIIKryRJSWuQFZ4mOrOwwRlI+ADT6EQqD4VND jQBE9c7MpoY30ZtdIRSmh7t2j95hq+9ropSOqyHZdXbl9/SeSkdN5+X8FHJhxtVQjdYc blCfN20vZz7luRFsLAzmt3TycofSazVyfxYHiCh9aOTDz9qPF/lZ27bTdFgeog7ARTF0 MAAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1VSF7YAtLh+8LFVIeTwCMtUaSmVrA9/zD3UEqGOwfDU=; b=iIWhPbSChxccS6Urh3RlmCt1dEeCPWbhzNz6ay5ze8V3F65gDf3Kj5GYVg27PZB/02 /UWu7ax9Tfud3L2xFRr3faS8HsxMPehEGHo48ZYEsTm36ivOdXv0UXqtgvZ1uboIu6YX lHhF+Zr5C38wwteDxurNDRwWa07z87ECwBTiINkQhzJ/jurwGLQh0of1d3ba4DD63kn5 LTc+TAu8ywQ6i88z8ZSNRsqVLMv7odlVNtyiMOgLRuuATsaB1gp1kVP4HjJtFlDSqLJV B5/CIRlkk+y2kZ1sggUuszQcVJdTkKBlEjVNo1umEo+xN1IMI91tOhWG7ud9VHzkNWxG la2w== X-Gm-Message-State: ANhLgQ0Cz1rJVstfEejqeNod7Qld0nEy9/JeqqIgIh6ALSxWV0Vj7JNN quYwFnJ0d9c+n8TCQNXRl1Y= X-Google-Smtp-Source: ADFU+vvFXLrl/y9HypBnN3hxEjBTPTibISr/pCh+D4pmLsT8nul7nxM4m/9rRhk1wGNfUwpqq9+mHA== X-Received: by 2002:a37:992:: with SMTP id 140mr7719156qkj.36.1584017790665; Thu, 12 Mar 2020 05:56:30 -0700 (PDT) From: Jason Andryuk To: Gerd Hoffmann , Samuel Thibault Subject: [PATCH 4/4] usb-serial: Fix timeout closing the device Date: Thu, 12 Mar 2020 08:55:23 -0400 Message-Id: <20200312125524.7812-5-jandryuk@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200312125524.7812-1-jandryuk@gmail.com> References: <20200312125524.7812-1-jandryuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::742 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, Jason Andryuk Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" Linux guests wait ~30 seconds when closing the emulated /dev/ttyUSB0. During that time, the kernel driver is sending many control URBs requesting GetModemStat (5). Real hardware returns a status with FTDI_THRE (Transmitter Holding Register) and FTDI_TEMT (Transmitter Empty) set. QEMU leaves them clear, and it seems Linux is waiting for FTDI_TEMT to be set to indicate the tx queue is empty before closing. Set the bits when responding to a GetModemStat query and avoid the shutdown delay. Signed-off-by: Jason Andryuk Reviewed-by: Samuel Thibault --- Looking at a USB dump for a real FTDI USB adapter, I see these bits set in all the bulk URBs where QEMU currently has them clear. --- hw/usb/dev-serial.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index ef33bcd127..5389235f17 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -332,7 +332,7 @@ static void usb_serial_handle_control(USBDevice *dev, U= SBPacket *p, break; case DeviceInVendor | FTDI_GET_MDM_ST: data[0] =3D usb_get_modem_lines(s) | 1; - data[1] =3D 0; + data[1] =3D FTDI_THRE | FTDI_TEMT; p->actual_length =3D 2; break; case DeviceOutVendor | FTDI_SET_EVENT_CHR: --=20 2.24.1