From nobody Fri May 3 05:10:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1572715401; cv=none; d=zoho.com; s=zohoarc; b=mVZ22SGfA/GBnQTbpJtMdhRyoDblqeX5CUakS86fqPinEegWjkUu6y+RyV9HYhHIJBkD87eC2Gadyh6ApQQCyh4in2vEo0uMFiNEjwGAfWB7l+6agwBiD0xifaRzuLr/3EE0Xv5bp+z1TUlf0jKfWNzr5AaZry7xsChXCzr1t/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572715401; 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=repj30+f5t9Lgib6ekJiHMqSPqalaa1yXXzIK79Pb7M=; b=KJ5ENhBXLgjsNWIRJiDXRk6jIXGhqxENX6XfakDZQaCn6fJJEtIJ1GuVnHRaRO+Ui+1/6wySzusS7IKKvcXiPlGVRd9lubg9weJZlgvvpYwjssWdQmSlKuoWSeV9G2BEHVYoJAkhCMoOJ03uB0VuSStFfzbWmgbyZ0tiS5rCZ24= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572715401089444.49677486813073; Sat, 2 Nov 2019 10:23:21 -0700 (PDT) Received: from localhost ([::1]:49444 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQx7M-0004D3-7C for importer@patchew.org; Sat, 02 Nov 2019 13:23:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45860) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQwzo-0000FD-6L for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iQwzl-0006hL-An for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:28 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:50865) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iQwzl-0006S7-1L for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:25 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1M6lYs-1iJmWr36be-008Igf; Sat, 02 Nov 2019 18:15:16 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PATCH 1/3] dp8393x: put the DMA buffer in the state structure Date: Sat, 2 Nov 2019 18:15:09 +0100 Message-Id: <20191102171511.31881-2-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191102171511.31881-1-laurent@vivier.eu> References: <20191102171511.31881-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:afDQxBOBRZamJ6IcmfXe2BrmJetSpQvh//JKLUCpYSfOkUYQNSb cInAimyo56VFkHK5Xv9Oej9BeRHEJw0cksNC2LMrfeE9tMvdrjsT6qCguCOZY6P8WdQI5/d gyZu9JTfZe4qmd+tvjf4xUoI26ee1a1W+LDIBijxwlZsMXqbPI3Qdzp/LiAbKDvyVuk0gma VlKf+Vy4CbpA+5e7VQRiw== X-UI-Out-Filterresults: notjunk:1;V03:K0:uDt0mabbenY=:54lmhSPIiZO2WUTTW/9kFo MfLzwgE7O+xNb4saflMapUUHxkEIsoP8Rpj5FY+XN9Hpa9g5iCf14op1W27O7AsQgWv+Nm1ha 6c36JIfjV4uQBrPpKrjo704RselP8VyprhNdza/MUJv45j8tvAtG4BbaGF98VFsrg/tojbk1q 5svDsGDeL7AQUFSmiNSkPn/NKtSBM9yS+ousxOKEMc4itHhfmjJ2b2KC3pgNKQJMIG+yjpFAM VLNBQaci3k696hacE20zS926KbGYiiB2uOI1MfaBsyI9qpQC3Uzn5xT3UrBYvKZqRSOAm2uG6 cur4daMybqW7vDbnjoSoCFb2zcuL+ozURNEC7V4Vg5TathLwfORl2IKUXno/RbyiBMfBvRgvG oHZEFoMECzseGVNiAIrj0IJEXcU7DU22LEHsxDpjao8EUS7IxMsNp546Ov8gx7kYIpQlVGf6p mW/X3A5gzbnCv+TuF9jOkp4HFmWVDETY05fmUivluJVD0iwwWg589IhhCFX45IZ62tSE8NFG8 DOH+X+k9wY5MW5XAFpC9GYJoUdwcQXCDBWKhp17knFnIJFT18hLuq//FTW7Kh+dPdeZg7oolF xCDeBVnbukPkTCUitud/UOARjBpsk9t/PvI6w4BK3DjqVvyNpZfKAUgcxzASuY9uowD6z6jSz zmOoMSX3nxxDaXF3jITHgUpH6d/sFnujfNn91vmvMuGxUPvXbvqB8uzuxF99v+5kvu9OG5ZME hpTBDHXYrJ6Dqh0utCW3+fmQfdhN1NGuEvSeaIXCGPz/FdR38SFbwkkYRxj1cP4JprnOEVeRH OyOUWT6lWOywkG9z4Uz3K/3OGzn5v0SHqi4agWdQbO46RwMOS4uTDuYRhjrrmsever04v3A3c fYA1Up4SHIIPcoyuivxA== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.135 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: Jason Wang , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Move it from the stack. It's only 24 bytes, and this simplifies the dp8393x_get()/ dp8393x_put() interface. Signed-off-by: Laurent Vivier Reviewed-by: Herv=C3=A9 Poussineau --- hw/net/dp8393x.c | 105 ++++++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 55 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 693e244ce6..85d3f3788e 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -171,6 +171,7 @@ typedef struct dp8393xState { =20 /* Temporaries */ uint8_t tx_buffer[0x10000]; + uint16_t data[12]; int loopback_packet; =20 /* Memory access */ @@ -224,26 +225,25 @@ static uint32_t dp8393x_wt(dp8393xState *s) return s->regs[SONIC_WT1] << 16 | s->regs[SONIC_WT0]; } =20 -static uint16_t dp8393x_get(dp8393xState *s, int width, uint16_t *base, - int offset) +static uint16_t dp8393x_get(dp8393xState *s, int width, int offset) { uint16_t val; =20 if (s->big_endian) { - val =3D be16_to_cpu(base[offset * width + width - 1]); + val =3D be16_to_cpu(s->data[offset * width + width - 1]); } else { - val =3D le16_to_cpu(base[offset * width]); + val =3D le16_to_cpu(s->data[offset * width]); } return val; } =20 -static void dp8393x_put(dp8393xState *s, int width, uint16_t *base, int of= fset, +static void dp8393x_put(dp8393xState *s, int width, int offset, uint16_t val) { if (s->big_endian) { - base[offset * width + width - 1] =3D cpu_to_be16(val); + s->data[offset * width + width - 1] =3D cpu_to_be16(val); } else { - base[offset * width] =3D cpu_to_le16(val); + s->data[offset * width] =3D cpu_to_le16(val); } } =20 @@ -267,7 +267,6 @@ static void dp8393x_update_irq(dp8393xState *s) =20 static void dp8393x_do_load_cam(dp8393xState *s) { - uint16_t data[8]; int width, size; uint16_t index =3D 0; =20 @@ -277,13 +276,13 @@ static void dp8393x_do_load_cam(dp8393xState *s) while (s->regs[SONIC_CDC] & 0x1f) { /* Fill current entry */ address_space_rw(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->cam[index][0] =3D dp8393x_get(s, width, data, 1) & 0xff; - s->cam[index][1] =3D dp8393x_get(s, width, data, 1) >> 8; - s->cam[index][2] =3D dp8393x_get(s, width, data, 2) & 0xff; - s->cam[index][3] =3D dp8393x_get(s, width, data, 2) >> 8; - s->cam[index][4] =3D dp8393x_get(s, width, data, 3) & 0xff; - s->cam[index][5] =3D dp8393x_get(s, width, data, 3) >> 8; + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->cam[index][0] =3D dp8393x_get(s, width, 1) & 0xff; + s->cam[index][1] =3D dp8393x_get(s, width, 1) >> 8; + s->cam[index][2] =3D dp8393x_get(s, width, 2) & 0xff; + s->cam[index][3] =3D dp8393x_get(s, width, 2) >> 8; + s->cam[index][4] =3D dp8393x_get(s, width, 3) & 0xff; + s->cam[index][5] =3D dp8393x_get(s, width, 3) >> 8; DPRINTF("load cam[%d] with %02x%02x%02x%02x%02x%02x\n", index, s->cam[index][0], s->cam[index][1], s->cam[index][2], s->cam[index][3], s->cam[index][4], s->cam[index][5]); @@ -295,8 +294,8 @@ static void dp8393x_do_load_cam(dp8393xState *s) =20 /* Read CAM enable */ address_space_rw(&s->as, dp8393x_cdp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_CE] =3D dp8393x_get(s, width, data, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_CE] =3D dp8393x_get(s, width, 0); DPRINTF("load cam done. cam enable mask 0x%04x\n", s->regs[SONIC_CE]); =20 /* Done */ @@ -307,20 +306,19 @@ static void dp8393x_do_load_cam(dp8393xState *s) =20 static void dp8393x_do_read_rra(dp8393xState *s) { - uint16_t data[8]; int width, size; =20 /* Read memory */ width =3D (s->regs[SONIC_DCR] & SONIC_DCR_DW) ? 2 : 1; size =3D sizeof(uint16_t) * 4 * width; address_space_rw(&s->as, dp8393x_rrp(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); =20 /* Update SONIC registers */ - s->regs[SONIC_CRBA0] =3D dp8393x_get(s, width, data, 0); - s->regs[SONIC_CRBA1] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_RBWC0] =3D dp8393x_get(s, width, data, 2); - s->regs[SONIC_RBWC1] =3D dp8393x_get(s, width, data, 3); + s->regs[SONIC_CRBA0] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_CRBA1] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_RBWC0] =3D dp8393x_get(s, width, 2); + s->regs[SONIC_RBWC1] =3D dp8393x_get(s, width, 3); DPRINTF("CRBA0/1: 0x%04x/0x%04x, RBWC0/1: 0x%04x/0x%04x\n", s->regs[SONIC_CRBA0], s->regs[SONIC_CRBA1], s->regs[SONIC_RBWC0], s->regs[SONIC_RBWC1]); @@ -417,7 +415,6 @@ static void dp8393x_do_receiver_disable(dp8393xState *s) static void dp8393x_do_transmit_packets(dp8393xState *s) { NetClientState *nc =3D qemu_get_queue(s->nic); - uint16_t data[12]; int width, size; int tx_len, len; uint16_t i; @@ -429,18 +426,17 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) size =3D sizeof(uint16_t) * 6 * width; s->regs[SONIC_TTDA] =3D s->regs[SONIC_CTDA]; DPRINTF("Transmit packet at %08x\n", dp8393x_ttda(s)); - address_space_rw(&s->as, - dp8393x_ttda(s) + sizeof(uint16_t) * width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); + address_space_rw(&s->as, dp8393x_ttda(s) + sizeof(uint16_t) * widt= h, + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); tx_len =3D 0; =20 /* Update registers */ - s->regs[SONIC_TCR] =3D dp8393x_get(s, width, data, 0) & 0xf000; - s->regs[SONIC_TPS] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_TFC] =3D dp8393x_get(s, width, data, 2); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, data, 3); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, data, 4); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, data, 5); + s->regs[SONIC_TCR] =3D dp8393x_get(s, width, 0) & 0xf000; + s->regs[SONIC_TPS] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_TFC] =3D dp8393x_get(s, width, 2); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 3); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 4); + s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 5); =20 /* Handle programmable interrupt */ if (s->regs[SONIC_TCR] & SONIC_TCR_PINT) { @@ -465,10 +461,10 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) size =3D sizeof(uint16_t) * 3 * width; address_space_rw(&s->as, dp8393x_ttda(s) + sizeof(uint16_t) * (4 + 3 * i) * wid= th, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, data, 0); - s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, data, 1); - s->regs[SONIC_TFS] =3D dp8393x_get(s, width, data, 2); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_TSA0] =3D dp8393x_get(s, width, 0); + s->regs[SONIC_TSA1] =3D dp8393x_get(s, width, 1); + s->regs[SONIC_TFS] =3D dp8393x_get(s, width, 2); } } =20 @@ -495,12 +491,12 @@ static void dp8393x_do_transmit_packets(dp8393xState = *s) s->regs[SONIC_TCR] |=3D SONIC_TCR_PTX; =20 /* Write status */ - dp8393x_put(s, width, data, 0, + dp8393x_put(s, width, 0, s->regs[SONIC_TCR] & 0x0fff); /* status */ size =3D sizeof(uint16_t) * width; address_space_rw(&s->as, dp8393x_ttda(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1); =20 if (!(s->regs[SONIC_CR] & SONIC_CR_HTX)) { /* Read footer of packet */ @@ -509,9 +505,9 @@ static void dp8393x_do_transmit_packets(dp8393xState *s) dp8393x_ttda(s) + sizeof(uint16_t) * (4 + 3 * s->regs[SONIC_TFC]) * width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_CTDA] =3D dp8393x_get(s, width, data, 0) & ~0x1; - if (dp8393x_get(s, width, data, 0) & 0x1) { + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_CTDA] =3D dp8393x_get(s, width, 0) & ~0x1; + if (dp8393x_get(s, width, 0) & 0x1) { /* EOL detected */ break; } @@ -748,7 +744,6 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, size_t size) { dp8393xState *s =3D qemu_get_nic_opaque(nc); - uint16_t data[10]; int packet_type; uint32_t available, address; int width, rx_len =3D size; @@ -773,8 +768,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, size =3D sizeof(uint16_t) * 1 * width; address =3D dp8393x_crda(s) + sizeof(uint16_t) * 5 * width; address_space_rw(&s->as, address, MEMTXATTRS_UNSPECIFIED, - (uint8_t *)data, size, 0); - if (dp8393x_get(s, width, data, 0) & 0x1) { + (uint8_t *)s->data, size, 0); + if (dp8393x_get(s, width, 0) & 0x1) { /* Still EOL ; stop reception */ return -1; } else { @@ -818,27 +813,27 @@ static ssize_t dp8393x_receive(NetClientState *nc, co= nst uint8_t * buf, =20 /* Write status to memory */ DPRINTF("Write status at %08x\n", dp8393x_crda(s)); - dp8393x_put(s, width, data, 0, s->regs[SONIC_RCR]); /* status */ - dp8393x_put(s, width, data, 1, rx_len); /* byte count */ - dp8393x_put(s, width, data, 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 */ - dp8393x_put(s, width, data, 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 */ - dp8393x_put(s, width, data, 4, s->regs[SONIC_RSC]); /* seq_no */ + dp8393x_put(s, width, 0, s->regs[SONIC_RCR]); /* status */ + dp8393x_put(s, width, 1, rx_len); /* byte count */ + dp8393x_put(s, width, 2, s->regs[SONIC_TRBA0]); /* pkt_ptr0 */ + dp8393x_put(s, width, 3, s->regs[SONIC_TRBA1]); /* pkt_ptr1 */ + dp8393x_put(s, width, 4, s->regs[SONIC_RSC]); /* seq_no */ size =3D sizeof(uint16_t) * 5 * width; address_space_rw(&s->as, dp8393x_crda(s), - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1); =20 /* Move to next descriptor */ size =3D sizeof(uint16_t) * width; address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 5 * widt= h, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, size, 0); - s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, data, 0); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0); + s->regs[SONIC_LLFA] =3D dp8393x_get(s, width, 0); if (s->regs[SONIC_LLFA] & 0x1) { /* EOL detected */ s->regs[SONIC_ISR] |=3D SONIC_ISR_RDE; } else { - dp8393x_put(s, width, data, 0, 0); /* in_use */ + dp8393x_put(s, width, 0, 0); /* in_use */ address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 6 * = width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)data, sizeof(uint16_t), 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, sizeof(uint16_t), = 1); s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; s->regs[SONIC_ISR] |=3D SONIC_ISR_PKTRX; s->regs[SONIC_RSC] =3D (s->regs[SONIC_RSC] & 0xff00) | (((s->regs[= SONIC_RSC] & 0x00ff) + 1) & 0x00ff); --=20 2.21.0 From nobody Fri May 3 05:10:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1572715401; cv=none; d=zoho.com; s=zohoarc; b=Jsk3e3KO+fhHGjC+mGiTNlKxBzF0mKvPZsh9wlnyKoH6Hzr5kRs2FDsO5YN4cNTojDFhMcw7WwXhK5w3T6JAefpTEghnQBm6lSjGBu2ygZJ7imetLKfwgmQgF4Epci/IgB5NLCLdRlG9r702Bwq6NwwngNWWQ9+q5JnDtajVBVw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572715401; 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=4YQeTe+1beyLIrQuHdVsky9oMSyDnFmsSO0cIYIUxMY=; b=U7g/MRGSS47Zx4dK0IdiFYuLOR1wNVDLpMuIm03CuGGx1fXamgyuN13XFIJJHvq2+EsHgaMOKZHURkGecviiePliONMIBw8rCXKPziq76sYyeblbr9PMkXh3Qto+nsmLotRMwhWs5Z50wjwCan3LLGtQzlTM8avzvu45J3hFZXk= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572715401243649.8022671600417; Sat, 2 Nov 2019 10:23:21 -0700 (PDT) Received: from localhost ([::1]:49446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQx7P-0004I1-8Z for importer@patchew.org; Sat, 02 Nov 2019 13:23:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46498) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQx4q-0002xn-8d for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:20:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iQx4n-0005DZ-SJ for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:20:39 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:43851) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iQx4n-00050Y-H1 for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:20:37 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1M2NqA-1iOCN81Muk-003spp; Sat, 02 Nov 2019 18:15:16 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PATCH 2/3] dp8393x: fix dp8393x_receive() Date: Sat, 2 Nov 2019 18:15:10 +0100 Message-Id: <20191102171511.31881-3-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191102171511.31881-1-laurent@vivier.eu> References: <20191102171511.31881-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:e+bdHzlMe16+ydKTAqZOKD3azelc7xkAVHIm772OZAz+NUSeZAQ hPstiR8vtFWpQrvNVxq95EtGJamWpOpf0cWLzsLY4K58YHRmuHwbhxp9pIDqU4uNClnBFiE dECf94JMy3LFtyja0jxgYIsVWghfSkDs8nobvLUB1DaJhIXqZsaTwtYc3Z9cYQWIGt0STjK uCVQxU1XbTX1lCTf7R9kQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:mRHc9lQUneE=:QgNs6PW+8droW1kmxRl4tu NBNJOPw4NZi9DHMYFXaeX3Q40g8+XU7rSaRUUTdHrG6NtQ0r1DWaidCWf8MNUiHZ8oErt4MuN 89yASYMytHVJdATNNIckn/xPmwER+qjd5yQSLhCxkD8srqYdO7u9wEdb6DgEc5O5CMkqNzgu0 dy5LnnyOrRrY1CkN0LVY36Ij2jI8ePzrISsQTM9rXvhTM7pNuWeuvT5OYvBCQHRUwj+MVdTgl lpx/RsUiLgEd4O4DqIOIGt9Zri9D+7fju5NYDdLgMKmjeRZ+JMIjNiPhM1w0MzllWAleOJNWy UBC3Y8Je6UlkkKhV4uyFe+0cbMSnAzxLIRGK2Csj/jKntyfPN3thQRUu9NRgPJPq16zkyhumW mXCK2xtC6F4LUUhrO99QnaBvTbuXaM+yKwhRLSJGi32sfYQEaE1sGayQSqeh+sRyvdze3K/QX CQTytgB/DIH4BOIz0eVqD32IA8r3scYvj97dmcSdRjVAQ25Lk+vf0nRc7fvf+QVHOow2bHfpr nrS1PTiFz8acUAqHwsokgQMMwjhJ8Z0h7xcK40lhcBrujpS/dYZXl87Uo4rHnHAbxhfeUKfbR E6ulB0nrh6SqXpFEl6gDjCqXNdSI352JTLwszq7g6w4OJIZq3c5rsFbbij/DFYjG5n9y6yDIL tVTmPWioL9frXKCVwwsgLVBy7bV2mK1z7HM3Qyxu7TQ45ukpxNUM2wdZUFTmyo+lmD4K7hNyE dLoGmd4drWWDJLWOWrIHEJDjGbmOnjzTadzm08uyTbClru+aLdBHVz4bHuQSGgjfCcwwLQJBv 0PRVnjQe+BkvKzI0DmXnmqhPW5ZKQUUB7BqbMSMeKWFDJfPQZFOYXQhIZnM93ovrn1R9ZeaNH MlO7XZi3Vs+EEj1RSEmw== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.133 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: Jason Wang , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" address_space_rw() access size must be multiplied by the width. This fixes DHCP for Q800 guest. Signed-off-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Herv=C3=A9 Poussineau --- hw/net/dp8393x.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 85d3f3788e..b8c4473f99 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -833,7 +833,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, } else { dp8393x_put(s, width, 0, 0); /* in_use */ address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 6 * = width, - MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, sizeof(uint16_t), = 1); + MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1); s->regs[SONIC_CRDA] =3D s->regs[SONIC_LLFA]; s->regs[SONIC_ISR] |=3D SONIC_ISR_PKTRX; s->regs[SONIC_RSC] =3D (s->regs[SONIC_RSC] & 0xff00) | (((s->regs[= SONIC_RSC] & 0x00ff) + 1) & 0x00ff); --=20 2.21.0 From nobody Fri May 3 05:10:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1572715186; cv=none; d=zoho.com; s=zohoarc; b=VNMZpOHdbnICHLZrlP8SblxG/kgqjExDYjafrZSGWxtdmB9POiOTvbiUhoRo0vHVf7fFCH0lS9FFr1dj5wogtARyVz9Ohl98N19U47EavotP/o4sgmRg7dz6tkXffNqGk+xFNVfN9BC34ZdrPxQNat6UfsGFL4ao217CmkNfWUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1572715186; 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=GxPG7a8ObEhdM+TQHrIVUg959szRrXJqwJThZOH8Ko0=; b=Qqaq77jzo/0/yw9dVEAejPFvX5M9nu7WM3HtxAC+uCXG09J8Q+BLtEsb6VzKQOGO3eJep0C13VaH7CByp9G1DKXjA9Act4/dwo/WxsyGpipj0tq+DnVsgJOnX13DzLzvwrInrJ7OcAER7JgScr3CzzihD7doqx0I55KMgR/Oiqo= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1572715186606960.4832648133466; Sat, 2 Nov 2019 10:19:46 -0700 (PDT) Received: from localhost ([::1]:49424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQx3x-000284-Dw for importer@patchew.org; Sat, 02 Nov 2019 13:19:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45833) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iQwzm-0000E5-81 for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iQwzk-0006cB-39 for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:25 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:43171) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iQwzj-0006QD-Pz for qemu-devel@nongnu.org; Sat, 02 Nov 2019 13:15:24 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue011 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MmUYD-1hiVM53MtF-00iQSI; Sat, 02 Nov 2019 18:15:17 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PATCH 3/3] dp8393x: fix receiving buffer exhaustion Date: Sat, 2 Nov 2019 18:15:11 +0100 Message-Id: <20191102171511.31881-4-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20191102171511.31881-1-laurent@vivier.eu> References: <20191102171511.31881-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:2+Q/LLiZQMsFCgNF8FNud9WOQXe5kt/AosFCbbUgXKQMrIlkoWT zzOaCKpnb/imqapBn9I4WCVFRCWczze/PHg/beJHA/YtR44wykZ1OEzx56Vqd+bSF5ca8l0 DxgdpY+FVPhWKQ7eNbh1xAMiSEsGM3c/ByyIgghrbH8SNo6BadpGOzAidcds2qQRFP2CO2d Zh+H4IELQenIcjA8RMYFw== X-UI-Out-Filterresults: notjunk:1;V03:K0:Js1mI23s/IM=:f3KLetL4cbJY8ac24WBoos BRo5op4UwYn0Q2t73tzro6dxNjEbyQNaW+bL1lVB+D5tIwjJXzChd9z9Rf0g6uwYUwRANcGis p89bwQoaRIgSvF3AwRqKSK/JZrIj2rnzkxdJdFbfigau16mRN/JDZUSY38OEHYnLi+VRSfvXs 99U2TsBLqnoWIB8N7Sjv+RXCoUGNU5Ww9VqpllDaTa+UT4Yk/jYVSp3fO3rArpdrxJKkaOmY9 9Qo9T6gbk9Mo0wIUq5YpUmY0oCL5NHbEnSw8x+la1k2yqNboGJXQG/4eM7wAFUtJTXOw+NM7I /q6jdWrrM1+yywXjhuAFErljVALn1He7MzAI1hBy+z5yz1orv2i/WJh+SVVLrttWDqMdPUZaC Ui2+NCQcDC0Tod0zX5+V1tZbMA4BSwXEVi0Wg72cc0pQ4neUOniHm7m0FdjKMBjo7FwE3yQlp JBh6Yb6tKV4y52P8sNcDKeOb+pWNXGX+VqahjC6T78eR+UrTTwAJBvCCbubiCqSb1+eLNEwIp 7pMZhlklirF39YUFPI6tmSJDm53ThxoXjsf/CauF6uY7TO2YzVJEPwBTEMIJucmLhlmnyUaTK m0YEUVr2osRiKkZXYTu/32Vky2SC0VIpZlJCn1jXEqdkt0xf2rdRdQgv5j9QtAdELvpApQw0l R2TEmNmzx6xURpj652Mb6Vg4jddK8KkQBIAo7+Ptgfuc9sMk8+6XUIuTIquzzJqv1LsbopVfm 865tM87Q9Xg1HxJnlSezdz/k2dnJygC1rAebBstRMyijR0pxcWj3WsZ03cLy+fH+KA+TWsYwc aHcbd6d7cYnhTyHMYeKgCk1o9dranDe4NYzJ/s2yVpD1bL8eObIhLYcVHXbz6klObVqWavWrf +NzhOZAH7jUS/uEFkn5A== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.135 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: Jason Wang , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" The card is not able to exit from exhaustion state, because while the drive consumes the buffers, the RRP is incremented (when the driver clears the ISR RBE bit), so it stays equal to RWP, and while RRP =3D=3D RWP, the card thinks it is always in exhaustion state. So the driver consumes all the buffers, but the card cannot receive new ones. This patch fixes the problem by not incrementing RRP when the driver clears the ISR RBE bit. Signed-off-by: Laurent Vivier --- hw/net/dp8393x.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index b8c4473f99..21deb32456 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -304,7 +304,7 @@ static void dp8393x_do_load_cam(dp8393xState *s) dp8393x_update_irq(s); } =20 -static void dp8393x_do_read_rra(dp8393xState *s) +static void dp8393x_do_read_rra(dp8393xState *s, int next) { int width, size; =20 @@ -323,19 +323,20 @@ static void dp8393x_do_read_rra(dp8393xState *s) s->regs[SONIC_CRBA0], s->regs[SONIC_CRBA1], s->regs[SONIC_RBWC0], s->regs[SONIC_RBWC1]); =20 - /* Go to next entry */ - s->regs[SONIC_RRP] +=3D size; + if (next) { + /* Go to next entry */ + s->regs[SONIC_RRP] +=3D size; =20 - /* Handle wrap */ - if (s->regs[SONIC_RRP] =3D=3D s->regs[SONIC_REA]) { - s->regs[SONIC_RRP] =3D s->regs[SONIC_RSA]; - } + /* Handle wrap */ + if (s->regs[SONIC_RRP] =3D=3D s->regs[SONIC_REA]) { + s->regs[SONIC_RRP] =3D s->regs[SONIC_RSA]; + } =20 - /* Check resource exhaustion */ - if (s->regs[SONIC_RRP] =3D=3D s->regs[SONIC_RWP]) - { - s->regs[SONIC_ISR] |=3D SONIC_ISR_RBE; - dp8393x_update_irq(s); + /* Check resource exhaustion */ + if (s->regs[SONIC_RRP] =3D=3D s->regs[SONIC_RWP]) { + s->regs[SONIC_ISR] |=3D SONIC_ISR_RBE; + dp8393x_update_irq(s); + } } =20 /* Done */ @@ -549,7 +550,7 @@ static void dp8393x_do_command(dp8393xState *s, uint16_= t command) if (command & SONIC_CR_RST) dp8393x_do_software_reset(s); if (command & SONIC_CR_RRRA) - dp8393x_do_read_rra(s); + dp8393x_do_read_rra(s, 1); if (command & SONIC_CR_LCAM) dp8393x_do_load_cam(s); } @@ -640,7 +641,7 @@ static void dp8393x_write(void *opaque, hwaddr addr, ui= nt64_t data, data &=3D s->regs[reg]; s->regs[reg] &=3D ~data; if (data & SONIC_ISR_RBE) { - dp8393x_do_read_rra(s); + dp8393x_do_read_rra(s, 0); } dp8393x_update_irq(s); if (dp8393x_can_receive(s->nic->ncs)) { @@ -840,7 +841,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, cons= t uint8_t * buf, =20 if (s->regs[SONIC_RCR] & SONIC_RCR_LPKT) { /* Read next RRA */ - dp8393x_do_read_rra(s); + dp8393x_do_read_rra(s, 1); } } =20 --=20 2.21.0