From nobody Mon Feb 9 08:11:49 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597943008; cv=none; d=zohomail.com; s=zohoarc; b=LGw27dzE7DIvkzknX+Qf2doaW2AstaWnzNoBW0Yf5BjqumD/ig6TCKXUgBj2wWAf2tZxgQSKhd+KrfAuxWYmDhJBWNjib8d/Uve6yxXocH+PKJ+3aGW+6VOOHNY3mhpL9HUfXmvMODN8TjeQa6flXBovQtEIWowdvFgHYzCu7ho= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597943008; h=Content-Type: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=CGQmSUZkaMTSA5n136vQxwh8WIRKspK6NFocfmUCdbc=; b=DMXUmOLMORkCcxg+j0Dx3bt38pxOqUBAhl6l3OIKu8sKmwlKuGuC0NGwp/UqWQCyb3uXcJwwhxDMByeCYQs2dHKlF3iI31Trjh1GuGjBTcMSazVer/oIvBqo4bSVgbqMU8b5eUsf66UxOOnDfW3tP5xS56WT++AP/vuQtNnnzGw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail 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 1597943008863405.4516630482784; Thu, 20 Aug 2020 10:03:28 -0700 (PDT) Received: from localhost ([::1]:60594 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k8nyI-0000kp-Cc for importer@patchew.org; Thu, 20 Aug 2020 13:03:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k8nuq-0004CL-KQ for qemu-devel@nongnu.org; Thu, 20 Aug 2020 12:59:52 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:27208 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k8nuo-0006En-0X for qemu-devel@nongnu.org; Thu, 20 Aug 2020 12:59:52 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-224-fCZgmUW9PuGd6hvd1rXcNw-1; Thu, 20 Aug 2020 12:59:47 -0400 Received: by mail-wr1-f71.google.com with SMTP id s23so854923wrb.12 for ; Thu, 20 Aug 2020 09:59:47 -0700 (PDT) Received: from x1w.redhat.com (121.red-81-40-121.staticip.rima-tde.net. [81.40.121.121]) by smtp.gmail.com with ESMTPSA id j5sm5539991wma.45.2020.08.20.09.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Aug 2020 09:59:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597942789; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CGQmSUZkaMTSA5n136vQxwh8WIRKspK6NFocfmUCdbc=; b=bAK+y92yvy+BPZMes51JY1PManRDBCifPjnE7ytloo+qPH7WoLbVSKrlD4v2mOTkeFZLaQ wKvCUcK4n9dz97smn7OH4QF4bFTtbqfnm+VgvKylI8AUd5AAwL0/46fPD9upTIHwt1TfRQ zcZN0XUwXQxi64aLdd+cdIHl1ZyMils= X-MC-Unique: fCZgmUW9PuGd6hvd1rXcNw-1 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=CGQmSUZkaMTSA5n136vQxwh8WIRKspK6NFocfmUCdbc=; b=MZ2t9LZPkAOrYFMo9pCOdZLj3XjW1vMyks7s2gva7yOzzs4HQz0mFAkQw0g8afz6Dk oY4Rn0DbLSmXaqyRKDIFaJ5Nf4M+qd5Vqb1eZE4I1w21EY8Fnk0kOOIWhHxfLA2JTns+ 4FdaDTd29C6VzrYsc5wPg1seEiNHdjMjYzF3cVN33VjemtQmixo0UkyHsk1QuIudcKJr +fOwrOoV5NyYCRwlVVMM7UvL/xP4uByf/ijxinAZPmEJBJ9ZtksGxfdSt50Pu8YCmtY5 KLh7PLcOzIf8AGwe3F/PlkLSGpPP8jGxBkGIO0a1cnT2IVItDDis6jQaS9/e1mfCeSRf 5MYQ== X-Gm-Message-State: AOAM5317DXFYNHbv+PvYNOFZKKK89xCVKMLQb+jW90RmJbT686QffsLJ yFgOZ1f20sOw+xwyl3i3XkVk5pclgFQ5gHLD5akahzE8hUiTKk2CiGgAVz0t+Am/SqxT13Pif3L 3Y1sAqnfxqHlg06c= X-Received: by 2002:a5d:544a:: with SMTP id w10mr4154965wrv.317.1597942786207; Thu, 20 Aug 2020 09:59:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxhLAJ3NVuCtT/npjOh2UbgEKqPgWCz10FStUVVGH1i2UiOSfLdArNqk/xdVUchZMA+PpBJkw== X-Received: by 2002:a5d:544a:: with SMTP id w10mr4154947wrv.317.1597942785937; Thu, 20 Aug 2020 09:59:45 -0700 (PDT) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Subject: [PATCH v5 08/15] block/nvme: Use union of NvmeIdCtrl / NvmeIdNs structures Date: Thu, 20 Aug 2020 18:58:54 +0200 Message-Id: <20200820165901.1139109-9-philmd@redhat.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200820165901.1139109-1-philmd@redhat.com> References: <20200820165901.1139109-1-philmd@redhat.com> MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=philmd@redhat.com X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8"; text/plain; charset="utf-8" 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=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=philmd@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/20 03:03:34 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Max Reitz , Stefan Hajnoczi , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) We allocate an unique chunk of memory then use it for two different structures. By using an union, we make it clear the data is overlapping (and we can remove the casts). Suggested-by: Stefan Hajnoczi Reviewed-by: Stefan Hajnoczi Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Stefano Garzarella --- block/nvme.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/block/nvme.c b/block/nvme.c index 99822d9fd36..2bd1935f951 100644 --- a/block/nvme.c +++ b/block/nvme.c @@ -508,9 +508,10 @@ static int nvme_cmd_sync(BlockDriverState *bs, NVMeQue= uePair *q, static void nvme_identify(BlockDriverState *bs, int namespace, Error **err= p) { BDRVNVMeState *s =3D bs->opaque; - NvmeIdCtrl *idctrl; - NvmeIdNs *idns; - uint8_t *id; + union { + NvmeIdCtrl ctrl; + NvmeIdNs ns; + } *id; NvmeLBAF *lbaf; uint16_t oncs; int r; @@ -520,14 +521,12 @@ static void nvme_identify(BlockDriverState *bs, int n= amespace, Error **errp) .cdw10 =3D cpu_to_le32(0x1), }; =20 - id =3D qemu_try_blockalign0(bs, sizeof(NvmeIdCtrl)); + id =3D qemu_try_blockalign0(bs, sizeof(*id)); if (!id) { error_setg(errp, "Cannot allocate buffer for identify response"); goto out; } - idctrl =3D (NvmeIdCtrl *)id; - idns =3D (NvmeIdNs *)id; - r =3D qemu_vfio_dma_map(s->vfio, id, sizeof(NvmeIdCtrl), true, &iova); + r =3D qemu_vfio_dma_map(s->vfio, id, sizeof(*id), true, &iova); if (r) { error_setg(errp, "Cannot map buffer for DMA"); goto out; @@ -539,22 +538,22 @@ static void nvme_identify(BlockDriverState *bs, int n= amespace, Error **errp) goto out; } =20 - if (le32_to_cpu(idctrl->nn) < namespace) { + if (le32_to_cpu(id->ctrl.nn) < namespace) { error_setg(errp, "Invalid namespace"); goto out; } - s->write_cache_supported =3D le32_to_cpu(idctrl->vwc) & 0x1; - s->max_transfer =3D (idctrl->mdts ? 1 << idctrl->mdts : 0) * s->page_s= ize; + s->write_cache_supported =3D le32_to_cpu(id->ctrl.vwc) & 0x1; + s->max_transfer =3D (id->ctrl.mdts ? 1 << id->ctrl.mdts : 0) * s->page= _size; /* For now the page list buffer per command is one page, to hold at mo= st * s->page_size / sizeof(uint64_t) entries. */ s->max_transfer =3D MIN_NON_ZERO(s->max_transfer, s->page_size / sizeof(uint64_t) * s->page_size); =20 - oncs =3D le16_to_cpu(idctrl->oncs); + oncs =3D le16_to_cpu(id->ctrl.oncs); s->supports_write_zeroes =3D !!(oncs & NVME_ONCS_WRITE_ZEROS); s->supports_discard =3D !!(oncs & NVME_ONCS_DSM); =20 - memset(id, 0, 4096); + memset(id, 0, sizeof(*id)); cmd.cdw10 =3D 0; cmd.nsid =3D cpu_to_le32(namespace); if (nvme_cmd_sync(bs, s->queues[INDEX_ADMIN], &cmd)) { @@ -562,11 +561,11 @@ static void nvme_identify(BlockDriverState *bs, int n= amespace, Error **errp) goto out; } =20 - s->nsze =3D le64_to_cpu(idns->nsze); - lbaf =3D &idns->lbaf[NVME_ID_NS_FLBAS_INDEX(idns->flbas)]; + s->nsze =3D le64_to_cpu(id->ns.nsze); + lbaf =3D &id->ns.lbaf[NVME_ID_NS_FLBAS_INDEX(id->ns.flbas)]; =20 - if (NVME_ID_NS_DLFEAT_WRITE_ZEROES(idns->dlfeat) && - NVME_ID_NS_DLFEAT_READ_BEHAVIOR(idns->dlfeat) =3D=3D + if (NVME_ID_NS_DLFEAT_WRITE_ZEROES(id->ns.dlfeat) && + NVME_ID_NS_DLFEAT_READ_BEHAVIOR(id->ns.dlfeat) =3D=3D NVME_ID_NS_DLFEAT_READ_BEHAVIOR_ZEROES) { bs->supported_write_flags |=3D BDRV_REQ_MAY_UNMAP; } --=20 2.26.2