From nobody Sun Jul 26 10:12:23 2026 Delivered-To: importer@patchew.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=igalia.com ARC-Seal: i=1; a=rsa-sha256; t=1784840390; cv=none; d=zohomail.com; s=zohoarc; b=HcGUPP0WTX2bDEBlFPAroUkdkFiTJirQKZ29897Bsgu+iBPh4rbHxB/D37I+8ihOym8L8pRplJ9OOWscudThme0bM7zHleYbdksgQKKmtiEOxzz36AwASiIgD5DgZ1TefHuq383GF0jqP4Vy9zs8/Td4yrTg1Icr78QVJNscnik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1784840390; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7pal3GqZZpa5LcVXJJ4SKlsAffqFeeW8BFng5xdHbgQ=; b=YXBxBF/0KhT3JUf1TPEHBJ6cwu+p6vuT4FeJwV5XPEw3M0vO+0syD1HVSJsDiOk5rVVMZJNxU0XSHEjOGDTf6HvfU8dMxQlN7ZRQ0aAEtTxfXXG5XAnquunU3m5nkV8w1CMLNzIyza+tfjcK/x2aTlQzzlGMK1HV7AswjpP5ykA= 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) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1784840389051587.6995233734166; Thu, 23 Jul 2026 13:59:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wn0Vf-0006HF-VS; Thu, 23 Jul 2026 16:59:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wn0Vd-0006F8-Jv; Thu, 23 Jul 2026 16:59:13 -0400 Received: from fanzine2.igalia.com ([213.97.179.56]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wn0Vb-0003yy-6n; Thu, 23 Jul 2026 16:59:13 -0400 Received: from 87.pool92-176-6.dynamic.orange.es ([92.176.6.87] helo=perseus.local) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1wn0VN-003bWH-KU; Thu, 23 Jul 2026 22:58:57 +0200 Received: from berto by perseus.local with local (Exim 4.98.2) (envelope-from ) id 1wn0VM-00000000Zei-2caA; Thu, 23 Jul 2026 22:58:56 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:From:Reply-To; bh=7pal3GqZZpa5LcVXJJ4SKlsAffqFeeW8BFng5xdHbgQ=; b= fJhc+xRiZvUV1IlsyrZ6cJiYVG/5J4tnZ7W5vqibIROLv5u2p7AxFxT1bBlMsRA/bPrKBNEVbbmQ0 /blgNtibCW+n5ULBUOCE4wUTQYko7QmYe+uNNRWZw1BS+oP5IJhwIlUh0SF7Sh2qe4GbS9vyZMb6l fn8s3LksvQ/O0IIJ8bLu9n1TdLU9Xs1RcahlAD+Zm9toLI+/HL3BpSMdpkYZJCI3V+uK4ZL0qQf9P tOXqZc2LnC5NCdxa2/cdfYf+lTd9oOPHkRhlBLPcStKaTck1fMgokY9LNsgmki87vUGLZwUBXTKuF qzEMVbFTEXe3RX5om5MnvXZ26OhdnJhPIA==; From: Alberto Garcia To: qemu-devel@nongnu.org Cc: Alberto Garcia , qemu-block@nongnu.org, Bin Meng , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Jan Kiszka , qemu-stable@nongnu.org Subject: [PATCH] hw/sd/sdcard: Register device ops in drives without media Date: Thu, 23 Jul 2026 22:58:39 +0200 Message-ID: <20260723205847.137001-1-berto@igalia.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=213.97.179.56; envelope-from=berto@igalia.com; helo=fanzine2.igalia.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @igalia.com) X-ZM-MESSAGEID: 1784840398803158500 Content-Type: text/plain; charset="utf-8" Commit a362b19a39 ("hw/sd/sdcard: Fix size check for backing block image") accidentally moved the blk_set_dev_ops() call into the new 'if (blk_size >=3D 0)' block in sd_realize(). Because of that, if a drive is attached without a medium then the condition is false (blk_size =3D=3D -ENOMEDIUM) and blk_set_dev_ops() is never called, so the drive is registered as having non-removable media: $QEMU -device sd-card,drive=3Dsdcard0 -drive if=3Dnone,id=3Dsdcard0 (qemu) change sdcard0 sd-card.qcow2 Error: Device 'sdcard0' is not removable This patch moves the blk_set_perm() and blk_set_dev_ops() calls outside of the 'if (blk_size >=3D 0)' block so the device ops and permissions are registered when a drive is attached. Fixes: a362b19a39 ("hw/sd/sdcard: Fix size check for backing block image") Signed-off-by: Alberto Garcia --- hw/sd/sd.c | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/hw/sd/sd.c b/hw/sd/sd.c index a30c541df0..780e9f6295 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -3100,7 +3100,6 @@ static void sd_blk_size_error(SDState *sd, int64_t bl= k_size, static void sd_realize(DeviceState *dev, Error **errp) { SDState *sd =3D SDMMC_COMMON(dev); - int64_t blk_size =3D -ENOMEDIUM; int ret; =20 switch (sd->spec_version) { @@ -3118,32 +3117,32 @@ static void sd_realize(DeviceState *dev, Error **er= rp) return; } =20 - blk_size =3D blk_getlength(sd->blk); - } - if (blk_size >=3D 0) { - blk_size -=3D sd->boot_part_size * 2 + sd->rpmb_part_size; - if (blk_size > SDSC_MAX_CAPACITY) { - if (sd_is_emmc(sd) && - !QEMU_IS_ALIGNED(blk_size, 1 << HWBLOCK_SHIFT)) { - int64_t blk_size_aligned =3D - ((blk_size >> HWBLOCK_SHIFT) + 1) << HWBLOCK_SHIFT; - sd_blk_size_error(sd, blk_size, blk_size_aligned, - "multiples of 512", errp); + int64_t blk_size =3D blk_getlength(sd->blk); + if (blk_size >=3D 0) { + blk_size -=3D sd->boot_part_size * 2 + sd->rpmb_part_size; + if (blk_size > SDSC_MAX_CAPACITY) { + if (sd_is_emmc(sd) && + !QEMU_IS_ALIGNED(blk_size, 1 << HWBLOCK_SHIFT)) { + int64_t blk_size_aligned =3D + ((blk_size >> HWBLOCK_SHIFT) + 1) << HWBLOCK_SHIFT; + sd_blk_size_error(sd, blk_size, blk_size_aligned, + "multiples of 512", errp); + return; + } else if (!sd_is_emmc(sd) && + !QEMU_IS_ALIGNED(blk_size, 512 * KiB)) { + int64_t blk_size_aligned =3D ((blk_size >> 19) + 1) <<= 19; + sd_blk_size_error(sd, blk_size, blk_size_aligned, + "multiples of 512K", errp); + return; + } + } else if (blk_size > 0 && !is_power_of_2(blk_size)) { + sd_blk_size_error(sd, blk_size, pow2ceil(blk_size), + "a power of 2", errp); return; - } else if (!sd_is_emmc(sd) && - !QEMU_IS_ALIGNED(blk_size, 512 * KiB)) { - int64_t blk_size_aligned =3D ((blk_size >> 19) + 1) << 19; - sd_blk_size_error(sd, blk_size, blk_size_aligned, - "multiples of 512K", errp); + } else if (blk_size < 0) { + error_setg(errp, "eMMC image smaller than boot partitions"= ); return; } - } else if (blk_size > 0 && !is_power_of_2(blk_size)) { - sd_blk_size_error(sd, blk_size, pow2ceil(blk_size), "a power o= f 2", - errp); - return; - } else if (blk_size < 0) { - error_setg(errp, "eMMC image smaller than boot partitions"); - return; } =20 ret =3D blk_set_perm(sd->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_= WRITE, --=20 2.47.3