From nobody Wed Dec 17 07:40:02 2025 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6F8D1CD2D for ; Tue, 18 Jun 2024 00:36:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718670978; cv=none; b=Sm93WGTt0obEjOgP6nfjZ0PRRX96DvnlfaG31is3l+7cmDi2NllEXMUtwOKL0YoO3wYBdYkAK4o0anbLraxb98OHtq46zjnWbXuBX/HuphIo5YK77HBtJrxED+DnNpMTuXu3Hqs2e7yR78gTD3dwcbJHZGXca2rhxb+BsjJ5Gb0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718670978; c=relaxed/simple; bh=PvC8MJAkjfyVNSqDlr6ZTCW69VpT5LCALdZyMxYPxZk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mTISA+VkNSwVny7qbnC/CL53VWm2yvajKe65ysOzzCWaxKLNBaKwHemgComk6+PhFEqj1+Xvys7nzpLpQBJJ4PnwlEbCH+dCEfV4nG9ECGxE82IDP6g8BtPkkiXMoiBZ62m27Rk2F4h9G4K9r3Y5f5cWQE7KCdGc2Ju/Rm+h85w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=ZM0MxyIP; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ZM0MxyIP" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-703ed15b273so3694974b3a.1 for ; Mon, 17 Jun 2024 17:36:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1718670976; x=1719275776; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Y9UVS8jw65Qz1/+IKa1gxs23pkU4dvWn+yfPVR/mXAo=; b=ZM0MxyIP5ogiTpz3hrhlLxvGAjJiWcD9qS8R5Hx4JVDVwBsCQkmYTByTJjcrC8gqYY 1X+NUJcAx1BpUsvpgfc20nW0yheaRDgM45uAnXt9dTKNH5Ll1wj4fVmkLHIMr24wEnol BICMYZUC6/n4o39SWFmEgoSBdbumwNuwLfY8o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718670976; x=1719275776; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y9UVS8jw65Qz1/+IKa1gxs23pkU4dvWn+yfPVR/mXAo=; b=A/+O6W5WEy6lqIkHKQMMmEPZIoo2/HcLAdBlBoNpCaZXZyAyfqUkA2rfoqKzUAP1KT IMHbz/3vRvG5S6prQOxTNQnZi0bo5N8ae7yFL3r8x1LtTGMufotI5kWviyynaTLXELnh 7DEsHTnGTwzAdDnHPraiYflul0x9qOQyJirzi9R9tpndsS2Voa55NyZnD3jscZuVM6CZ SzfOjEx6YeT8UuRbMwC4Sq7MWE8mN+ZLgogkaMoyxnQPP+dzq9eOQpjp1gmqw5OS1sju Wb1Pg6wpap/ZuFUamC7bu9e/JeNBUJqsvfKw/9rHFda1pr0QaZYDBDDTilL4wuohNlEF XctQ== X-Forwarded-Encrypted: i=1; AJvYcCXwCK4qoGc6Q8fRp4vjUHn0+IuhVOSfVv8d894VmJL/41W0cyl5C+HJolvMPQvF8H6aECT/8YToT3+qhzzSmlFRp8JL0XvZ2wbeB9of X-Gm-Message-State: AOJu0YzGeszYM3z3+VY+7P+hnd2ApufZKtkvfqzgBiv00o+huyALXknZ vVQPQy76tMMVpWEg0gNinu7X9NrAfpuoPbFacxyzOVL2YlezZ/72Kcg6bmRib9kSPySkCMDjcSQ = X-Google-Smtp-Source: AGHT+IFNSXKhTjNPopEgrBnDWo98qLA1DR2sonPJKag3KcUKtT0bl/mkZiZsBPqQEuWwT7WklHnpPA== X-Received: by 2002:a05:6a20:3d84:b0:1b6:e885:1bb4 with SMTP id adf61e73a8af0-1bae7f30cd4mr12933946637.37.1718670976149; Mon, 17 Jun 2024 17:36:16 -0700 (PDT) Received: from dianders.sjc.corp.google.com ([2620:15c:9d:2:1798:e71b:11ad:8b94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-705ccb99f4dsm7905917b3a.216.2024.06.17.17.36.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Jun 2024 17:36:14 -0700 (PDT) From: Douglas Anderson To: Daniel Thompson Cc: kgdb-bugreport@lists.sourceforge.net, Douglas Anderson , Christophe JAILLET , Jason Wessel , Thorsten Blum , Yuran Pereira , linux-kernel@vger.kernel.org Subject: [PATCH 05/13] kdb: Separate out "mdr" handling Date: Mon, 17 Jun 2024 17:34:39 -0700 Message-ID: <20240617173426.5.I2d17f61d496641d28c778be587b36d138a211e50@changeid> X-Mailer: git-send-email 2.45.2.627.g7a2c4fd464-goog In-Reply-To: <20240618003546.4144638-1-dianders@chromium.org> References: <20240618003546.4144638-1-dianders@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Though the "mdr" has a similar purpose to the other "md" commands in that they all display memory, the actual code to implement it has almost nothing in common with the rest of the commands. Separate things out. Signed-off-by: Douglas Anderson Reviewed-by: Daniel Thompson --- kernel/debug/kdb/kdb_main.c | 65 ++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index 74db5c0cc5ad..c013b014a7d3 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c @@ -1480,23 +1480,42 @@ int kdb_main_loop(kdb_reason_t reason, kdb_reason_t= reason2, int error, /* * kdb_mdr - This function implements the guts of the 'mdr', memory * read command. - * mdr , - * Inputs: - * addr Start address - * count Number of bytes - * Returns: - * Always 0. Any errors are detected and printed by kdb_getarea. + * mdr */ -static int kdb_mdr(unsigned long addr, unsigned int count) +static int kdb_mdr(int argc, const char **argv) { + static unsigned long addr; + static unsigned long count; unsigned char c; - while (count--) { + unsigned long i; + int diag; + + /* + * Parse args. The only valid options are argc =3D=3D 2 (both address and + * byte_count provided) and argc =3D=3D 0 ("repeat" AKA continue previous + * display). + */ + if (argc =3D=3D 2) { + int nextarg =3D 1; + + diag =3D kdbgetaddrarg(argc, argv, &nextarg, &addr); + if (diag) + return diag; + diag =3D kdbgetularg(argv[nextarg], &count); + if (diag) + return diag; + } else if (argc !=3D 0) { + return KDB_ARGCOUNT; + } + + for (i =3D 0; i < count; i++) { if (kdb_getarea(c, addr)) return 0; kdb_printf("%02x", c); addr++; } kdb_printf("\n"); + return 0; } =20 @@ -1582,7 +1601,6 @@ static int kdb_md(int argc, const char **argv) bool symbolic =3D false; bool valid =3D false; bool phys =3D false; - bool raw =3D false; =20 kdbgetintenv("MDCOUNT", &mdcount); kdbgetintenv("RADIX", &radix); @@ -1591,12 +1609,7 @@ static int kdb_md(int argc, const char **argv) /* Assume 'md ' and start with environment values */ repeat =3D mdcount * 16 / bytesperword; =20 - if (strcmp(argv[0], "mdr") =3D=3D 0) { - if (argc =3D=3D 2 || (argc =3D=3D 0 && last_addr !=3D 0)) - valid =3D raw =3D true; - else - return KDB_ARGCOUNT; - } else if (isdigit(argv[0][2])) { + if (isdigit(argv[0][2])) { bytesperword =3D (int)(argv[0][2] - '0'); if (bytesperword =3D=3D 0) { bytesperword =3D last_bytesperword; @@ -1631,10 +1644,7 @@ static int kdb_md(int argc, const char **argv) radix =3D last_radix; bytesperword =3D last_bytesperword; repeat =3D last_repeat; - if (raw) - mdcount =3D repeat; - else - mdcount =3D ((repeat * bytesperword) + 15) / 16; + mdcount =3D ((repeat * bytesperword) + 15) / 16; } =20 if (argc) { @@ -1650,10 +1660,7 @@ static int kdb_md(int argc, const char **argv) diag =3D kdbgetularg(argv[nextarg], &val); if (!diag) { mdcount =3D (int) val; - if (raw) - repeat =3D mdcount; - else - repeat =3D mdcount * 16 / bytesperword; + repeat =3D mdcount * 16 / bytesperword; } } if (argc >=3D nextarg+1) { @@ -1663,16 +1670,6 @@ static int kdb_md(int argc, const char **argv) } } =20 - if (strcmp(argv[0], "mdr") =3D=3D 0) { - int ret; - last_addr =3D addr; - ret =3D kdb_mdr(addr, mdcount); - last_addr +=3D mdcount; - last_repeat =3D mdcount; - last_bytesperword =3D bytesperword; // to make REPEAT happy - return ret; - } - switch (radix) { case 10: fmtchar =3D 'd'; @@ -2680,7 +2677,7 @@ static kdbtab_t maintab[] =3D { .flags =3D KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS, }, { .name =3D "mdr", - .func =3D kdb_md, + .func =3D kdb_mdr, .usage =3D " ", .help =3D "Display RAM as a stream of raw bytes", .flags =3D KDB_ENABLE_MEM_READ | KDB_REPEAT_NO_ARGS, --=20 2.45.2.627.g7a2c4fd464-goog