From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223877; cv=none; d=zohomail.com; s=zohoarc; b=BrWh8dypK4eIVUZ0k42Tr7FVGF2rvaUUt4JES4ahWgvVUwdXzj7EM3FrSD/lsomItfxCh8B/Pou5ZR44z/xgJxQX6KIFAPt+t/NET/a7IH4vJFDaB3Jynh+WFtx9BlBjtKRj9V5rdQ8YJq3jmST/Xrkt/VgZ9/s0QHyprzbJtgM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223877; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BBW8WbUFR4gnrOZqzZgD7PhLGdk2+fKeQfMfJLB6Eho=; b=aZ1+lMC5m+ybrhlevTg16lgqfKztGYc/X6V/hX262CGdcYvnzkRPgIowVBZVk6iCZTl89HJ8kPaf8miDMxlP6aafmJ0+428UA2mTqSEPRyZheP3keqRNIgnzIeT1odhvwf/e/tuaPapQBuSofPKNIDpzYCh3SDnnOdcCE17T/rU= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223877107876.8619959202836; Wed, 14 May 2025 04:57:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAd8-0005pC-2y; Wed, 14 May 2025 07:50:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd4-0005ok-Qd for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd0-00061n-K0 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:30 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-56-YvTd4TJcMku7iDKIZKU6jg-1; Wed, 14 May 2025 07:50:23 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-442dc702850so27685335e9.1 for ; Wed, 14 May 2025 04:50:22 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c76dsm19679654f8f.92.2025.05.14.04.50.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223424; 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: in-reply-to:in-reply-to:references:references; bh=BBW8WbUFR4gnrOZqzZgD7PhLGdk2+fKeQfMfJLB6Eho=; b=MgxVN3muwGpYb2xJMtQvTz+mDHPE3NxsqleMnayOyTlsiOCavJJNBkhb1XpP4qRZ/DNu56 4v7cvGLRN/+vXylSSzJ/eSDl/H2enWX4IUcw6LFOg9uzDcbIRg8He9nzt0+enyh7ZPsmvl Lg5rLRXJjw1yvdJ8qE8JfkhX4dLx67E= X-MC-Unique: YvTd4TJcMku7iDKIZKU6jg-1 X-Mimecast-MFC-AGG-ID: YvTd4TJcMku7iDKIZKU6jg_1747223422 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223421; x=1747828221; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BBW8WbUFR4gnrOZqzZgD7PhLGdk2+fKeQfMfJLB6Eho=; b=G89KeULel3eiANnStt5lT0MkHwH/qCEOBZ1p75EjK6TuUJHtro4VzFjsBOH9pqa4kK FIdmygzPXhgeFJsltd3014fA8y9byF8AwgJG4OUKupWzrfa8EckEIPWeq2ci8aq6sx5D A2sVgOIUD6KPwZmzbg9B1ph6IZm5o1sXJD3f1tjoBlFGYwxMI7EKJ8BWIgqxdEPwQ9Af rb8Vxl8JdLmoWJT1pjoVwMgSYgz2rM9siwh1OuuDLdrOEH1Ctf2ZM1a6d4myJg1ZGQ/R E7/CQ4EZSOxxatkKwms+OvbAoUhpuL+wdZcI06qD0K+r+TW1YJnwtcOJMe5PPeZRxsow 5j9g== X-Gm-Message-State: AOJu0YzxNYw9dWc2zNuPGUOpPX21+BKUG3+jGOO4VmFl/X4bgeca3vcN mubor4kBRaQA43ZDTL00Ov9Hr/owxemPvCJlDhNL2o6qBHEXWy5pE/AEopgoJ9eJqXhF05VY0ND pQmjIg0wGc5BWM5m2yz7zncY+Z1MBh3bNz6SsbHSM+VmjuKUuI2ExqcNyU78WNvY3HFnYP8OR+L OH5IaKNnCItZUeo0UhD6pPq8KYO80WsQ== X-Gm-Gg: ASbGncvFRC6JNuDGkEcAxM8uaifqWFlt1Ka+biMaDZ7OQWLq8sKmpRpxaNIqjVaMkey yZOfqH4/m4tc7XFu8fedpEanB6TAVH1M7sWMERwZQmqetSbGS7mtIUnFaXnjyU0V0oW2M+gwUP/ LGDIOE2LprCovK/I90u6jVYDUnPZc+g3E/fQCzYRMYt8wxZRklr+6LgVWSILFEAMhWZOKfx379r 1TAzX2ipsHkk+wzcOTgt8V6kmibonEKIjnY7gx27cb5Pr16xdkZJf8GwFxSht34xreY1+wmfjLq w7iVpA== X-Received: by 2002:a05:6000:188c:b0:3a0:a09d:b31e with SMTP id ffacd0b85a97d-3a34994f2e1mr2786368f8f.59.1747223421114; Wed, 14 May 2025 04:50:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFlQe3Ojdw/4K8VFxyH3/+GSiDlQB432lywk9oxr6sFMlPp8j1JpNt+e8IzR6KoCo3Ob8bGJQ== X-Received: by 2002:a05:6000:188c:b0:3a0:a09d:b31e with SMTP id ffacd0b85a97d-3a34994f2e1mr2786331f8f.59.1747223420602; Wed, 14 May 2025 04:50:20 -0700 (PDT) Date: Wed, 14 May 2025 07:50:18 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Ajay Joshi , Jonathan Cameron , Fan Ni Subject: [PULL 01/27] hw/cxl: Support aborting background commands Message-ID: <98cbac128f1c38fa62becf5b89bc662c9218a780.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223878751116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso As of 3.1 spec, background commands can be canceled with a new abort command. Implement the support, which is advertised in the CEL. No ad-hoc context undoing is necessary as all the command logic of the running bg command is done upon completion. Arbitrarily, the on-going background cmd will not be aborted if already at least 85% done; A mutex is introduced to stabilize mbox request cancel command vs the timer callback being fired scenarios (as well as reading the mbox registers). While some operations under critical regions may be unnecessary (irq notifying, cmd callbacks), this is not a path where performance is important, so simplicity is preferred. Tested-by: Ajay Joshi Reviewed-by: Ajay Joshi Signed-off-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-2-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/cxl/cxl_device.h | 4 ++ include/hw/cxl/cxl_mailbox.h | 1 + hw/cxl/cxl-device-utils.c | 14 ++++--- hw/cxl/cxl-mailbox-utils.c | 72 ++++++++++++++++++++++++++++++++---- hw/mem/cxl_type3.c | 8 +++- 5 files changed, 86 insertions(+), 13 deletions(-) diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 3a0ee7e8e7..d21695507f 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -176,10 +176,12 @@ typedef struct CXLCCI { uint16_t opcode; uint16_t complete_pct; uint16_t ret_code; /* Current value of retcode */ + bool aborted; uint64_t starttime; /* set by each bg cmd, cleared by the bg_timer when complete */ uint64_t runtime; QEMUTimer *timer; + QemuMutex lock; /* serializes mbox abort vs timer cb */ } bg; =20 /* firmware update */ @@ -201,6 +203,7 @@ typedef struct CXLCCI { DeviceState *d; /* Pointer to the device hosting the protocol conversion */ DeviceState *intf; + bool initialized; } CXLCCI; =20 typedef struct cxl_device_state { @@ -316,6 +319,7 @@ void cxl_initialize_mailbox_t3(CXLCCI *cci, DeviceState= *d, size_t payload_max); void cxl_initialize_mailbox_swcci(CXLCCI *cci, DeviceState *intf, DeviceState *d, size_t payload_max); void cxl_init_cci(CXLCCI *cci, size_t payload_max); +void cxl_destroy_cci(CXLCCI *cci); void cxl_add_cci_commands(CXLCCI *cci, const struct cxl_cmd (*cxl_cmd_set)= [256], size_t payload_max); int cxl_process_cci_message(CXLCCI *cci, uint8_t set, uint8_t cmd, diff --git a/include/hw/cxl/cxl_mailbox.h b/include/hw/cxl/cxl_mailbox.h index beb048052e..9008402d1c 100644 --- a/include/hw/cxl/cxl_mailbox.h +++ b/include/hw/cxl/cxl_mailbox.h @@ -14,5 +14,6 @@ #define CXL_MBOX_IMMEDIATE_LOG_CHANGE (1 << 4) #define CXL_MBOX_SECURITY_STATE_CHANGE (1 << 5) #define CXL_MBOX_BACKGROUND_OPERATION (1 << 6) +#define CXL_MBOX_BACKGROUND_OPERATION_ABORT (1 << 7) =20 #endif diff --git a/hw/cxl/cxl-device-utils.c b/hw/cxl/cxl-device-utils.c index 52ad1e4c3f..e150d74457 100644 --- a/hw/cxl/cxl-device-utils.c +++ b/hw/cxl/cxl-device-utils.c @@ -95,11 +95,15 @@ static uint64_t mailbox_reg_read(void *opaque, hwaddr o= ffset, unsigned size) } if (offset =3D=3D A_CXL_DEV_MAILBOX_STS) { uint64_t status_reg =3D cxl_dstate->mbox_reg_state64[offset / = size]; - if (cci->bg.complete_pct) { - status_reg =3D FIELD_DP64(status_reg, CXL_DEV_MAILBOX_STS,= BG_OP, - 0); - cxl_dstate->mbox_reg_state64[offset / size] =3D status_reg; - } + int bgop; + + qemu_mutex_lock(&cci->bg.lock); + bgop =3D !(cci->bg.complete_pct =3D=3D 100 || cci->bg.aborted); + + status_reg =3D FIELD_DP64(status_reg, CXL_DEV_MAILBOX_STS, BG_= OP, + bgop); + cxl_dstate->mbox_reg_state64[offset / size] =3D status_reg; + qemu_mutex_unlock(&cci->bg.lock); } return cxl_dstate->mbox_reg_state64[offset / size]; default: diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 516c01d840..4401f446d9 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -56,6 +56,7 @@ enum { INFOSTAT =3D 0x00, #define IS_IDENTIFY 0x1 #define BACKGROUND_OPERATION_STATUS 0x2 + #define BACKGROUND_OPERATION_ABORT 0x5 EVENTS =3D 0x01, #define GET_RECORDS 0x0 #define CLEAR_RECORDS 0x1 @@ -636,6 +637,41 @@ static CXLRetCode cmd_infostat_bg_op_sts(const struct = cxl_cmd *cmd, return CXL_MBOX_SUCCESS; } =20 +/* + * CXL r3.1 Section 8.2.9.1.5: + * Request Abort Background Operation (Opcode 0005h) + */ +static CXLRetCode cmd_infostat_bg_op_abort(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + int bg_set =3D cci->bg.opcode >> 8; + int bg_cmd =3D cci->bg.opcode & 0xff; + const struct cxl_cmd *bg_c =3D &cci->cxl_cmd_set[bg_set][bg_cmd]; + + if (!(bg_c->effect & CXL_MBOX_BACKGROUND_OPERATION_ABORT)) { + return CXL_MBOX_REQUEST_ABORT_NOTSUP; + } + + qemu_mutex_lock(&cci->bg.lock); + if (cci->bg.runtime) { + /* operation is near complete, let it finish */ + if (cci->bg.complete_pct < 85) { + timer_del(cci->bg.timer); + cci->bg.ret_code =3D CXL_MBOX_ABORTED; + cci->bg.starttime =3D 0; + cci->bg.runtime =3D 0; + cci->bg.aborted =3D true; + } + } + qemu_mutex_unlock(&cci->bg.lock); + + return CXL_MBOX_SUCCESS; +} + #define CXL_FW_SLOTS 2 #define CXL_FW_SIZE 0x02000000 /* 32 mb */ =20 @@ -2715,6 +2751,8 @@ static CXLRetCode cmd_dcd_release_dyn_cap(const struc= t cxl_cmd *cmd, } =20 static const struct cxl_cmd cxl_cmd_set[256][256] =3D { + [INFOSTAT][BACKGROUND_OPERATION_ABORT] =3D { "BACKGROUND_OPERATION_ABO= RT", + cmd_infostat_bg_op_abort, 0, 0 }, [EVENTS][GET_RECORDS] =3D { "EVENTS_GET_RECORDS", cmd_events_get_records, 1, 0 }, [EVENTS][CLEAR_RECORDS] =3D { "EVENTS_CLEAR_RECORDS", @@ -2727,9 +2765,11 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = =3D { [FIRMWARE_UPDATE][GET_INFO] =3D { "FIRMWARE_UPDATE_GET_INFO", cmd_firmware_update_get_info, 0, 0 }, [FIRMWARE_UPDATE][TRANSFER] =3D { "FIRMWARE_UPDATE_TRANSFER", - cmd_firmware_update_transfer, ~0, CXL_MBOX_BACKGROUND_OPERATION }, + cmd_firmware_update_transfer, ~0, + CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABOR= T }, [FIRMWARE_UPDATE][ACTIVATE] =3D { "FIRMWARE_UPDATE_ACTIVATE", - cmd_firmware_update_activate, 2, CXL_MBOX_BACKGROUND_OPERATION }, + cmd_firmware_update_activate, 2, + CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABOR= T }, [TIMESTAMP][GET] =3D { "TIMESTAMP_GET", cmd_timestamp_get, 0, 0 }, [TIMESTAMP][SET] =3D { "TIMESTAMP_SET", cmd_timestamp_set, 8, CXL_MBOX_IMMEDIATE_POLICY_CHANGE }, @@ -2758,7 +2798,8 @@ static const struct cxl_cmd cxl_cmd_set[256][256] =3D= { [SANITIZE][OVERWRITE] =3D { "SANITIZE_OVERWRITE", cmd_sanitize_overwri= te, 0, (CXL_MBOX_IMMEDIATE_DATA_CHANGE | CXL_MBOX_SECURITY_STATE_CHANGE | - CXL_MBOX_BACKGROUND_OPERATION)}, + CXL_MBOX_BACKGROUND_OPERATION | + CXL_MBOX_BACKGROUND_OPERATION_ABORT)}, [PERSISTENT_MEM][GET_SECURITY_STATE] =3D { "GET_SECURITY_STATE", cmd_get_security_state, 0, 0 }, [MEDIA_AND_POISON][GET_POISON_LIST] =3D { "MEDIA_AND_POISON_GET_POISON= _LIST", @@ -2771,7 +2812,8 @@ static const struct cxl_cmd cxl_cmd_set[256][256] =3D= { "MEDIA_AND_POISON_GET_SCAN_MEDIA_CAPABILITIES", cmd_media_get_scan_media_capabilities, 16, 0 }, [MEDIA_AND_POISON][SCAN_MEDIA] =3D { "MEDIA_AND_POISON_SCAN_MEDIA", - cmd_media_scan_media, 17, CXL_MBOX_BACKGROUND_OPERATION }, + cmd_media_scan_media, 17, + (CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABO= RT)}, [MEDIA_AND_POISON][GET_SCAN_MEDIA_RESULTS] =3D { "MEDIA_AND_POISON_GET_SCAN_MEDIA_RESULTS", cmd_media_get_scan_media_results, 0, 0 }, @@ -2795,6 +2837,8 @@ static const struct cxl_cmd cxl_cmd_set_sw[256][256] = =3D { [INFOSTAT][IS_IDENTIFY] =3D { "IDENTIFY", cmd_infostat_identify, 0, 0 = }, [INFOSTAT][BACKGROUND_OPERATION_STATUS] =3D { "BACKGROUND_OPERATION_ST= ATUS", cmd_infostat_bg_op_sts, 0, 0 }, + [INFOSTAT][BACKGROUND_OPERATION_ABORT] =3D { "BACKGROUND_OPERATION_ABO= RT", + cmd_infostat_bg_op_abort, 0, 0 }, [TIMESTAMP][GET] =3D { "TIMESTAMP_GET", cmd_timestamp_get, 0, 0 }, [TIMESTAMP][SET] =3D { "TIMESTAMP_SET", cmd_timestamp_set, 8, CXL_MBOX_IMMEDIATE_POLICY_CHANGE }, @@ -2881,6 +2925,7 @@ int cxl_process_cci_message(CXLCCI *cci, uint8_t set,= uint8_t cmd, cci->bg.opcode =3D (set << 8) | cmd; =20 cci->bg.complete_pct =3D 0; + cci->bg.aborted =3D false; cci->bg.ret_code =3D 0; =20 now =3D qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); @@ -2894,10 +2939,12 @@ int cxl_process_cci_message(CXLCCI *cci, uint8_t se= t, uint8_t cmd, static void bg_timercb(void *opaque) { CXLCCI *cci =3D opaque; - uint64_t now =3D qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); - uint64_t total_time =3D cci->bg.starttime + cci->bg.runtime; + uint64_t now, total_time; =20 - assert(cci->bg.runtime > 0); + qemu_mutex_lock(&cci->bg.lock); + + now =3D qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); + total_time =3D cci->bg.starttime + cci->bg.runtime; =20 if (now >=3D total_time) { /* we are done */ uint16_t ret =3D CXL_MBOX_SUCCESS; @@ -2950,6 +2997,8 @@ static void bg_timercb(void *opaque) msi_notify(pdev, cxl_dstate->mbox_msi_n); } } + + qemu_mutex_unlock(&cci->bg.lock); } =20 static void cxl_rebuild_cel(CXLCCI *cci) @@ -2978,12 +3027,21 @@ void cxl_init_cci(CXLCCI *cci, size_t payload_max) cci->bg.complete_pct =3D 0; cci->bg.starttime =3D 0; cci->bg.runtime =3D 0; + cci->bg.aborted =3D false; cci->bg.timer =3D timer_new_ms(QEMU_CLOCK_VIRTUAL, bg_timercb, cci); + qemu_mutex_init(&cci->bg.lock); =20 memset(&cci->fw, 0, sizeof(cci->fw)); cci->fw.active_slot =3D 1; cci->fw.slot[cci->fw.active_slot - 1] =3D true; + cci->initialized =3D true; +} + +void cxl_destroy_cci(CXLCCI *cci) +{ + qemu_mutex_destroy(&cci->bg.lock); + cci->initialized =3D false; } =20 static void cxl_copy_cci_commands(CXLCCI *cci, const struct cxl_cmd (*cxl_= cmds)[256]) diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index bba923f8ea..aacd078118 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -969,6 +969,7 @@ static void ct3_exit(PCIDevice *pci_dev) cxl_doe_cdat_release(cxl_cstate); msix_uninit_exclusive_bar(pci_dev); g_free(regs->special_ops); + cxl_destroy_cci(&ct3d->cci); if (ct3d->dc.host_dc) { cxl_destroy_dc_regions(ct3d); address_space_destroy(&ct3d->dc.host_dc_as); @@ -1224,12 +1225,17 @@ static void ct3d_reset(DeviceState *dev) * Bring up an endpoint to target with MCTP over VDM. * This device is emulating an MLD with single LD for now. */ + if (ct3d->vdm_fm_owned_ld_mctp_cci.initialized) { + cxl_destroy_cci(&ct3d->vdm_fm_owned_ld_mctp_cci); + } cxl_initialize_t3_fm_owned_ld_mctpcci(&ct3d->vdm_fm_owned_ld_mctp_cci, DEVICE(ct3d), DEVICE(ct3d), 512); /* Max payload made up */ + if (ct3d->ld0_cci.initialized) { + cxl_destroy_cci(&ct3d->ld0_cci); + } cxl_initialize_t3_ld_cci(&ct3d->ld0_cci, DEVICE(ct3d), DEVICE(ct3d), 512); /* Max payload made up */ - } =20 static const Property ct3_props[] =3D { --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223771; cv=none; d=zohomail.com; s=zohoarc; b=NH0yKYPbJMQSYL2J2lSNbjiv80r3w7aNwirDnELJET8SlVusyyr2Cr2Q3ms3pDaTci2nRxI/EbbU8LdpqRroGHZ7qrBMKR30UvhjYnE0fDrgMu02BYax9Hfy3gbCC4k/PS8mMg2kPjSHUQ+a0CSg2iN2JUAqMmtqyNRk9sYsxEo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223771; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=o3VTGXmHpKQX+xxI8x7d0AGiDNhIqUOHSWtPCL/LLDE=; b=Ool+JjVCJs2ULvQ6NXDldrMJkZXtqL9LAHp29y/mlV+Cub2vS8kV+fRNb7aN1/ST1ltkiZU5WTqxkcs1IzRE3bGY7XqxkwFbH835zom/lmI++MNFJjicFNqy98ykrXHsvqb9rLlo6mqnvCVwhAI8DdL7h5bmEPUdYoGfkSJYUS8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223771053594.1306805594314; Wed, 14 May 2025 04:56:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAd8-0005pF-5P; Wed, 14 May 2025 07:50:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd5-0005ol-57 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd2-00062K-1n for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:30 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-302-GDDmSUsoPj6v1J6Yprl72Q-1; Wed, 14 May 2025 07:50:24 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-43cf44b66f7so39046575e9.1 for ; Wed, 14 May 2025 04:50:24 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442ebda7d2csm34609005e9.3.2025.05.14.04.50.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223425; 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: in-reply-to:in-reply-to:references:references; bh=o3VTGXmHpKQX+xxI8x7d0AGiDNhIqUOHSWtPCL/LLDE=; b=MuFG+r3Y2+kKDnQnsZ9C0m0E5wf71ppSyEio9j62wd9kwBFcgFzD2lBaGV5URAUnuchZrd WPPh7b3rc8qKjU5h9UVLR9e3SSHFWVI0k+vLscQo/gt1AFfbhNOtFDOh2CGv9pizSLX8te EVWIV+HC4+lsp5QkABkALuB9Ng1mq1g= X-MC-Unique: GDDmSUsoPj6v1J6Yprl72Q-1 X-Mimecast-MFC-AGG-ID: GDDmSUsoPj6v1J6Yprl72Q_1747223424 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223423; x=1747828223; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=o3VTGXmHpKQX+xxI8x7d0AGiDNhIqUOHSWtPCL/LLDE=; b=mHh6dsLPmeGY6qTpxGXE28NRR6MFVxV3oqZHv3o/UI25YQc9jUYO61HerAOaDkpcKS vrxRuAujdY3vPDUibDm7Pg0ndkdYATlx3881xsmfv4vfBYo7+8pn07E2SKuFgavcX2EH O6dnl/Pl1Isq2GOzXF8SiORxtXojHObEDMhKntt84SG7QFd9Qw+LO9iz9joQITP4+Xae pWrvvKLceFXW9qeol1+J1DQHuzC7wUUthKX5rD80h6D3CGIo3FpUaZPZx2yQ9K568y5t zSATVJUeKhCyBm3KeToDHAJSxHfapAkTcwAktTkOpbFqZfxT7qjnxvn05ffavFq42Gkc c/Gg== X-Gm-Message-State: AOJu0Yz3flsGhCq8UujW+oCOg2knfoU1AXiIX7GyLfAA1Jti9q+3M3bi StIlUijRDKNcCbYA5JKz/tt9EEvRItqFErfevxxwqKTzhhhrFaN4sgkXWHEUIzmRaAlGO4BlqLa IRe9XQvYx3/KqeZ8y+vcvs9XPRkfZIFoCs+43FD8xxc/pPFks2rfVF0PD+7czChj4NDmLKL1RCY cLu871GV6ED7RnGgbV4qd8KUAjsE7EeQ== X-Gm-Gg: ASbGncvvLW8Ef9svUj+/dVETJvYsE+kGGh600Rpf5ZArE7o/Or5uXl1tQJv2nENa8d7 dVSjWPXPBmqailo6wgqW4sihxSS4sdcBczoEZcQmjcg6nlZQhzgLOgMUUp8c+T9scjocx+pGEgu JlmLnaqppWBb7/02T7ao2gWDQ/v8dZJNnml4B42rgOtcCitoxwBWHRd+rJs7mYwiAe9iXXyL9g7 LKjjLAVhgjdO6SCwkW7vYyRNvSGL9Gz280BHwSKo0jvLyHBMTOh+rTIvEmPGsVql4ia5IH1/gFT Ts9HOw== X-Received: by 2002:a05:600c:3b02:b0:442:dc75:5625 with SMTP id 5b1f17b1804b1-442f20bb658mr29380905e9.5.1747223423117; Wed, 14 May 2025 04:50:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH9OtKNXwEwIwOe42LtWVOzShCbOdu1QuoGq1FdmQpKQxfmA/JJfwXM9mHoFwLYp9tl2KXb7Q== X-Received: by 2002:a05:600c:3b02:b0:442:dc75:5625 with SMTP id 5b1f17b1804b1-442f20bb658mr29380655e9.5.1747223422736; Wed, 14 May 2025 04:50:22 -0700 (PDT) Date: Wed, 14 May 2025 07:50:20 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Fan Ni , Jonathan Cameron Subject: [PULL 02/27] hw/cxl: Support get/set mctp response payload size Message-ID: <1000158f031818bf286454c8691da9b4f33c4d02.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223771436116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso Add Get/Set Response Message Limit commands. Signed-off-by: Davidlohr Bueso Reviewed-by: Fan Ni Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-3-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/cxl/cxl-mailbox-utils.c | 58 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 4401f446d9..bd25df033a 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -7,6 +7,8 @@ * COPYING file in the top-level directory. */ =20 +#include + #include "qemu/osdep.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" @@ -56,6 +58,8 @@ enum { INFOSTAT =3D 0x00, #define IS_IDENTIFY 0x1 #define BACKGROUND_OPERATION_STATUS 0x2 + #define GET_RESPONSE_MSG_LIMIT 0x3 + #define SET_RESPONSE_MSG_LIMIT 0x4 #define BACKGROUND_OPERATION_ABORT 0x5 EVENTS =3D 0x01, #define GET_RECORDS 0x0 @@ -413,12 +417,58 @@ static CXLRetCode cmd_infostat_identify(const struct = cxl_cmd *cmd, is_identify->component_type =3D 0x3; /* Type 3 */ } =20 - /* TODO: Allow this to vary across different CCIs */ - is_identify->max_message_size =3D 9; /* 512 bytes - MCTP_CXL_MAILBOX_B= YTES */ + is_identify->max_message_size =3D (uint8_t)log2(cci->payload_max); *len_out =3D sizeof(*is_identify); return CXL_MBOX_SUCCESS; } =20 +/* CXL r3.1 section 8.2.9.1.3: Get Response Message Limit (Opcode 0003h) */ +static CXLRetCode cmd_get_response_msg_limit(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + struct { + uint8_t rsp_limit; + } QEMU_PACKED *get_rsp_msg_limit =3D (void *)payload_out; + QEMU_BUILD_BUG_ON(sizeof(*get_rsp_msg_limit) !=3D 1); + + get_rsp_msg_limit->rsp_limit =3D (uint8_t)log2(cci->payload_max); + + *len_out =3D sizeof(*get_rsp_msg_limit); + return CXL_MBOX_SUCCESS; +} + +/* CXL r3.1 section 8.2.9.1.4: Set Response Message Limit (Opcode 0004h) */ +static CXLRetCode cmd_set_response_msg_limit(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + struct { + uint8_t rsp_limit; + } QEMU_PACKED *in =3D (void *)payload_in; + QEMU_BUILD_BUG_ON(sizeof(*in) !=3D 1); + struct { + uint8_t rsp_limit; + } QEMU_PACKED *out =3D (void *)payload_out; + QEMU_BUILD_BUG_ON(sizeof(*out) !=3D 1); + + if (in->rsp_limit < 8 || in->rsp_limit > 10) { + return CXL_MBOX_INVALID_INPUT; + } + + cci->payload_max =3D 1 << in->rsp_limit; + out->rsp_limit =3D in->rsp_limit; + + *len_out =3D sizeof(*out); + return CXL_MBOX_SUCCESS; +} + static void cxl_set_dsp_active_bm(PCIBus *b, PCIDevice *d, void *private) { @@ -3105,6 +3155,10 @@ void cxl_initialize_t3_ld_cci(CXLCCI *cci, DeviceSta= te *d, DeviceState *intf, =20 static const struct cxl_cmd cxl_cmd_set_t3_fm_owned_ld_mctp[256][256] =3D { [INFOSTAT][IS_IDENTIFY] =3D { "IDENTIFY", cmd_infostat_identify, 0, 0= }, + [INFOSTAT][GET_RESPONSE_MSG_LIMIT] =3D { "GET_RESPONSE_MSG_LIMIT", + cmd_get_response_msg_limit, 0, = 0 }, + [INFOSTAT][SET_RESPONSE_MSG_LIMIT] =3D { "SET_RESPONSE_MSG_LIMIT", + cmd_set_response_msg_limit, 1, = 0 }, [LOGS][GET_SUPPORTED] =3D { "LOGS_GET_SUPPORTED", cmd_logs_get_support= ed, 0, 0 }, [LOGS][GET_LOG] =3D { "LOGS_GET_LOG", cmd_logs_get_log, 0x18, 0 }, --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223498; cv=none; d=zohomail.com; s=zohoarc; b=fJOREUHJ6jA5dZzGKoivFl+ePSVZFwuPDlHKpuAraFM62HnjtgLpVsvkXTw0084UgOnYX82RSgfxjIvcAdY13R/flEXU/SJKgZr9kd+mX/K9ElBFAry1lsEQN947MQ/HVpHMc5W87c5+GojxGKiwt3/8GojrzHFqPPqbREZ8pSc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223498; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0fJgSbXc546dwe+4Ew3aID1Zi5bepWCH2l5RAH/aT3s=; b=Il6wvdhnlA8ECgyILZXxpPTpkY9GYBZ+fZAi7IKFn4eLEacxSLR6dmfVA/UGF4DRWbsez/R6UVjkgfKL7HLsBhuc6fiIOnUTA8RoTRLdjNWG5uBp+T4h222Qd1lr7V+i8aVq4/2asXibYdVLF3FVpyyTDdJu2yvixO0+JMVkKGA= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223498988473.8703810491088; Wed, 14 May 2025 04:51:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdB-0005qU-O9; Wed, 14 May 2025 07:50:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd9-0005q2-Qp for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd6-00063Q-HV for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:35 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-547-KLdPkNfJPDWI5Ls_LoXXmg-1; Wed, 14 May 2025 07:50:27 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43d007b2c79so41300765e9.2 for ; Wed, 14 May 2025 04:50:27 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f3979275sm27340185e9.34.2025.05.14.04.50.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223428; 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: in-reply-to:in-reply-to:references:references; bh=0fJgSbXc546dwe+4Ew3aID1Zi5bepWCH2l5RAH/aT3s=; b=JRarwsNWDbuLmY6zeF2Ld5lqg2Hs13pM5rwFuqiyhqRXdwFvWsgKBUMciMr21g8e2U7pV2 t5oK4vMeS2cc9oiXdA7weoDBNO0LcGrXVvdj4m+fdFHMN/5Sn43NTqTPho1j62vmbI70fY BLulcWSd9KdC2FQEft8pfScqq+h5S0I= X-MC-Unique: KLdPkNfJPDWI5Ls_LoXXmg-1 X-Mimecast-MFC-AGG-ID: KLdPkNfJPDWI5Ls_LoXXmg_1747223426 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223425; x=1747828225; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0fJgSbXc546dwe+4Ew3aID1Zi5bepWCH2l5RAH/aT3s=; b=duOVMG/9S9R6TZi2KUYcjX+Mqmat7mhvaipY/XD3ZyFlLqECz8Lrai2pSB9hmSFfUr 7Ll9QFFqj4fl8w234Hd7/7FNZ53iTY/kDL9xQbGsm/3z/qdLV7QkEV9roDV/uR5yL303 koOtUWlj8lCCXO9rzgSfqrlDufHfYoT9jLVi6zDE4VvLLIe8HAFcknLW0/roOfwHMdTl bS8lmIgxMPcj/zt4WQK7RFR3DCc6BICX3tV6EZjckGkudk6V+zLKAN3LHsosSC2idmsC IAhPvdgu+Eg4O95HqbxDKgl/RX8lhxoDTQksiLUjvSkXI2+DExdcHRX6EArMFRgoSt+i ejDg== X-Gm-Message-State: AOJu0YwdCTBJVa40sYajetOogkaNzVgv9tr00bL6SKZNiUR2/PVJHcHJ sQpKIlGSYpCUAE50Bo7WgzHuSEtuoezb6N3wMrizRzwhIN7CQHNACfGaSfgdlLsUO33x0/IKVKq OAQgygXDV525aMccl2AiBumcEWAa8Cj2YdyywxZuJSv9/OQvRiad9uah6088ptJgbFq6xX+p9nU mfkkcFd6hnSzYzjrA1sX1ptAZ4WAr4PA== X-Gm-Gg: ASbGncv6OBTSO3CLZ6sVeQWrZpMIxkqmofq6pYbkXvQzh0IWvaAJu/dkEnnR1Q43DdF J4twwK7FsdbbJYHhSGSBsfpbEpyd2DuJzumPCJKfWL3fSCEXTU1oErB6Ymv4ivtWyUm6ZFLanRI Wuti3TswTyKqbIiui2L694BtiWbIn3k+qe3f1o8sf75eOZvMm+dBj3ohrdMsuxOrTfvKGKc/GjP tzU8BpXmB9WXt1yz52FCvv4/vOzueKV9QA68FzmGDb3rGsMUkiFVDrr5q565UV4ClYraqIhWHlL W26DpQ== X-Received: by 2002:a05:6000:40dc:b0:3a0:b539:f330 with SMTP id ffacd0b85a97d-3a3496999e0mr2602490f8f.2.1747223425578; Wed, 14 May 2025 04:50:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH3ixA3LrF3ohTDjsAXpI7B90nqWULVqAZvTiHrwD0KQdt1iIoyobl81S0SFHavH40RYe1NCQ== X-Received: by 2002:a05:6000:40dc:b0:3a0:b539:f330 with SMTP id ffacd0b85a97d-3a3496999e0mr2602448f8f.2.1747223425032; Wed, 14 May 2025 04:50:25 -0700 (PDT) Date: Wed, 14 May 2025 07:50:22 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Vinayak Holikatti , Jonathan Cameron , Fan Ni Subject: [PULL 03/27] hw/cxl/cxl-mailbox-utils: Add support for Media operations discovery commands cxl r3.2 (8.2.10.9.5.3) Message-ID: <77a8e9fe0ecb71b260d17f43221df5b18769b359.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223500437019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vinayak Holikatti CXL spec 3.2 section 8.2.10.9.5.3 describes media operations commands. CXL devices supports media operations discovery command. Signed-off-by: Vinayak Holikatti Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-4-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/cxl/cxl-mailbox-utils.c | 125 +++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index bd25df033a..79b35d1405 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -89,6 +89,7 @@ enum { SANITIZE =3D 0x44, #define OVERWRITE 0x0 #define SECURE_ERASE 0x1 + #define MEDIA_OPERATIONS 0x2 PERSISTENT_MEM =3D 0x45, #define GET_SECURITY_STATE 0x0 MEDIA_AND_POISON =3D 0x43, @@ -1705,6 +1706,126 @@ static CXLRetCode cmd_sanitize_overwrite(const stru= ct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } =20 +enum { + MEDIA_OP_CLASS_GENERAL =3D 0x0, + #define MEDIA_OP_GEN_SUBC_DISCOVERY 0x0 + MEDIA_OP_CLASS_SANITIZE =3D 0x1, + #define MEDIA_OP_SAN_SUBC_SANITIZE 0x0 + #define MEDIA_OP_SAN_SUBC_ZERO 0x1 +}; + +struct media_op_supported_list_entry { + uint8_t media_op_class; + uint8_t media_op_subclass; +}; + +struct media_op_discovery_out_pl { + uint64_t dpa_range_granularity; + uint16_t total_supported_operations; + uint16_t num_of_supported_operations; + struct media_op_supported_list_entry entry[]; +} QEMU_PACKED; + +static const struct media_op_supported_list_entry media_op_matrix[] =3D { + { MEDIA_OP_CLASS_GENERAL, MEDIA_OP_GEN_SUBC_DISCOVERY }, + { MEDIA_OP_CLASS_SANITIZE, MEDIA_OP_SAN_SUBC_SANITIZE }, + { MEDIA_OP_CLASS_SANITIZE, MEDIA_OP_SAN_SUBC_ZERO }, +}; + +static CXLRetCode media_operations_discovery(uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out) +{ + struct { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + struct { + uint16_t start_index; + uint16_t num_ops; + } discovery_osa; + } QEMU_PACKED *media_op_in_disc_pl =3D (void *)payload_in; + struct media_op_discovery_out_pl *media_out_pl =3D + (struct media_op_discovery_out_pl *)payload_out; + int num_ops, start_index, i; + int count =3D 0; + + if (len_in < sizeof(*media_op_in_disc_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + num_ops =3D media_op_in_disc_pl->discovery_osa.num_ops; + start_index =3D media_op_in_disc_pl->discovery_osa.start_index; + + /* + * As per spec CXL r3.2 8.2.10.9.5.3 dpa_range_count should be zero and + * start index should not exceed the total number of entries for disco= very + * sub class command. + */ + if (media_op_in_disc_pl->dpa_range_count || + start_index > ARRAY_SIZE(media_op_matrix)) { + return CXL_MBOX_INVALID_INPUT; + } + + media_out_pl->dpa_range_granularity =3D CXL_CACHE_LINE_SIZE; + media_out_pl->total_supported_operations =3D + ARRAY_SIZE(media_op_matrix); + if (num_ops > 0) { + for (i =3D start_index; i < start_index + num_ops; i++) { + media_out_pl->entry[count].media_op_class =3D + media_op_matrix[i].media_op_class; + media_out_pl->entry[count].media_op_subclass =3D + media_op_matrix[i].media_op_subclass; + count++; + if (count =3D=3D num_ops) { + break; + } + } + } + + media_out_pl->num_of_supported_operations =3D count; + *len_out =3D sizeof(*media_out_pl) + count * sizeof(*media_out_pl->ent= ry); + return CXL_MBOX_SUCCESS; +} + +static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + struct { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + } QEMU_PACKED *media_op_in_common_pl =3D (void *)payload_in; + uint8_t media_op_cl =3D 0; + uint8_t media_op_subclass =3D 0; + + if (len_in < sizeof(*media_op_in_common_pl)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + media_op_cl =3D media_op_in_common_pl->media_operation_class; + media_op_subclass =3D media_op_in_common_pl->media_operation_subclass; + + switch (media_op_cl) { + case MEDIA_OP_CLASS_GENERAL: + if (media_op_subclass !=3D MEDIA_OP_GEN_SUBC_DISCOVERY) { + return CXL_MBOX_UNSUPPORTED; + } + + return media_operations_discovery(payload_in, len_in, payload_out, + len_out); + default: + return CXL_MBOX_UNSUPPORTED; + } +} + static CXLRetCode cmd_get_security_state(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_in, @@ -2850,6 +2971,10 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = =3D { CXL_MBOX_SECURITY_STATE_CHANGE | CXL_MBOX_BACKGROUND_OPERATION | CXL_MBOX_BACKGROUND_OPERATION_ABORT)}, + [SANITIZE][MEDIA_OPERATIONS] =3D { "MEDIA_OPERATIONS", cmd_media_opera= tions, + ~0, + (CXL_MBOX_IMMEDIATE_DATA_CHANGE | + CXL_MBOX_BACKGROUND_OPERATION)}, [PERSISTENT_MEM][GET_SECURITY_STATE] =3D { "GET_SECURITY_STATE", cmd_get_security_state, 0, 0 }, [MEDIA_AND_POISON][GET_POISON_LIST] =3D { "MEDIA_AND_POISON_GET_POISON= _LIST", --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223530; cv=none; d=zohomail.com; s=zohoarc; b=a7OVeiVVmHkqoFdML5DDOYUMK4tDaccHS74I01j190VDr6ygY4PaUfqAfDPBjNWpJwMeGuR8CQwaSd6LnZ/2DcPv2DzHS/L8r1TRW3RyiugLtNHgvT7tV79SFJ3U6a5Q/iLVm4uUdCzJG3268d2LKtca2yYvvduq6Vh+ze4dsJI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223530; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uZ0822VM1X6UTnEEl31BG7SIVJs/Pp/+b+HwS+jAx3g=; b=ieo3X+ao3o+Y2lDBdu7P4mOMoUUPAZjAo5ZmVQkj/d/O9TTKOp/ByuqhQsMUEucqINJex90MIG2o3CadCiDleyjpwBWycAPlDM5RxtjGGi+WmIy8Fx4E1JIt4hTV49iu4f7Tl88PrKGKfuRl0m/EseXPXvRrjJWN4Wo5quRgsSE= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223530164930.4252270443293; Wed, 14 May 2025 04:52:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdF-0005rB-Mk; Wed, 14 May 2025 07:50:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdC-0005qb-Ns for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd7-00063r-68 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:38 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-561-XSd4CspNOiW5o5VQWzC0Jg-1; Wed, 14 May 2025 07:50:29 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a0b5d18cb7so2600385f8f.2 for ; Wed, 14 May 2025 04:50:29 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f58ecccbsm19610607f8f.32.2025.05.14.04.50.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223430; 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: in-reply-to:in-reply-to:references:references; bh=uZ0822VM1X6UTnEEl31BG7SIVJs/Pp/+b+HwS+jAx3g=; b=Z6RkTlj6J1nvTWA7yS97tUweXX22OFuEt+i2Q8whlFH0kxezAdsU3JiSJML8cOGLUyGUJY tNGELaUBJvm6B1Zkl8Hzi0dH+gNeyfMihNnaadWFadDVECeoVyB3/iNBb27McRs4IujuoY h880qRHUEsYyHnKsgtY1uzm8Qw13JNM= X-MC-Unique: XSd4CspNOiW5o5VQWzC0Jg-1 X-Mimecast-MFC-AGG-ID: XSd4CspNOiW5o5VQWzC0Jg_1747223428 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223428; x=1747828228; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=uZ0822VM1X6UTnEEl31BG7SIVJs/Pp/+b+HwS+jAx3g=; b=qfqRNmfozJYdceoYE5m0zxSrTNr7ofBcCBDjecXx6NOBGTnHILsYfGY1ceKZaqu5Ax QevibHAxK2WWNu278ljFHrIPMKPL/gvByu5DMwILWoUdVgfJhXHK1IuKpF/nmYULJ/35 e+DXc2hEJAPHtpCk8kBFYdRBsFzARE4DgV5BP8kgd8mjKmq+QIIxwQAXX6B3HXs9/zpQ EO9zX+dR7sZGujlErLUxAlcYtpH48w302OryTB+jj06EF1gamxWyqSVOiB7JslbNoiyd i+XuRPAbkxchd9nBj8QxmxyqH32wP1XvYdtSjRgjpVmB3Y/iS/yjQQZj/iUdScrzXEa7 rY8g== X-Gm-Message-State: AOJu0Yyec4PSN+oH+1VGXoQrGM8tDrdAcu4BAQMNMmKXzkVgtmo7J+bu GJgl66uhjVjFigQP0x2L/oyFsMrDFfh1W5ttkw185qytvUsamBmYOe/tkvDQR7h3xuxAhbn45ax HS2FIPap4opJG4VjCzjqj5/e1lXLwNT4L+A4TuowAyGYm24kOyh5qEMt+u8u6ZcMSdvDyRPTcl+ ce9GSdz0OhBC+a3QC0dz7WRPHmdK+JaQ== X-Gm-Gg: ASbGncuKhiX2V9AMV8owDvNMonefR2IGZutdP3ZPp2soCo/898yhPpAV9kCaye/xSkh QDhFtyef1j2xKJ3L2d/tnOLwEPVmafLhwydlGZa3+fQYRAh7Dv/ui5LpHjZHH3z3P1ui+wdDW7B XhliIhEdDAGoAKf/Cpqu/l5XWRD3LoKBxeQmHgmcNYa7nwXuGFTspDKapA9CC8W5NL8+UmgLZvA 0wmlWhm0WttvUpH+GfbolRn+Z6zg7glHxM8DC1iodPcyjfmbmL1Prd0HGTHOlxxjhNqS7/k6ppE AolKpw== X-Received: by 2002:a05:6000:1ac7:b0:3a2:5c7:7a84 with SMTP id ffacd0b85a97d-3a34991e1e4mr2647413f8f.40.1747223428016; Wed, 14 May 2025 04:50:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE8UTwYb34YLWWbIyIk5vDhtAzOStlpkHmBllXNB0mfyMNAfcaK2rAHjgqwRgOXiRuLR3QXgQ== X-Received: by 2002:a05:6000:1ac7:b0:3a2:5c7:7a84 with SMTP id ffacd0b85a97d-3a34991e1e4mr2647383f8f.40.1747223427599; Wed, 14 May 2025 04:50:27 -0700 (PDT) Date: Wed, 14 May 2025 07:50:25 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Vinayak Holikatti , Davidlohr Bueso , Jonathan Cameron , Fan Ni Subject: [PULL 04/27] hw/cxl: factor out calculation of sanitize duration from cmd_santize_overwrite Message-ID: <484df0704ea592ebd5993c15d63ea38f309ec6e0.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223531332116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vinayak Holikatti Move the code of calculation of sanitize duration into function for usability by other sanitize routines Estimate times based on: https://pmem.io/documents/NVDIMM_DSM_Interface-V1.8.pdf Signed-off-by: Davidlohr Bueso Signed-off-by: Vinayak Holikatti Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-5-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/cxl/cxl-mailbox-utils.c | 63 ++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 79b35d1405..9f9d475678 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1640,6 +1640,41 @@ static void __do_sanitization(CXLType3Dev *ct3d) cxl_discard_all_event_records(&ct3d->cxl_dstate); } =20 +static int get_sanitize_duration(uint64_t total_mem) +{ + int secs =3D 0; + + if (total_mem <=3D 512) { + secs =3D 4; + } else if (total_mem <=3D 1024) { + secs =3D 8; + } else if (total_mem <=3D 2 * 1024) { + secs =3D 15; + } else if (total_mem <=3D 4 * 1024) { + secs =3D 30; + } else if (total_mem <=3D 8 * 1024) { + secs =3D 60; + } else if (total_mem <=3D 16 * 1024) { + secs =3D 2 * 60; + } else if (total_mem <=3D 32 * 1024) { + secs =3D 4 * 60; + } else if (total_mem <=3D 64 * 1024) { + secs =3D 8 * 60; + } else if (total_mem <=3D 128 * 1024) { + secs =3D 15 * 60; + } else if (total_mem <=3D 256 * 1024) { + secs =3D 30 * 60; + } else if (total_mem <=3D 512 * 1024) { + secs =3D 60 * 60; + } else if (total_mem <=3D 1024 * 1024) { + secs =3D 120 * 60; + } else { + secs =3D 240 * 60; /* max 4 hrs */ + } + + return secs; +} + /* * CXL r3.1 Section 8.2.9.9.5.1: Sanitize (Opcode 4400h) * @@ -1668,33 +1703,7 @@ static CXLRetCode cmd_sanitize_overwrite(const struc= t cxl_cmd *cmd, int secs; =20 total_mem =3D (ct3d->cxl_dstate.vmem_size + ct3d->cxl_dstate.pmem_size= ) >> 20; - if (total_mem <=3D 512) { - secs =3D 4; - } else if (total_mem <=3D 1024) { - secs =3D 8; - } else if (total_mem <=3D 2 * 1024) { - secs =3D 15; - } else if (total_mem <=3D 4 * 1024) { - secs =3D 30; - } else if (total_mem <=3D 8 * 1024) { - secs =3D 60; - } else if (total_mem <=3D 16 * 1024) { - secs =3D 2 * 60; - } else if (total_mem <=3D 32 * 1024) { - secs =3D 4 * 60; - } else if (total_mem <=3D 64 * 1024) { - secs =3D 8 * 60; - } else if (total_mem <=3D 128 * 1024) { - secs =3D 15 * 60; - } else if (total_mem <=3D 256 * 1024) { - secs =3D 30 * 60; - } else if (total_mem <=3D 512 * 1024) { - secs =3D 60 * 60; - } else if (total_mem <=3D 1024 * 1024) { - secs =3D 120 * 60; - } else { - secs =3D 240 * 60; /* max 4 hrs */ - } + secs =3D get_sanitize_duration(total_mem); =20 /* EBUSY other bg cmds as of now */ cci->bg.runtime =3D secs * 1000UL; --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223668; cv=none; d=zohomail.com; s=zohoarc; b=LbcIG2Txc5Uzo7HLdnIIwqHeBaLonahvjhBU2GikJ6wumyq/9aM/u96Fc4tWIoINZ1rXbk7+ROMi2XdAiSaMKBCBx9oq+vu1g41IoeejuQJBZeLtLtRPCPyggtRsm96VHysCSPYnGSI5LEdeKIh1jVmbipL3p8CyKjJG1pMYYtU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223668; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cYG1VcqUXYHTwq+yW1MWjdXMD8PNUK+wUVm5zXXHdec=; b=AXG46BAnyneo/cRulD1ylyZ1XqT7Sof9Evu6TTQOQS1oJ7iNmwHYwFQvJSA+dhdKqz9hcxih2+twy20ZNhKPRle0QVpvu8Yknk1MZdbbs8/YySlRpKgYGp+T3AJYX38rbNDfwOs/d8+ygqB5Aj/LhOI14ICHs3f4LTM5+mS3680= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223668711313.37228431186384; Wed, 14 May 2025 04:54:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdG-0005rV-Q2; Wed, 14 May 2025 07:50:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdF-0005qu-1x for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:41 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAd9-00064y-Cx for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:40 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-110-dPXnDTUgOVSwnL6ICXJ1NQ-1; Wed, 14 May 2025 07:50:32 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-442f4a3851fso4787255e9.1 for ; Wed, 14 May 2025 04:50:32 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f33691fdsm27980855e9.5.2025.05.14.04.50.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223434; 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: in-reply-to:in-reply-to:references:references; bh=cYG1VcqUXYHTwq+yW1MWjdXMD8PNUK+wUVm5zXXHdec=; b=ZNWZ/lMmnO0AP7zZOWGwXyGLF8NLL3ZA8OKWEJgMruo6n0EWvZlqdY28qEUHFYBjPsPDqV Rbuy3m8WRR8xnv8jelHrKm7r2uL9nln7aXv+yKK44BN8iiv+8YTlaxiRTjtUpYl+DdMa9U HxwTc2SVcVZSFGetapoCYUDubHz8X1g= X-MC-Unique: dPXnDTUgOVSwnL6ICXJ1NQ-1 X-Mimecast-MFC-AGG-ID: dPXnDTUgOVSwnL6ICXJ1NQ_1747223432 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223431; x=1747828231; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=cYG1VcqUXYHTwq+yW1MWjdXMD8PNUK+wUVm5zXXHdec=; b=jkcDM/ydzD39DP01vo3kAIaWhtKhxwr9DmUwFXU9UW1Yis3ucQkxHYZ0yEK/EICqxm mVk/HBe8CUAO+y2EYEn2oHhyzLeVMVZ8wtu6Af73B6rYYIPKKZN5RlyDXxQe6QUH4oXZ v7vcQvvBe5M63yTbS+Mo+HUh+YpFo/GGSO09QN7QwSSh3KQmyD/USU0Ce3Z43k4Ydryp tIaAV7SR32sl0bIHh270N/ybGAELJysQw5gJhR9LTEcxwcP0wzHP7Z9orQ5snheCid3X qENWiPf+JR/RbP1SwJM3qWawtjYJ1xBCZJnBzHZMQ11IMUO5Kvm2Q6zCnqb25OfG3KXp yVjg== X-Gm-Message-State: AOJu0YxbVbE4kWHKBjdTWQSKqJ9e574V/SwlHMwhyF4HKJIe1uXtlmmN 7yXTh7wvEFmLmtGyY9dvOgVpSxaTMZ4yqaUE3gfy3epNnsKRRzW+b+MAdT8URsAzTxbBKWi8i14 R1HziSzIEnWye3H9rmtf57Kdbceua+FsB5H5Xx/XmKLtdMrB6dvvrPdPYzu1hLXZ8DM1GHrbNRR DI9en3MHKWSDAwnqaPqmd65ggDusP6/Q== X-Gm-Gg: ASbGncvOm5F0OKcMe4a5T4FQ1/t0sFEEMS8dBk8ivkVOCGr+fYkpRho75NlJP18zU/5 HXEsD0M4RSVVOkDUg2D1rZnrReW3pWppdvgMEqH5MRmsW0wVK2MdPosITz8ec7Qu4pSlJKkDtWt XedVDocNhQuDrwmVUH+ddTUsMpRF3xYtu3cz/P05tmqF7hdqdqusgtQOW076wyXnYGkd85Lnw6U kPo0tIdoCMblH8EQvIAiwoAT0QPwMtrFaNcJ/knQh1Djn9ziNpfi6LCxopcEDTHrOh4NAsRWLzM gTeKww== X-Received: by 2002:a05:600c:a00a:b0:43d:3df:42d8 with SMTP id 5b1f17b1804b1-442f20b9ca0mr25581875e9.6.1747223430893; Wed, 14 May 2025 04:50:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEdoyEnYssbSv1UgHuZJhNOA/W2iTnY0F6UqM+3HQX4W5+2legAvJ+l3UgiaoMtnSt6vIFgOA== X-Received: by 2002:a05:600c:a00a:b0:43d:3df:42d8 with SMTP id 5b1f17b1804b1-442f20b9ca0mr25581575e9.6.1747223430362; Wed, 14 May 2025 04:50:30 -0700 (PDT) Date: Wed, 14 May 2025 07:50:27 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Vinayak Holikatti , Jonathan Cameron , Fan Ni Subject: [PULL 05/27] hw/cxl/cxl-mailbox-utils: Media operations Sanitize and Write Zeros commands CXL r3.2(8.2.10.9.5.3) Message-ID: <40ab4ed107757e1c5bdccc906e8a44cb4e2cb7a4.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223671345019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Vinayak Holikatti CXL spec 3.2 section 8.2.10.9.5.3 describes media operations commands. CXL devices supports media operations Sanitize and Write zero command. Signed-off-by: Vinayak Holikatti Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-6-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/cxl/cxl_device.h | 4 + hw/cxl/cxl-mailbox-utils.c | 204 ++++++++++++++++++++++++++++++++++++ 2 files changed, 208 insertions(+) diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index d21695507f..3ec7be3809 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -540,6 +540,8 @@ typedef struct CXLSetFeatureInfo { size_t data_size; } CXLSetFeatureInfo; =20 +struct CXLSanitizeInfo; + struct CXLType3Dev { /* Private */ PCIDevice parent_obj; @@ -606,6 +608,8 @@ struct CXLType3Dev { uint8_t num_regions; /* 0-8 regions */ CXLDCRegion regions[DCD_MAX_NUM_REGION]; } dc; + + struct CXLSanitizeInfo *media_op_sanitize; }; =20 #define TYPE_CXL_TYPE3 "cxl-type3" diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 9f9d475678..2c6db70e5f 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1715,6 +1715,131 @@ static CXLRetCode cmd_sanitize_overwrite(const stru= ct cxl_cmd *cmd, return CXL_MBOX_BG_STARTED; } =20 +struct dpa_range_list_entry { + uint64_t starting_dpa; + uint64_t length; +} QEMU_PACKED; + +struct CXLSanitizeInfo { + uint32_t dpa_range_count; + uint8_t fill_value; + struct dpa_range_list_entry dpa_range_list[]; +} QEMU_PACKED; + +static uint64_t get_vmr_size(CXLType3Dev *ct3d, MemoryRegion **vmr) +{ + MemoryRegion *mr; + if (ct3d->hostvmem) { + mr =3D host_memory_backend_get_memory(ct3d->hostvmem); + if (vmr) { + *vmr =3D mr; + } + return memory_region_size(mr); + } + return 0; +} + +static uint64_t get_pmr_size(CXLType3Dev *ct3d, MemoryRegion **pmr) +{ + MemoryRegion *mr; + if (ct3d->hostpmem) { + mr =3D host_memory_backend_get_memory(ct3d->hostpmem); + if (pmr) { + *pmr =3D mr; + } + return memory_region_size(mr); + } + return 0; +} + +static uint64_t get_dc_size(CXLType3Dev *ct3d, MemoryRegion **dc_mr) +{ + MemoryRegion *mr; + if (ct3d->dc.host_dc) { + mr =3D host_memory_backend_get_memory(ct3d->dc.host_dc); + if (dc_mr) { + *dc_mr =3D mr; + } + return memory_region_size(mr); + } + return 0; +} + +static int validate_dpa_addr(CXLType3Dev *ct3d, uint64_t dpa_addr, + size_t length) +{ + uint64_t vmr_size, pmr_size, dc_size; + + if ((dpa_addr % CXL_CACHE_LINE_SIZE) || + (length % CXL_CACHE_LINE_SIZE) || + (length <=3D 0)) { + return -EINVAL; + } + + vmr_size =3D get_vmr_size(ct3d, NULL); + pmr_size =3D get_pmr_size(ct3d, NULL); + dc_size =3D get_dc_size(ct3d, NULL); + + if (dpa_addr + length > vmr_size + pmr_size + dc_size) { + return -EINVAL; + } + + if (dpa_addr > vmr_size + pmr_size) { + if (!ct3_test_region_block_backed(ct3d, dpa_addr, length)) { + return -ENODEV; + } + } + + return 0; +} + +static int sanitize_range(CXLType3Dev *ct3d, uint64_t dpa_addr, size_t len= gth, + uint8_t fill_value) +{ + + uint64_t vmr_size, pmr_size; + AddressSpace *as =3D NULL; + MemTxAttrs mem_attrs =3D {}; + + vmr_size =3D get_vmr_size(ct3d, NULL); + pmr_size =3D get_pmr_size(ct3d, NULL); + + if (dpa_addr < vmr_size) { + as =3D &ct3d->hostvmem_as; + } else if (dpa_addr < vmr_size + pmr_size) { + as =3D &ct3d->hostpmem_as; + } else { + if (!ct3_test_region_block_backed(ct3d, dpa_addr, length)) { + return -ENODEV; + } + as =3D &ct3d->dc.host_dc_as; + } + + return address_space_set(as, dpa_addr, fill_value, length, mem_attrs); +} + +/* Perform the actual device zeroing */ +static void __do_sanitize(CXLType3Dev *ct3d) +{ + struct CXLSanitizeInfo *san_info =3D ct3d->media_op_sanitize; + int dpa_range_count =3D san_info->dpa_range_count; + int rc =3D 0; + int i; + + for (i =3D 0; i < dpa_range_count; i++) { + rc =3D sanitize_range(ct3d, san_info->dpa_range_list[i].starting_d= pa, + san_info->dpa_range_list[i].length, + san_info->fill_value); + if (rc) { + goto exit; + } + } +exit: + g_free(ct3d->media_op_sanitize); + ct3d->media_op_sanitize =3D NULL; + return; +} + enum { MEDIA_OP_CLASS_GENERAL =3D 0x0, #define MEDIA_OP_GEN_SUBC_DISCOVERY 0x0 @@ -1799,6 +1924,65 @@ static CXLRetCode media_operations_discovery(uint8_t= *payload_in, return CXL_MBOX_SUCCESS; } =20 +static CXLRetCode media_operations_sanitize(CXLType3Dev *ct3d, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + uint8_t fill_value, + CXLCCI *cci) +{ + struct media_operations_sanitize { + uint8_t media_operation_class; + uint8_t media_operation_subclass; + uint8_t rsvd[2]; + uint32_t dpa_range_count; + struct dpa_range_list_entry dpa_range_list[]; + } QEMU_PACKED *media_op_in_sanitize_pl =3D (void *)payload_in; + uint32_t dpa_range_count =3D media_op_in_sanitize_pl->dpa_range_count; + uint64_t total_mem =3D 0; + size_t dpa_range_list_size; + int secs =3D 0, i; + + if (dpa_range_count =3D=3D 0) { + return CXL_MBOX_SUCCESS; + } + + dpa_range_list_size =3D dpa_range_count * sizeof(struct dpa_range_list= _entry); + if (len_in < (sizeof(*media_op_in_sanitize_pl) + dpa_range_list_size))= { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + for (i =3D 0; i < dpa_range_count; i++) { + uint64_t start_dpa =3D + media_op_in_sanitize_pl->dpa_range_list[i].starting_dpa; + uint64_t length =3D media_op_in_sanitize_pl->dpa_range_list[i].len= gth; + + if (validate_dpa_addr(ct3d, start_dpa, length)) { + return CXL_MBOX_INVALID_INPUT; + } + total_mem +=3D length; + } + ct3d->media_op_sanitize =3D g_malloc0(sizeof(struct CXLSanitizeInfo) + + dpa_range_list_size); + + ct3d->media_op_sanitize->dpa_range_count =3D dpa_range_count; + ct3d->media_op_sanitize->fill_value =3D fill_value; + memcpy(ct3d->media_op_sanitize->dpa_range_list, + media_op_in_sanitize_pl->dpa_range_list, + dpa_range_list_size); + secs =3D get_sanitize_duration(total_mem >> 20); + + /* EBUSY other bg cmds as of now */ + cci->bg.runtime =3D secs * 1000UL; + *len_out =3D 0; + /* + * media op sanitize is targeted so no need to disable media or + * clear event logs + */ + return CXL_MBOX_BG_STARTED; +} + static CXLRetCode cmd_media_operations(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_in, @@ -1812,6 +1996,7 @@ static CXLRetCode cmd_media_operations(const struct c= xl_cmd *cmd, uint8_t rsvd[2]; uint32_t dpa_range_count; } QEMU_PACKED *media_op_in_common_pl =3D (void *)payload_in; + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); uint8_t media_op_cl =3D 0; uint8_t media_op_subclass =3D 0; =20 @@ -1830,6 +2015,19 @@ static CXLRetCode cmd_media_operations(const struct = cxl_cmd *cmd, =20 return media_operations_discovery(payload_in, len_in, payload_out, len_out); + case MEDIA_OP_CLASS_SANITIZE: + switch (media_op_subclass) { + case MEDIA_OP_SAN_SUBC_SANITIZE: + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, 0xF, + cci); + case MEDIA_OP_SAN_SUBC_ZERO: + return media_operations_sanitize(ct3d, payload_in, len_in, + payload_out, len_out, 0, + cci); + default: + return CXL_MBOX_UNSUPPORTED; + } default: return CXL_MBOX_UNSUPPORTED; } @@ -3147,6 +3345,12 @@ static void bg_timercb(void *opaque) cxl_dev_enable_media(&ct3d->cxl_dstate); } break; + case 0x4402: /* Media Operations sanitize */ + { + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + __do_sanitize(ct3d); + } + break; case 0x4304: /* scan media */ { CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223662; cv=none; d=zohomail.com; s=zohoarc; b=Mz3LVlkqr1yjqdBmyjAW/mo7Pbsz0Z7kiWJUoin+pnu2Y2fstJ1SxRpB2hRKQREccFhFwEjlGMTGP1IfjetJac7yjGyK29xEDkJApJMtsNCNOzNYgDrUxUftFgeDYXWW+gDy53RCHuk18t1WaXjQPAqziAf1nCBMj7M3JobHtOk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223662; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qyLQmrtd4FJpGU+6njcciX6Un/5UyHexyk6THOUGTQI=; b=HXUdIhd5D8NRl45bGkSYlQnxk1Q6ZfLqDzzP/MfTODSnp/mGjKx3jLd5xs3E/UHWTmZAwDvrphioj/LB70cQmO6FLi5x9O4g6HIQJMek53nn8cwPOAPKgGWf4JDtcwM0PIWEV71I20vqjN8ITo7Trc+/6DPied5+rsumjR3wjZ0= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223662601458.0936768574916; Wed, 14 May 2025 04:54:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdH-0005rq-KK; Wed, 14 May 2025 07:50:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdF-0005rD-Nf for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:41 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdC-00065l-93 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:41 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-655-rEX3CRJ5O_CBdb2dtu-ptg-1; Wed, 14 May 2025 07:50:35 -0400 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3a0ba24d233so2322583f8f.2 for ; Wed, 14 May 2025 04:50:34 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f58eb91bsm19865181f8f.33.2025.05.14.04.50.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223436; 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: in-reply-to:in-reply-to:references:references; bh=qyLQmrtd4FJpGU+6njcciX6Un/5UyHexyk6THOUGTQI=; b=iCkAS79AxlmZXKKSALvTNyLkLc3wAEbsdSZFdfZNNb57zqyb2fEH5jIMR9cOB7NJ6SCzuq CVAP2J7Z/OYaFne8dmSDZ0hHfeO3TxhzWtCBILGqYVTydGgg8jaW5+zErA4I2/oe4Vrs0R OMsQ92rkKZ30YUeluY79VpWh+6y8TE8= X-MC-Unique: rEX3CRJ5O_CBdb2dtu-ptg-1 X-Mimecast-MFC-AGG-ID: rEX3CRJ5O_CBdb2dtu-ptg_1747223434 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223433; x=1747828233; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qyLQmrtd4FJpGU+6njcciX6Un/5UyHexyk6THOUGTQI=; b=lloj1M97RQn+7BI7yx7RuCiGi0zHyUuezq90tHVO+iBykdEtDfe27Brzvns6w+e47Y tf/FRNveNcjUXpe6SSIK1g8as/m14AwlDhXhspKZdVoSp0B8P9mSbAC+mKynBbX+lkEH 3epxOC6OO32NScJdpVq/Xj4gLwZ+5T9PwPWMd+VX5tT8l8PH7T2V8+ZCTU814gh9+ccy VGXHfjGDokRs+ya/zA/1pV8HqGSZqCMcVRJyS4oKwPE8wdfytqmHTWuVl6eHC06vd4kA TjHrmoqu5LpJVvdufHGhdKOrBRW8cy11+aGRtFVM8vIDerca3pMI0PDl5O9X3zhv+Fw4 AG1Q== X-Gm-Message-State: AOJu0Yx7yxwibR5DeRPWaTZ8f+xMtrYiWBAn6I9SM75LCC9QVvbdaRDq LO6Jb7w9HXvIkceYQh9mnpDpDncSXo56TVh9E/n4ULxveI7u7fEALhlpY0O7ozw9b3KDG+dygEw 2Wv2yRrm1fwh13grhRmpIeZ8X7yVcrv3rUZbWEC/M6UlzDx3/CsUyP/DRsTrvBIEwKGOm/2hb8e g/zUssJnPmNGvj618v/AUMfP6v3aH8HA== X-Gm-Gg: ASbGncsnFqvmsQIYrKx+X/VIV5RVc7ttr8410qz2xympnWIZi1HP/xkVfz2ZK8vpuZA Q/hyD5GzdEK2krlRkIaAfe5sKUSPnbqk1sZee4q5ugxcb/7x1iR9yXRTaHmSb76YTb3T7qN4Xk1 y/yrPWSp4iwtSnx+qsSuY9P/vSCOv6z5Qvc4jfAnQBhDbXZFmZonmwdzpR5qM6XBW9tSyAhn0u9 0w4mnlTPgYxp955y17BkOCwJ4MpUWxE/4Rm0OQ8K7E3AgNUrMOGkHDaYhq3nw6vxUSqYzPrW5JQ sWG5cQ== X-Received: by 2002:a5d:64e7:0:b0:3a0:b8b0:4418 with SMTP id ffacd0b85a97d-3a34994e42cmr2405804f8f.50.1747223433054; Wed, 14 May 2025 04:50:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEt0xZtaX+HoQWSONvM7R8loNJmejnr3JjrjuZbbSrtpXK9rfolChhw+fJllGoiN3eihu2dmw== X-Received: by 2002:a5d:64e7:0:b0:3a0:b8b0:4418 with SMTP id ffacd0b85a97d-3a34994e42cmr2405780f8f.50.1747223432621; Wed, 14 May 2025 04:50:32 -0700 (PDT) Date: Wed, 14 May 2025 07:50:30 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Sweta Kumari , Jonathan Cameron , Fan Ni Subject: [PULL 06/27] hw/cxl/cxl-mailbox-utils: CXL CCI Get/Set alert config commands Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223664849116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Sweta Kumari 1) get alert configuration(Opcode 4201h) 2) set alert configuration(Opcode 4202h) Signed-off-by: Sweta Kumari Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-7-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/cxl/cxl_device.h | 15 ++++++ hw/cxl/cxl-mailbox-utils.c | 105 ++++++++++++++++++++++++++++++++++++ hw/mem/cxl_type3.c | 14 +++++ 3 files changed, 134 insertions(+) diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 3ec7be3809..ed6cd50c67 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -542,6 +542,19 @@ typedef struct CXLSetFeatureInfo { =20 struct CXLSanitizeInfo; =20 +typedef struct CXLAlertConfig { + uint8_t valid_alerts; + uint8_t enable_alerts; + uint8_t life_used_crit_alert_thresh; + uint8_t life_used_warn_thresh; + uint16_t over_temp_crit_alert_thresh; + uint16_t under_temp_crit_alert_thresh; + uint16_t over_temp_warn_thresh; + uint16_t under_temp_warn_thresh; + uint16_t cor_vmem_err_warn_thresh; + uint16_t cor_pmem_err_warn_thresh; +} QEMU_PACKED CXLAlertConfig; + struct CXLType3Dev { /* Private */ PCIDevice parent_obj; @@ -563,6 +576,8 @@ struct CXLType3Dev { CXLCCI vdm_fm_owned_ld_mctp_cci; CXLCCI ld0_cci; =20 + CXLAlertConfig alert_config; + /* PCIe link characteristics */ PCIExpLinkSpeed speed; PCIExpLinkWidth width; diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 2c6db70e5f..299f232f26 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -28,6 +28,11 @@ #define CXL_DC_EVENT_LOG_SIZE 8 #define CXL_NUM_EXTENTS_SUPPORTED 512 #define CXL_NUM_TAGS_SUPPORTED 0 +#define CXL_ALERTS_LIFE_USED_WARN_THRESH (1 << 0) +#define CXL_ALERTS_OVER_TEMP_WARN_THRESH (1 << 1) +#define CXL_ALERTS_UNDER_TEMP_WARN_THRESH (1 << 2) +#define CXL_ALERTS_COR_VMEM_ERR_WARN_THRESH (1 << 3) +#define CXL_ALERTS_COR_PMEM_ERR_WARN_THRESH (1 << 4) =20 /* * How to add a new command, example. The command set FOO, with cmd BAR. @@ -86,6 +91,9 @@ enum { #define GET_PARTITION_INFO 0x0 #define GET_LSA 0x2 #define SET_LSA 0x3 + HEALTH_INFO_ALERTS =3D 0x42, + #define GET_ALERT_CONFIG 0x1 + #define SET_ALERT_CONFIG 0x2 SANITIZE =3D 0x44, #define OVERWRITE 0x0 #define SECURE_ERASE 0x1 @@ -1610,6 +1618,97 @@ static CXLRetCode cmd_ccls_set_lsa(const struct cxl_= cmd *cmd, return CXL_MBOX_SUCCESS; } =20 +/* CXL r3.2 Section 8.2.10.9.3.2 Get Alert Configuration (Opcode 4201h) */ +static CXLRetCode cmd_get_alert_config(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + CXLAlertConfig *out =3D (CXLAlertConfig *)payload_out; + + memcpy(out, &ct3d->alert_config, sizeof(ct3d->alert_config)); + *len_out =3D sizeof(ct3d->alert_config); + + return CXL_MBOX_SUCCESS; +} + +/* CXL r3.2 Section 8.2.10.9.3.3 Set Alert Configuration (Opcode 4202h) */ +static CXLRetCode cmd_set_alert_config(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + CXLAlertConfig *alert_config =3D &ct3d->alert_config; + struct { + uint8_t valid_alert_actions; + uint8_t enable_alert_actions; + uint8_t life_used_warn_thresh; + uint8_t rsvd; + uint16_t over_temp_warn_thresh; + uint16_t under_temp_warn_thresh; + uint16_t cor_vmem_err_warn_thresh; + uint16_t cor_pmem_err_warn_thresh; + } QEMU_PACKED *in =3D (void *)payload_in; + + if (in->valid_alert_actions & CXL_ALERTS_LIFE_USED_WARN_THRESH) { + /* + * CXL r3.2 Table 8-149 The life used warning threshold shall be + * less than the life used critical alert value. + */ + if (in->life_used_warn_thresh >=3D + alert_config->life_used_crit_alert_thresh) { + return CXL_MBOX_INVALID_INPUT; + } + alert_config->life_used_warn_thresh =3D in->life_used_warn_thresh; + alert_config->enable_alerts |=3D CXL_ALERTS_LIFE_USED_WARN_THRESH; + } + + if (in->valid_alert_actions & CXL_ALERTS_OVER_TEMP_WARN_THRESH) { + /* + * CXL r3.2 Table 8-149 The Device Over-Temperature Warning Thresh= old + * shall be less than the the Device Over-Temperature Critical + * Alert Threshold. + */ + if (in->over_temp_warn_thresh >=3D + alert_config->over_temp_crit_alert_thresh) { + return CXL_MBOX_INVALID_INPUT; + } + alert_config->over_temp_warn_thresh =3D in->over_temp_warn_thresh; + alert_config->enable_alerts |=3D CXL_ALERTS_OVER_TEMP_WARN_THRESH; + } + + if (in->valid_alert_actions & CXL_ALERTS_UNDER_TEMP_WARN_THRESH) { + /* + * CXL r3.2 Table 8-149 The Device Under-Temperature Warning Thres= hold + * shall be higher than the the Device Under-Temperature Critical + * Alert Threshold. + */ + if (in->under_temp_warn_thresh <=3D + alert_config->under_temp_crit_alert_thresh) { + return CXL_MBOX_INVALID_INPUT; + } + alert_config->under_temp_warn_thresh =3D in->under_temp_warn_thres= h; + alert_config->enable_alerts |=3D CXL_ALERTS_UNDER_TEMP_WARN_THRESH; + } + + if (in->valid_alert_actions & CXL_ALERTS_COR_VMEM_ERR_WARN_THRESH) { + alert_config->cor_vmem_err_warn_thresh =3D in->cor_vmem_err_warn_t= hresh; + alert_config->enable_alerts |=3D CXL_ALERTS_COR_VMEM_ERR_WARN_THRE= SH; + } + + if (in->valid_alert_actions & CXL_ALERTS_COR_PMEM_ERR_WARN_THRESH) { + alert_config->cor_pmem_err_warn_thresh =3D in->cor_pmem_err_warn_t= hresh; + alert_config->enable_alerts |=3D CXL_ALERTS_COR_PMEM_ERR_WARN_THRE= SH; + } + return CXL_MBOX_SUCCESS; +} + /* Perform the actual device zeroing */ static void __do_sanitization(CXLType3Dev *ct3d) { @@ -3173,6 +3272,12 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = =3D { [CCLS][GET_LSA] =3D { "CCLS_GET_LSA", cmd_ccls_get_lsa, 8, 0 }, [CCLS][SET_LSA] =3D { "CCLS_SET_LSA", cmd_ccls_set_lsa, ~0, CXL_MBOX_IMMEDIATE_CONFIG_CHANGE | CXL_MBOX_IMMEDIATE_DATA_CHA= NGE }, + [HEALTH_INFO_ALERTS][GET_ALERT_CONFIG] =3D { + "HEALTH_INFO_ALERTS_GET_ALERT_CONFIG", + cmd_get_alert_config, 0, 0 }, + [HEALTH_INFO_ALERTS][SET_ALERT_CONFIG] =3D { + "HEALTH_INFO_ALERTS_SET_ALERT_CONFIG", + cmd_set_alert_config, 12, CXL_MBOX_IMMEDIATE_POLICY_CHANGE }, [SANITIZE][OVERWRITE] =3D { "SANITIZE_OVERWRITE", cmd_sanitize_overwri= te, 0, (CXL_MBOX_IMMEDIATE_DATA_CHANGE | CXL_MBOX_SECURITY_STATE_CHANGE | diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index aacd078118..94e7274912 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -843,6 +843,19 @@ static DOEProtocol doe_cdat_prot[] =3D { { } }; =20 +/* Initialize CXL device alerts with default threshold values. */ +static void init_alert_config(CXLType3Dev *ct3d) +{ + ct3d->alert_config =3D (CXLAlertConfig) { + .life_used_crit_alert_thresh =3D 75, + .life_used_warn_thresh =3D 40, + .over_temp_crit_alert_thresh =3D 35, + .under_temp_crit_alert_thresh =3D 10, + .over_temp_warn_thresh =3D 25, + .under_temp_warn_thresh =3D 20 + }; +} + static void ct3_realize(PCIDevice *pci_dev, Error **errp) { ERRP_GUARD(); @@ -910,6 +923,7 @@ static void ct3_realize(PCIDevice *pci_dev, Error **err= p) goto err_msix_uninit; } =20 + init_alert_config(ct3d); pcie_cap_deverr_init(pci_dev); /* Leave a bit of room for expansion */ rc =3D pcie_aer_init(pci_dev, PCI_ERR_VER, 0x200, PCI_ERR_SIZEOF, errp= ); --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223989; cv=none; d=zohomail.com; s=zohoarc; b=Sdu1obGXNmdXfZr3dT+D2i5iT6ZZITldObljGLijccZPnl1YFrFEMDZN9uV9ducGWAN5ItITRhVYaEiwAR/VnkFYZpnHRWR4m7wFR79XWUUilMOO9AddSdldCXTcoXa7L5TSZPXbb/fT7HlbhsJSPkwsoUaPmzQwvBHH7B4V4Jo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223989; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xR5eYCaem9AyYnWoLzFT5QzAGvgnkNTXfUa8v1+CEvM=; b=RDgSoUfOFaXEVa8BOgDypyf+khruDs2IjZgZXQxN8+MR9tQhrZGLueLvgxVrPsyhilJLPJ82To2RLk3XaRKCQV8hDAQ4v5eDst95c/tgovwDANpvYZiZai5usufcm8MvcBgtIDz31R6QU22jcgIETEPZidDC0scFiit6WP7pfvI= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223989145312.7175843909523; Wed, 14 May 2025 04:59:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdO-0005t4-Gm; Wed, 14 May 2025 07:50:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdI-0005s8-5j for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdD-00066N-A9 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:43 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-228-sDs_NuWANc6ws1nnVQVVXw-1; Wed, 14 May 2025 07:50:37 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a0b7c8b3e2so4337101f8f.1 for ; Wed, 14 May 2025 04:50:37 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f58f2a1dsm18986861f8f.43.2025.05.14.04.50.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223438; 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: in-reply-to:in-reply-to:references:references; bh=xR5eYCaem9AyYnWoLzFT5QzAGvgnkNTXfUa8v1+CEvM=; b=XOgRezE883NSh7BnLmxgnFwg1nOTvcQqxvLMUxV2dwwqL/K9ZqbJipaWcdyqxmnGkBVN4X FZ4pkt2U6yUUgo2VzhllOMmQn6nF4ra7SM08UMsmKiBpHgMqN7nIFYLKwyeEl9SahrPNu9 soEKLd4XpGKzw2WTUbIpdf6DLrVakOQ= X-MC-Unique: sDs_NuWANc6ws1nnVQVVXw-1 X-Mimecast-MFC-AGG-ID: sDs_NuWANc6ws1nnVQVVXw_1747223436 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223435; x=1747828235; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=xR5eYCaem9AyYnWoLzFT5QzAGvgnkNTXfUa8v1+CEvM=; b=Z0i2FMRELdKMr4KMMm1JWwCcNlkTO+iKrlnhVH6IhwXEceBSIlXYLKNxDcAtNSI/aZ NykBTmimwKRj715BGFryaqrFbQEDG1vOIIQvnxKlMHOGASfflQn60LR81Up9cSl0UcBy J9yBHc/32P5b/dkP8vNVPs9TsAGhZlI8IPGS5UQbqz/WZ7fneGMARTqGh3b6MV1CfULX 1SmVFZbT2uxwGrQyB91yFx0qPLblLqm7oDmZqo602lZDGHhAvvplyVMw1jztY3Wlxjs7 MRBOEyoFRlNsBmuJOz3ax3kmYok8XqImsElOJgpBLfLn9k/uCOhZLckEinxWMZXbdcXi 0DCg== X-Gm-Message-State: AOJu0Yx4yB44f66LY9WgjD2m0Px92b2gJDC3aW5IvxPZCHdxPfeAL2Fj Q6ffViPa7i2KbTpQQBPVwQw7q6NI6DTMXc8O2GUHfp39VgBc91NwkfOe2NCBt/L2hIvlW/s+bc/ QSKQVNgWS1aYChiipT/kqT+S6Tgt+gQ2/kBDpTDc6lz8Cqc7pEwCvmbV8xXdNWm0hYU2y8esstQ 1b9dfC4Vc/LKTwKsZkAFVWZacBl1lbQw== X-Gm-Gg: ASbGncvJc9dPt7ibtP8bYprXzatql4oKW5hFH177xDnipE2J7twO/zVqSbV4O/TeNlK 3BPjU11ES3/V2VMiD89grxkxxzU/ND36r2fMbA0R40OuruCpKK4pHZWok8tzMjCmhl2lOI9WIzm FenN0Bj0MvcjsajI6wYUiLcqEFjz5J0YZuGPfZduteXj9HIRJdtuW4j3/Eq0tZdZlcseC5mtwtq ROvY3sBLldIWlfCJvRLgoTC9d9rw7SKoUATvEOpQBdMWZrJVFxGa9ac/VbVoGr/O9Qkxv1U29Ef ROGa/g== X-Received: by 2002:a5d:588d:0:b0:3a2:38e:c0b0 with SMTP id ffacd0b85a97d-3a349922514mr2856688f8f.45.1747223435461; Wed, 14 May 2025 04:50:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGAXodGh27ySKFpzgU9uFSty+11zCvcQxC4GO56MnRBcJzg5TOweUrpiW3JTPmDXHlnwz3FXw== X-Received: by 2002:a5d:588d:0:b0:3a2:38e:c0b0 with SMTP id ffacd0b85a97d-3a349922514mr2856651f8f.45.1747223434976; Wed, 14 May 2025 04:50:34 -0700 (PDT) Date: Wed, 14 May 2025 07:50:32 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Yuquan Wang , Jonathan Cameron , Hyeongtak Ji , Michael Tokarev Subject: [PULL 07/27] docs/cxl: Add serial number for persistent-memdev Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223990715019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Yuquan Wang Add serial number parameter in the cxl persistent examples. Signed-off-by: Yuquan Wang Signed-off-by: Jonathan Cameron Message-Id: <20250305092501.191929-9-Jonathan.Cameron@huawei.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- docs/system/devices/cxl.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/system/devices/cxl.rst b/docs/system/devices/cxl.rst index 882b036f5e..e307caf3f8 100644 --- a/docs/system/devices/cxl.rst +++ b/docs/system/devices/cxl.rst @@ -308,7 +308,7 @@ A very simple setup with just one directly attached CXL= Type 3 Persistent Memory -object memory-backend-file,id=3Dcxl-lsa1,share=3Don,mem-path=3D/tmp/lsa= .raw,size=3D256M \ -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1 \ -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Droot_port13,chassis=3D0,slot=3D= 2 \ - -device cxl-type3,bus=3Droot_port13,persistent-memdev=3Dcxl-mem1,lsa=3Dc= xl-lsa1,id=3Dcxl-pmem0 \ + -device cxl-type3,bus=3Droot_port13,persistent-memdev=3Dcxl-mem1,lsa=3Dc= xl-lsa1,id=3Dcxl-pmem0,sn=3D0x1 \ -M cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D4G =20 A very simple setup with just one directly attached CXL Type 3 Volatile Me= mory device:: @@ -349,13 +349,13 @@ the CXL Type3 device directly attached (no switches).= :: -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1 \ -device pxb-cxl,bus_nr=3D222,bus=3Dpcie.0,id=3Dcxl.2 \ -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Droot_port13,chassis=3D0,slot=3D= 2 \ - -device cxl-type3,bus=3Droot_port13,persistent-memdev=3Dcxl-mem1,lsa=3Dc= xl-lsa1,id=3Dcxl-pmem0 \ + -device cxl-type3,bus=3Droot_port13,persistent-memdev=3Dcxl-mem1,lsa=3Dc= xl-lsa1,id=3Dcxl-pmem0,sn=3D0x1 \ -device cxl-rp,port=3D1,bus=3Dcxl.1,id=3Droot_port14,chassis=3D0,slot=3D= 3 \ - -device cxl-type3,bus=3Droot_port14,persistent-memdev=3Dcxl-mem2,lsa=3Dc= xl-lsa2,id=3Dcxl-pmem1 \ + -device cxl-type3,bus=3Droot_port14,persistent-memdev=3Dcxl-mem2,lsa=3Dc= xl-lsa2,id=3Dcxl-pmem1,sn=3D0x2 \ -device cxl-rp,port=3D0,bus=3Dcxl.2,id=3Droot_port15,chassis=3D0,slot=3D= 5 \ - -device cxl-type3,bus=3Droot_port15,persistent-memdev=3Dcxl-mem3,lsa=3Dc= xl-lsa3,id=3Dcxl-pmem2 \ + -device cxl-type3,bus=3Droot_port15,persistent-memdev=3Dcxl-mem3,lsa=3Dc= xl-lsa3,id=3Dcxl-pmem2,sn=3D0x3 \ -device cxl-rp,port=3D1,bus=3Dcxl.2,id=3Droot_port16,chassis=3D0,slot=3D= 6 \ - -device cxl-type3,bus=3Droot_port16,persistent-memdev=3Dcxl-mem4,lsa=3Dc= xl-lsa4,id=3Dcxl-pmem3 \ + -device cxl-type3,bus=3Droot_port16,persistent-memdev=3Dcxl-mem4,lsa=3Dc= xl-lsa4,id=3Dcxl-pmem3,sn=3D0x4 \ -M cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.targets.1=3Dcxl.2,cxl-fmw.0.siz= e=3D4G,cxl-fmw.0.interleave-granularity=3D8k =20 An example of 4 devices below a switch suitable for 1, 2 or 4 way interlea= ve:: @@ -375,13 +375,13 @@ An example of 4 devices below a switch suitable for 1= , 2 or 4 way interleave:: -device cxl-rp,port=3D1,bus=3Dcxl.1,id=3Droot_port1,chassis=3D0,slot=3D1= \ -device cxl-upstream,bus=3Droot_port0,id=3Dus0 \ -device cxl-downstream,port=3D0,bus=3Dus0,id=3Dswport0,chassis=3D0,slot= =3D4 \ - -device cxl-type3,bus=3Dswport0,persistent-memdev=3Dcxl-mem0,lsa=3Dcxl-l= sa0,id=3Dcxl-pmem0 \ + -device cxl-type3,bus=3Dswport0,persistent-memdev=3Dcxl-mem0,lsa=3Dcxl-l= sa0,id=3Dcxl-pmem0,sn=3D0x1 \ -device cxl-downstream,port=3D1,bus=3Dus0,id=3Dswport1,chassis=3D0,slot= =3D5 \ - -device cxl-type3,bus=3Dswport1,persistent-memdev=3Dcxl-mem1,lsa=3Dcxl-l= sa1,id=3Dcxl-pmem1 \ + -device cxl-type3,bus=3Dswport1,persistent-memdev=3Dcxl-mem1,lsa=3Dcxl-l= sa1,id=3Dcxl-pmem1,sn=3D0x2 \ -device cxl-downstream,port=3D2,bus=3Dus0,id=3Dswport2,chassis=3D0,slot= =3D6 \ - -device cxl-type3,bus=3Dswport2,persistent-memdev=3Dcxl-mem2,lsa=3Dcxl-l= sa2,id=3Dcxl-pmem2 \ + -device cxl-type3,bus=3Dswport2,persistent-memdev=3Dcxl-mem2,lsa=3Dcxl-l= sa2,id=3Dcxl-pmem2,sn=3D0x3 \ -device cxl-downstream,port=3D3,bus=3Dus0,id=3Dswport3,chassis=3D0,slot= =3D7 \ - -device cxl-type3,bus=3Dswport3,persistent-memdev=3Dcxl-mem3,lsa=3Dcxl-l= sa3,id=3Dcxl-pmem3 \ + -device cxl-type3,bus=3Dswport3,persistent-memdev=3Dcxl-mem3,lsa=3Dcxl-l= sa3,id=3Dcxl-pmem3,sn=3D0x4 \ -M cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D4G,cxl-fmw.0.interleave-= granularity=3D4k =20 Deprecations --=20 MST From nobody Sat Nov 15 20:47:17 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223987; cv=none; d=zohomail.com; s=zohoarc; b=l13HVZ+8ia/xZXim/niSQ91y7hvawM1kMsZkGd1mw6cVaJc/NrPFLsIq5BhQ4z8ov2vGcVSQotdDolWke31GCpBeQpp92JDuMNsznSwFfDTi76P764EYWjPZXfFmDkqZyUupO2lAlC/I7r9UpOXnaqX/BfvYrZRhYwvCuhielmc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223987; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qTrSTVnWfY0mmIhrJkPgqINBw1atoPtzXJd/8tKth6w=; b=MJgVYxW0sWRNZORiEuRXrsw/6+Occ76CEqaKGUGVntWeGCcXXPSpoIwfOk1/qzcj7SULJGapaEO1t/SQElTLQ2e9uW4vcOkcwOY3GBomqUeHGFG6nvQRRbXsmUtQnLw8QUSzlffa97sq1NUaXz9k6QOivb2cEsstXqoNBczJBa8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223987336651.2631223213044; Wed, 14 May 2025 04:59:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdI-0005sG-Ql; Wed, 14 May 2025 07:50:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdH-0005rx-Mi for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdF-00067J-Or for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:43 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-35-j3eOuvgEM462cHmgU-hzPw-1; Wed, 14 May 2025 07:50:39 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-440a4e2bad7so4456235e9.0 for ; Wed, 14 May 2025 04:50:39 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39ef8f7sm26028285e9.39.2025.05.14.04.50.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223440; 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: in-reply-to:in-reply-to:references:references; bh=qTrSTVnWfY0mmIhrJkPgqINBw1atoPtzXJd/8tKth6w=; b=WO134a3YDrbuzdPtkWQrCO9il/WaaXadobEpyTDjAZkyMQgT83VFAzOsm3RIc20AoRXh9q AMOaorIBUro9NZmgzqWSg3wJjJBJ5HlQncfE0i2DOA77+VcN+d8/i1lwTVkw5kp1XbQ1FS pI+h25oIReX9bFUjmN6oguy6/6hcTVg= X-MC-Unique: j3eOuvgEM462cHmgU-hzPw-1 X-Mimecast-MFC-AGG-ID: j3eOuvgEM462cHmgU-hzPw_1747223438 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223438; x=1747828238; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qTrSTVnWfY0mmIhrJkPgqINBw1atoPtzXJd/8tKth6w=; b=N99kKZLdE48WsB0JiPyJmZMXt//iNRy81epCL48AgMaMIrcHVTyOBBwhaKYncV/xuT ch1eqkAQYvNmkn2DpMkA1s6382NGn4UHLEqLjaqyByeLNKLFY2GNDYtkLkEHbCrYu1sZ oJbZaxuMg4Cnh0nr6GxdyNBzFWgQbmpkmCvWay5mIoEgv2F6q0lQNkT2yhMfDiDd0Zc5 7cKPpbhuzK/9uF7y85Z9QT7xkI8oJjg7wyzJj6ApOqL4JBw7rg19uBqyxS7mWoLdrEQc YjvWPw+BBQQjMaVQmWeN1IoxDxVmAyBDXwlrOoffogNlismNP8IPjs90U9s8v7VERrjq jOwA== X-Gm-Message-State: AOJu0YwtKdogE9sfjwVzEn0eN1arUmv35snpn5u3iMO+d5zojOvfZIvf k1ZrYU5Ixg8e7/w8vKkMg34MW8YJA4gx16TSxx4Hew7fZSoYQMS9CNC6K/LlVeMLa8+qGu9aFvE pBgYTFKso2ceg7uTMlBBZUEUXH9jR9oukM86SLACsKlCMR4kHgPfyKybwy/w776aqEDgNPKn1Vo p+7d1b0D75kUIwDgMOwZLWZMqCobCuog== X-Gm-Gg: ASbGncvS3GJE/OChaKXN/+d97Agz3l/hIwo06t6bUrLXNqLX4n24tJumrQULlRzTq6X 4gsBkIu2e/yolkyqYyX7HURqlNA7skW1s5cLd1QIF6bAr6dyOgWj6sR7dQipjtqcNbMw3Umwd4a +7EmpnlctLlhVgeHmIB7CdT5vt6JTzIr9W0aVVa1OejMj12M9yrXtmrHFziinnNm33fp7nUzAJT eJXvM/dKbozUZ+RBgMvBjosQD6tXiBDCM/jKmIDXo7/vtxudrH0SEatH+xjZrSqFRmHGE2WoA2Y yxOJLw== X-Received: by 2002:a05:600c:3b86:b0:442:cd12:c68a with SMTP id 5b1f17b1804b1-442f1a0d8f9mr30006795e9.1.1747223437992; Wed, 14 May 2025 04:50:37 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHenNJ49ygUiV5zCRp3t1kn3VlupfpdZHkRyK70zrYvITwom17cIpnvCCvZwq6btdSorgC0ew== X-Received: by 2002:a05:600c:3b86:b0:442:cd12:c68a with SMTP id 5b1f17b1804b1-442f1a0d8f9mr30006495e9.1.1747223437582; Wed, 14 May 2025 04:50:37 -0700 (PDT) Date: Wed, 14 May 2025 07:50:35 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 08/27] hw/pci: Do not add ROM BAR for SR-IOV VF Message-ID: <3a031e395dc65239d031890d038bc354af61dc35.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223989070116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki A SR-IOV VF cannot have a ROM BAR. Co-developed-by: Yui Washizu Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-1-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/pci/pci.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index fe38c4c028..6d9d3ce90f 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2522,6 +2522,14 @@ static void pci_add_option_rom(PCIDevice *pdev, bool= is_default_rom, return; } =20 + if (pci_is_vf(pdev)) { + if (pdev->rom_bar > 0) { + error_setg(errp, "ROM BAR cannot be enabled for SR-IOV VF"); + } + + return; + } + if (load_file || pdev->romsize =3D=3D UINT32_MAX) { path =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, pdev->romfile); if (path =3D=3D NULL) { --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223723; cv=none; d=zohomail.com; s=zohoarc; b=ZfKiFri6ocbe8pS7/zZAJl3sRpYEFFjCdrKkDfjTis+eOs7kFkmDYTOihIcXP7YlDmxR3cbqGZHqulTvMH+TUo7KLn6zn3K8EnQ9C9AWKSe3QFkSVUBTezwNFKHvtyr1lKFhQknHC00I+vHw3kXfBJFm+QgHEgdwQiZNSwBIKnM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223723; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qrT7YVZqMqQb7VpCMB/6NXpFBdOsQA1eCj/jjnmWcsU=; b=SUeGXR0FW26y//qwXd4U8cO0gwxYyCGAUACSbUkAn3YTOCIIsXsAwelkXRtT8P2FIn2+05O9d44b21Y99m60SZVOSIKVcM4lequsiAuoiHkYqnwB/MdqSCUEDAEYNJrLXLnW7eyVwhVXEVjfkwjuBHfSHgHuBnYg5pWj1dEerz4= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223723522337.12986165275345; Wed, 14 May 2025 04:55:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdQ-0005u7-TB; Wed, 14 May 2025 07:50:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdM-0005t5-Pl for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdH-000686-UP for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:48 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-116-iC-otmjBMeq8BiXk9T3SBg-1; Wed, 14 May 2025 07:50:41 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43ce8f82e66so35321535e9.3 for ; Wed, 14 May 2025 04:50:41 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442ebd46aa4sm39746415e9.1.2025.05.14.04.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223442; 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: in-reply-to:in-reply-to:references:references; bh=qrT7YVZqMqQb7VpCMB/6NXpFBdOsQA1eCj/jjnmWcsU=; b=Eix7nfEeo/lePqI0sXCgXkv6DAeBYthFct+h7YcIRGnIVHaz1nUg3xpKv2dSPwjKXp5BZ7 g6TbBs68yDh/o41LjWma6KzxK0CcWe0kQ3+6JnIvN8Kjk/eLysUUHqC+2LTMf+wDTR/x3+ Ql0mvOKhTFvRv/i9IysjQuUrjzZ8EPU= X-MC-Unique: iC-otmjBMeq8BiXk9T3SBg-1 X-Mimecast-MFC-AGG-ID: iC-otmjBMeq8BiXk9T3SBg_1747223440 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223440; x=1747828240; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qrT7YVZqMqQb7VpCMB/6NXpFBdOsQA1eCj/jjnmWcsU=; b=UtTOUnxGnzNq0VX6mGdSYBT7siMgyqR0fWQEns2tywMmMPGhRylniOlGsuvhd9MD7G tHVtU/21+O/CeDAjwolhtna1nyuIwhQFw1bTl2WK1zHsSv7F0FyD1GFb2wgKdcC96hD+ HFXzmQPiDX+IJhJWn8AdnFpHEivqiJvMd2ptc+fLZQiJaV0hxUATQp8FFFehmBOGluJD O7uZfgFQOTPFQ4eSHhZ7rM/Ivf5Ygc0SOckwgmBlIrLQ1mMMeRjyOpKIJfKSizr4SXd8 A6a+PtDUKZMHRK/7wEug9JYErzxf/lPwlXtHDuCfXzmQRapNxqdJNht6dyXvTFoOsG9n 21LQ== X-Gm-Message-State: AOJu0Yw7eN+ahnDmfIdGUxvcHEg6r/kVWHXozS8jdQV4cH2oiruDuXKu +pqJrgRAVXgwbT6/0oOUm2wP5GynWnCG9IMStCeFmA2pK7F4d/Op6RyMI7kcyZNs9qit0YGdOtH z0cYhRCq2Oz7+rSJ2SsSDbMsYzlPw9aCPvqOb4aE8GMFLMMmawoxieRTmGT3GeXmKXciv03Mkcm UHkVFW4TGXt5hMoKu5QP4flebwtODJ0w== X-Gm-Gg: ASbGncuOz6O7OZpp7wzSraIWU0rixy0/3rXnpaolQsXLl/6mugTq71ARndA2PBDKYUh CC3VBh4YjCrhmNO80el+JvxgRudnBa21Fnl9Q43lfbNm4iilqnkupTUzlh8vyuyBKOOoHZdNpIM BJBB+rcT43SQ2EzSqHMdbA3L9ijRUa6M4Hi7CbjokCtqA8mM1eJuXbn1mm5RF/SPATveYJrM5J9 gyILfpXSQVzM9un7Mrsgi4qrdfnDv1rW5s/a1SBRRZg7tC+w/RxHbbUyLueKnAaerHT5DmGfGMv 7596dg== X-Received: by 2002:a05:600c:1d8c:b0:43c:fffc:786c with SMTP id 5b1f17b1804b1-442f21001bamr26369055e9.19.1747223440193; Wed, 14 May 2025 04:50:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHD+459asvramdbesDBgr0C2KhtZU5FoYyklFa4L6ngEPLqbdWvX2AtkCV6oxg23E/6mbjrtw== X-Received: by 2002:a05:600c:1d8c:b0:43c:fffc:786c with SMTP id 5b1f17b1804b1-442f21001bamr26368795e9.19.1747223439759; Wed, 14 May 2025 04:50:39 -0700 (PDT) Date: Wed, 14 May 2025 07:50:37 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 09/27] hw/pci: Fix SR-IOV VF number calculation Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1747223725007116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki pci_config_get_bar_addr() had a division by vf_stride. vf_stride needs to be non-zero when there are multiple VFs, but the specification does not prohibit to make it zero when there is only one VF. Do not perform the division for the first VF to avoid division by zero. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-2-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/pci/pci.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 6d9d3ce90f..039cf1e256 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1594,7 +1594,11 @@ static pcibus_t pci_config_get_bar_addr(PCIDevice *d= , int reg, pci_get_word(pf->config + sriov_cap + PCI_SRIOV_VF_OFFSET); uint16_t vf_stride =3D pci_get_word(pf->config + sriov_cap + PCI_SRIOV_VF_STRIDE); - uint32_t vf_num =3D (d->devfn - (pf->devfn + vf_offset)) / vf_stri= de; + uint32_t vf_num =3D d->devfn - (pf->devfn + vf_offset); + + if (vf_num) { + vf_num /=3D vf_stride; + } =20 if (type & PCI_BASE_ADDRESS_MEM_TYPE_64) { new_addr =3D pci_get_quad(pf->config + bar); --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223880; cv=none; d=zohomail.com; s=zohoarc; b=aS41mKqR7UQw2okZQ9jzNVsPSSo0yC2CJCbd7aUSIw5gYWbQy/x0wL9wdCw9bV7kXZMIPa3+39ue2Znykxu+nPLI/GTT7x4+bgGJ7WLBiX58wCKvRDK7vCPG+6hAgf7cfkbUNiarMj4wKnLSOOmh0lU5Vtb4covxIn8FLuz5cRc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223880; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IKAZdeC1S1a7fw9qgB21u9lSwuILgpD/qjXudGNtUBo=; b=bgYyL1bZwbMsflLIPPQo3yoopieM4e1fQX7lpttwT2DrsCt7OOwH6CPR063AzWTgSl/dfn0wyJ9Pqe+6IsziKZ+ciQaVeDNrAaA/5s5ro7jKyyLWEU02S2RZfY3aOIbinq/cUPQU32kJ+QNdeJSQh/N0VMLaVDLAg0sS95JzKkI= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223880465942.1904981798258; Wed, 14 May 2025 04:58:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdQ-0005tr-8T; Wed, 14 May 2025 07:50:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdM-0005t6-TO for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdK-000698-Td for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:48 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-85-X9p0NMbnNqaXxO46Q1MYSA-1; Wed, 14 May 2025 07:50:44 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43d209dc2d3so33227895e9.3 for ; Wed, 14 May 2025 04:50:43 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39ef8c7sm26238315e9.38.2025.05.14.04.50.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223445; 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: in-reply-to:in-reply-to:references:references; bh=IKAZdeC1S1a7fw9qgB21u9lSwuILgpD/qjXudGNtUBo=; b=Skxcvp1+YeWao0b5aXQO6t3217YYB/0P5yNGCDBn+PIasuwtyypnI3nSCIvkE01o06gRKv vqpboHJDbFbSjYS0s36ySb0SUVBH3sl2Q7kbm7lhwJ/lNjuVtQBvROsvPPMYsuEoPBHH4x HiQGpK0O7c5rFBweEB6mEOFkTXNi23c= X-MC-Unique: X9p0NMbnNqaXxO46Q1MYSA-1 X-Mimecast-MFC-AGG-ID: X9p0NMbnNqaXxO46Q1MYSA_1747223443 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223442; x=1747828242; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=IKAZdeC1S1a7fw9qgB21u9lSwuILgpD/qjXudGNtUBo=; b=miamk5nPyE745NfUaGYV/S9gfoTeoRMky4L78gJgote6uSZFh+AJjXcJnp0nDfE1Js EZxtKaL2v2JeGQLo9uNul40JlzMP43Bgy4sfC5few48YulJK2LjmIwhxqYmJluDrz+7q 4amEroGndPatvjLV6LlGkHpIKZ1SL7oMaLb7Bbfkow8gCIKluHABc1YRky2/0Di2gG1V Vsjo2oHmn/crsXCD8W5QIE3Gn1mxQLx1azOHJNyJ+L5ae11mdx7c6B4OzobdJA20V1vY qBokUM+ZMtT2zyKThx/IirrgRwOF/Zuan3LlATEAHbMKZKZp3ZGlqdKtIS6rcpexyju0 UQSA== X-Gm-Message-State: AOJu0Ywa5uft4Td4S/bM5/tJOmYPyo4a1vLh+03niLigpXKnIMQl57e8 vUE0dB/jBRWe3MCId9faWwNMtbcH6BG5SxF6bn4rjdxR2BVp+A+Y538PrUpmfuSao7WmoUDaun9 AVlOnmjuTlYOxHeVmAAjMwQTUkUw8MGhgjTL5y9jG2vm4DiWqYfQozfBQOAOCoejFQ7yEU7C28R FR0k641RXqgCbUyps7pWujfeKqpppVmA== X-Gm-Gg: ASbGnctoajoqPd9CQVQWe1mPQRJmZadngWpWADicWVXem1BhQHoOO3jWWZwofbd7WpU iU2Xew5TGFf+VHSeNC3DzwRXxwg2cM6YcGDKF1VFHHa0KcjCmS6mcsoRI8k98lhcGk+QMrgG8oL 8sFoUUoGmOToeo2K4z6QF1NPBI3rAd24JB1Z4YUDxrmHCb9YlQEwKMl5yJFRqyp0Txy+IHbdCyU Sc/JlROCJ6CjBGeSTzC1yRzy7O338JSXeUrJbDtIe8k2lAPksH6JtFwIT/+SCvtxkAxg8mbyBt7 NNisnw== X-Received: by 2002:a05:600c:3d0b:b0:43d:ac5:11ed with SMTP id 5b1f17b1804b1-442f2169637mr28554415e9.24.1747223442548; Wed, 14 May 2025 04:50:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEFAek8QV2KxEyF3x6dainSGzF5c68C+UJ4mOojewWvBDxJ2dgulkKshq5xW/wJzrkAJaJKbg== X-Received: by 2002:a05:600c:3d0b:b0:43d:ac5:11ed with SMTP id 5b1f17b1804b1-442f2169637mr28554145e9.24.1747223442085; Wed, 14 May 2025 04:50:42 -0700 (PDT) Date: Wed, 14 May 2025 07:50:39 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 10/27] pcie_sriov: Ensure PF and VF are mutually exclusive Message-ID: <92b6ce3dba26bd3734b528bda7f9a9dee2ee7bb4.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223881830019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki A device cannot be a SR-IOV PF and a VF at the same time. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-3-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/pci/pcie_sriov.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index 1eb4358256..109b2ebccc 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -42,6 +42,11 @@ bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, uint8_t *cfg =3D dev->config + offset; uint8_t *wmask; =20 + if (pci_is_vf(dev)) { + error_setg(errp, "a device cannot be a SR-IOV PF and a VF at the s= ame time"); + return false; + } + if (total_vfs && (uint32_t)devfn + (uint32_t)(total_vfs - 1) * vf_stride >=3D PCI_D= EVFN_MAX) { error_setg(errp, "VF addr overflows"); --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223554; cv=none; d=zohomail.com; s=zohoarc; b=ILH5/7KK4Jf5JLyD9gxLMeiHENo/lk2Bci7B2xF+Ei5LktzoGaYk1V9ARxln3OQOXC0uaj2c/vrZjHlExSlbXn6d0Edzwa0YYMyH3rQmGVLy2GCjv5VxqhtZ4xcIGT8EjPl13hP/yLAv3wo/qs85b7upLn3byevcO6ATiaTuIGY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223554; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eXEi+ZXhQRm8J6CUw9m455HBJJCx9rS1588hLPX09Vw=; b=ioLQV7yf4DTPMOJeLMEwkPFf3Bixows9MT2aXYKXsyrRpWlX46+5jq8qShIwnLLwE8iVEFBgmxbB5K/P7oMvN0J+6MxMLSV9n4V+Epw/m38s0cCsDcyR1BtazBD+Yf8w5ot7Z7r3L5Ioa9HTz2QDfx6upjl8e3vJZy87E/Dn8wA= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223554680269.00938861922475; Wed, 14 May 2025 04:52:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdX-0005uk-0Z; Wed, 14 May 2025 07:50:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdT-0005uY-Nv for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:55 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdR-0006An-Cg for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:55 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-299-vMOGQ0FjMZSiMStKBi6mTA-1; Wed, 14 May 2025 07:50:47 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43cfda30a3cso34303235e9.3 for ; Wed, 14 May 2025 04:50:47 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f396c052sm27867335e9.29.2025.05.14.04.50.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223450; 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: in-reply-to:in-reply-to:references:references; bh=eXEi+ZXhQRm8J6CUw9m455HBJJCx9rS1588hLPX09Vw=; b=gVEqvS9mF7v5pk2QzIMiek3OWKfUYI7nqsJww/I1/tM/ijA1Pgr2Lyuvf/NrhivVlAi4U5 GGF5VLjakoEh3kZb/KI4JFSW0gVsFShBWs5TbIlbNdm+6v9Q8YItFBKzwJtPsXsGew1WjH kYZ28AxHbQ0/6Av07/5QRGLAU2PzBR0= X-MC-Unique: vMOGQ0FjMZSiMStKBi6mTA-1 X-Mimecast-MFC-AGG-ID: vMOGQ0FjMZSiMStKBi6mTA_1747223446 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223446; x=1747828246; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=eXEi+ZXhQRm8J6CUw9m455HBJJCx9rS1588hLPX09Vw=; b=bPCHkx6f9yo9GtQNmscAz8j8oMVOL3HBs8sfrIF+vqSCa8ckJI0ocf1lMCg3687ASO 0OjwdSc20m4XpRjmnLiasDuRKeOB9lcShRCp9rOBSQxO6yNA1ZpNCssfwaT6ozPeWlGh ecVRDCDQDj6XpzPzH3MXW2vaGn2FPYnn2iS5EXCXOr8ToFQSSIdA9aZwAXXC9JFeOOL7 HNgWUA0SQCrIL4xKbN4h1/KezzCzr272An24tt759Bc+pTIasbPzxclAhjGZIRfjWACz 8CSRi2LkI8JquVQhBua8Rswry/icgsSSfT1i2SQlpwG+Uv9/o9NYuJl+wMxCTH0VBj9v v/gg== X-Gm-Message-State: AOJu0YyAEBeADuvWBaGoN1/PIrT7nLzIbNe0mo3rsvcKa5mGOpB7rQMm xxLBGOp6BHNELJd1kA6886SYb78YEGY8yeW+V4QW+oqdNc48sqVckco6fQRixWQX2VLfHSAsBrq lPNgV+/utL80Bye30DnkAH/E4L6VcRFDGlIS5zIUm/FxGHrxgOuVWg6C2N9bSO7wqdTONbt1AKE 1ujUf54keK2x/izxCIiiclAV3NnI5v8A== X-Gm-Gg: ASbGncsBIOvk5CNgeC/yMi5LW3AAnxaRqLh7owYzOFipbuRXut2Jrbi06Hl6qAR6iR2 T99US/DvZFUH4YV51w1zuGkPA4gX5TKsV6ItKVAMxOsqFZF+UZOwz5m0/zclQBbE9YN37w+JGHv kYDrGSCIjmLKz0VzkC3Nl3Xy2rvoCa+YEgiFvMSZzBaapKH5fSlMd3kiTWttEooPSucJq9SsHta 6WqHDetwLc52ayalmdXOBXfVQo9c7ClYJja9UzUXT3rfIj3cJqkzEY8S7AsldL3mgxUcnJsRG2N uuk16A== X-Received: by 2002:a05:600c:870a:b0:43d:47e:3205 with SMTP id 5b1f17b1804b1-442f20d6d7amr27483015e9.11.1747223445723; Wed, 14 May 2025 04:50:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHlS9jeWElE4FTTUUj1PM2YyRvbk8jqihcCPk1s1t3nKIlHdiQ1HT2pkDqb2xh6nTA1mSScdA== X-Received: by 2002:a05:600c:870a:b0:43d:47e:3205 with SMTP id 5b1f17b1804b1-442f20d6d7amr27482795e9.11.1747223445315; Wed, 14 May 2025 04:50:45 -0700 (PDT) Date: Wed, 14 May 2025 07:50:42 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 11/27] pcie_sriov: Check PCI Express for SR-IOV PF Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223555358116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki SR-IOV requires PCI Express. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-4-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/pci/pcie_sriov.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index 109b2ebccc..a5b546abe8 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -42,6 +42,11 @@ bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, uint8_t *cfg =3D dev->config + offset; uint8_t *wmask; =20 + if (!pci_is_express(dev)) { + error_setg(errp, "PCI Express is required for SR-IOV PF"); + return false; + } + if (pci_is_vf(dev)) { error_setg(errp, "a device cannot be a SR-IOV PF and a VF at the s= ame time"); return false; --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223803; cv=none; d=zohomail.com; s=zohoarc; b=Dt5n8pUfgIv+kQeNMZO1nBoIgl8g0fobV28WUBiXz25Hkk3ZaUTlHs9PZ48iXY+45mVH3P4KBIL2Usx6OO6artb5nivVYELTnXg0fUf4FvY46CQDWn+vBjh3R26nDKxEKGCXT2Eez9eioTIe2sw5gUhpYwziNB3XgyvDQcnBXIw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223803; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=V7Zupo9TXzFoN57AunOFGKvoge5PaWmgERKBYSwltWU=; b=dKUOKHupFPlm1PC049PEXMtJ2hM0D+FPRb49KMorwSfaENgSi+kz5uMS2QfzflrvLy7CqRTFdo+9XY3sQdxfGFn8TAoK9dm3y0ndSu77ub+DMTM8OFh7mVApt1LZgRH4Nf2wW0eih/myrjWxzkDdn8YZ7Q5OevNjaKSI+/SbBZ4= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223803986852.6399954238744; Wed, 14 May 2025 04:56:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdi-0005zE-9Q; Wed, 14 May 2025 07:51:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdW-0005um-Gh for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:58 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdQ-0006B9-Fx for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:57 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-351-e-DLj64jPCaWqTthRmhcbQ-1; Wed, 14 May 2025 07:50:50 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43ce8f82e66so35321995e9.3 for ; Wed, 14 May 2025 04:50:49 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39e853asm27343315e9.26.2025.05.14.04.50.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223451; 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: in-reply-to:in-reply-to:references:references; bh=V7Zupo9TXzFoN57AunOFGKvoge5PaWmgERKBYSwltWU=; b=OvHZmltNM8UI+7pZfqXWrZAodkB72fAfkZP6yIyCeSgTCP68GBSWCBveMcLmWjaeyZzZl8 WtZ5vpS8NWTlkGQ2nl4u81roEmWohVbF7jYl8GJ/dJZYx9IAkBXMefrIXG09+v+ZjT2i3Q RZpAEUI5XxK56lloQCpmSLWgY6xIl/4= X-MC-Unique: e-DLj64jPCaWqTthRmhcbQ-1 X-Mimecast-MFC-AGG-ID: e-DLj64jPCaWqTthRmhcbQ_1747223449 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223448; x=1747828248; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=V7Zupo9TXzFoN57AunOFGKvoge5PaWmgERKBYSwltWU=; b=WXlPeanW9OxoeiaCZrlYx/WayzYWnySuJltDWNRPKzb2z+cEAtSU3wZUrXmzz3M5d+ Gqb8Fi5Gw5vrEmcvzeiQfvFTO2puAirTLLoeXJcpFhzQYU+8OUEAJsk/q5sE6cZX2oM7 35NR9UaGazPj5KP6BSbTsAu7wVNI5K3njCqohDoV9gEhgI5dpnFDYOBT7Xxrljfa0FIN fe86d7ZHYAurkySDVxqfThzC3KYfontc4r9t/piH1iVBf58YxbMBL9AeHb2wHe8n4JJA O0Z5du71NpIdiO11vewEdLoG96yVMXrIXdcpDBhPhEX8mEuH6tbZIpMjOs0Cm/LzAUy0 MsYw== X-Gm-Message-State: AOJu0YwScQ7st9czvBFIDNfXqAEH32QLw3CoOk47/RoINChuBKMLy0oT mBjHYCEvYfpq7Wg9ffY+m8HlK+s+phyDVZKAMpOjFbL6ADaGEYnMgufZb6LUWGgMN8q0SQgxQTg hM9Ytp0EQ/C1KTXimowAN0aaVcKEI3r44AkSLGFoO4QhOUk35qG4AOS5pRe8/gkK975yNaH/DpK jr7M647BG0Kwap6RkeXCNIQIf+SQ/9fw== X-Gm-Gg: ASbGnct0PJkouVajgfHOdByJ3F62nycB5B2uJMJj0r3ToA/ikU2zOAmeLPZGvnpqCCh mM96b5rdnnZy5yHV5zuNMW/KxmM0OndyEHy8ANWcpSJTJzX4Vh3OGYKhQX4G06kwFXn2TJSnAbr iGt4pRIPK/6o6bdlEmgO64j6DOach82WOzVDh1mBY7qI4ERGuw4pN2PDjnmBIKxQcvQKEh6J/0w JHDZvr5FpFVGEFq+Q5x1IPiZBzmvqpF8h+B4Ha2sWU+SMF4ZRuF5UrVbzraW3IBIkCX/WegdWqp Q/vI3Q== X-Received: by 2002:a05:600c:3d0c:b0:43c:f44c:72b7 with SMTP id 5b1f17b1804b1-442f20db193mr30206995e9.14.1747223448083; Wed, 14 May 2025 04:50:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEmrfl3MCljC2ppQUdj6MHzN9h2q4LtNoYCsEfRjo9FWtM3Qr+3gDM8CX3oEgNQ3aSNpqicUQ== X-Received: by 2002:a05:600c:3d0c:b0:43c:f44c:72b7 with SMTP id 5b1f17b1804b1-442f20db193mr30206655e9.14.1747223447573; Wed, 14 May 2025 04:50:47 -0700 (PDT) Date: Wed, 14 May 2025 07:50:45 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 12/27] pcie_sriov: Allow user to create SR-IOV device Message-ID: <19e55471d4e8a494cfda7470e701829e3a873bdc.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223805735116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki A user can create a SR-IOV device by specifying the PF with the sriov-pf property of the VFs. The VFs must be added before the PF. A user-creatable VF must have PCIDeviceClass::sriov_vf_user_creatable set. Such a VF cannot refer to the PF because it is created before the PF. A PF that user-creatable VFs can be attached calls pcie_sriov_pf_init_from_user_created_vfs() during realization and pcie_sriov_pf_exit() when exiting. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-5-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/pci/pci_device.h | 6 +- include/hw/pci/pcie_sriov.h | 18 +++ hw/pci/pci.c | 62 +++++--- hw/pci/pcie_sriov.c | 288 ++++++++++++++++++++++++++++-------- 4 files changed, 291 insertions(+), 83 deletions(-) diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index 345b12eaac..e41d95b0b0 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -38,6 +38,8 @@ struct PCIDeviceClass { uint16_t subsystem_id; /* only for header type =3D 0 */ =20 const char *romfile; /* rom bar */ + + bool sriov_vf_user_creatable; }; =20 enum PCIReqIDType { @@ -177,6 +179,8 @@ struct PCIDevice { * realizing the device. */ uint32_t max_bounce_buffer_size; + + char *sriov_pf; }; =20 static inline int pci_intx(PCIDevice *pci_dev) @@ -209,7 +213,7 @@ static inline int pci_is_express_downstream_port(const = PCIDevice *d) =20 static inline int pci_is_vf(const PCIDevice *d) { - return d->exp.sriov_vf.pf !=3D NULL; + return d->sriov_pf || d->exp.sriov_vf.pf !=3D NULL; } =20 static inline uint32_t pci_config_size(const PCIDevice *d) diff --git a/include/hw/pci/pcie_sriov.h b/include/hw/pci/pcie_sriov.h index c5d2d318d3..f75b8f22ee 100644 --- a/include/hw/pci/pcie_sriov.h +++ b/include/hw/pci/pcie_sriov.h @@ -18,6 +18,7 @@ typedef struct PCIESriovPF { uint8_t vf_bar_type[PCI_NUM_REGIONS]; /* Store type for each VF bar = */ PCIDevice **vf; /* Pointer to an array of num_vfs VF devices */ + bool vf_user_created; /* If VFs are created by user */ } PCIESriovPF; =20 typedef struct PCIESriovVF { @@ -40,6 +41,23 @@ void pcie_sriov_pf_init_vf_bar(PCIDevice *dev, int regio= n_num, void pcie_sriov_vf_register_bar(PCIDevice *dev, int region_num, MemoryRegion *memory); =20 +/** + * pcie_sriov_pf_init_from_user_created_vfs() - Initialize PF with user-cr= eated + * VFs. + * @dev: A PCIe device being realized. + * @offset: The offset of the SR-IOV capability. + * @errp: pointer to Error*, to store an error if it happens. + * + * Return: The size of added capability. 0 if the user did not create VFs. + * -1 if failed. + */ +int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDevice *dev, + uint16_t offset, + Error **errp); + +bool pcie_sriov_register_device(PCIDevice *dev, Error **errp); +void pcie_sriov_unregister_device(PCIDevice *dev); + /* * Default (minimal) page size support values * as required by the SR/IOV standard: diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 039cf1e256..de07096347 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -101,6 +101,7 @@ static const Property pci_props[] =3D { QEMU_PCIE_ARI_NEXTFN_1_BITNR, false), DEFINE_PROP_SIZE32("x-max-bounce-buffer-size", PCIDevice, max_bounce_buffer_size, DEFAULT_MAX_BOUNCE_BUFFER_SIZ= E), + DEFINE_PROP_STRING("sriov-pf", PCIDevice, sriov_pf), DEFINE_PROP_BIT("x-pcie-ext-tag", PCIDevice, cap_present, QEMU_PCIE_EXT_TAG_BITNR, true), { .name =3D "busnr", .info =3D &prop_pci_busnr }, @@ -1112,13 +1113,8 @@ static void pci_init_multifunction(PCIBus *bus, PCID= evice *dev, Error **errp) dev->config[PCI_HEADER_TYPE] |=3D PCI_HEADER_TYPE_MULTI_FUNCTION; } =20 - /* - * With SR/IOV and ARI, a device at function 0 need not be a multifunc= tion - * device, as it may just be a VF that ended up with function 0 in - * the legacy PCI interpretation. Avoid failing in such cases: - */ - if (pci_is_vf(dev) && - dev->exp.sriov_vf.pf->cap_present & QEMU_PCI_CAP_MULTIFUNCTION) { + /* SR/IOV is not handled here. */ + if (pci_is_vf(dev)) { return; } =20 @@ -1151,7 +1147,8 @@ static void pci_init_multifunction(PCIBus *bus, PCIDe= vice *dev, Error **errp) } /* function 0 indicates single function, so function > 0 must be NULL = */ for (func =3D 1; func < PCI_FUNC_MAX; ++func) { - if (bus->devices[PCI_DEVFN(slot, func)]) { + PCIDevice *device =3D bus->devices[PCI_DEVFN(slot, func)]; + if (device && !pci_is_vf(device)) { error_setg(errp, "PCI: %x.0 indicates single function, " "but %x.%x is already populated.", slot, slot, func); @@ -1439,6 +1436,7 @@ static void pci_qdev_unrealize(DeviceState *dev) =20 pci_unregister_io_regions(pci_dev); pci_del_option_rom(pci_dev); + pcie_sriov_unregister_device(pci_dev); =20 if (pc->exit) { pc->exit(pci_dev); @@ -1470,7 +1468,6 @@ void pci_register_bar(PCIDevice *pci_dev, int region_= num, pcibus_t size =3D memory_region_size(memory); uint8_t hdr_type; =20 - assert(!pci_is_vf(pci_dev)); /* VFs must use pcie_sriov_vf_register_ba= r */ assert(region_num >=3D 0); assert(region_num < PCI_NUM_REGIONS); assert(is_power_of_2(size)); @@ -1482,7 +1479,6 @@ void pci_register_bar(PCIDevice *pci_dev, int region_= num, =20 r =3D &pci_dev->io_regions[region_num]; assert(!r->size); - r->addr =3D PCI_BAR_UNMAPPED; r->size =3D size; r->type =3D type; r->memory =3D memory; @@ -1490,22 +1486,35 @@ void pci_register_bar(PCIDevice *pci_dev, int regio= n_num, ? pci_get_bus(pci_dev)->address_space_io : pci_get_bus(pci_dev)->address_space_mem; =20 - wmask =3D ~(size - 1); - if (region_num =3D=3D PCI_ROM_SLOT) { - /* ROM enable bit is writable */ - wmask |=3D PCI_ROM_ADDRESS_ENABLE; - } + if (pci_is_vf(pci_dev)) { + PCIDevice *pf =3D pci_dev->exp.sriov_vf.pf; + assert(!pf || type =3D=3D pf->exp.sriov_pf.vf_bar_type[region_num]= ); =20 - addr =3D pci_bar(pci_dev, region_num); - pci_set_long(pci_dev->config + addr, type); - - if (!(r->type & PCI_BASE_ADDRESS_SPACE_IO) && - r->type & PCI_BASE_ADDRESS_MEM_TYPE_64) { - pci_set_quad(pci_dev->wmask + addr, wmask); - pci_set_quad(pci_dev->cmask + addr, ~0ULL); + r->addr =3D pci_bar_address(pci_dev, region_num, r->type, r->size); + if (r->addr !=3D PCI_BAR_UNMAPPED) { + memory_region_add_subregion_overlap(r->address_space, + r->addr, r->memory, 1); + } } else { - pci_set_long(pci_dev->wmask + addr, wmask & 0xffffffff); - pci_set_long(pci_dev->cmask + addr, 0xffffffff); + r->addr =3D PCI_BAR_UNMAPPED; + + wmask =3D ~(size - 1); + if (region_num =3D=3D PCI_ROM_SLOT) { + /* ROM enable bit is writable */ + wmask |=3D PCI_ROM_ADDRESS_ENABLE; + } + + addr =3D pci_bar(pci_dev, region_num); + pci_set_long(pci_dev->config + addr, type); + + if (!(r->type & PCI_BASE_ADDRESS_SPACE_IO) && + r->type & PCI_BASE_ADDRESS_MEM_TYPE_64) { + pci_set_quad(pci_dev->wmask + addr, wmask); + pci_set_quad(pci_dev->cmask + addr, ~0ULL); + } else { + pci_set_long(pci_dev->wmask + addr, wmask & 0xffffffff); + pci_set_long(pci_dev->cmask + addr, 0xffffffff); + } } } =20 @@ -2272,6 +2281,11 @@ static void pci_qdev_realize(DeviceState *qdev, Erro= r **errp) } } =20 + if (!pcie_sriov_register_device(pci_dev, errp)) { + pci_qdev_unrealize(DEVICE(pci_dev)); + return; + } + /* * A PCIe Downstream Port that do not have ARI Forwarding enabled must * associate only Device 0 with the device attached to the bus diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index a5b546abe8..08f707e847 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -15,11 +15,12 @@ #include "hw/pci/pcie.h" #include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" -#include "qemu/error-report.h" #include "qemu/range.h" #include "qapi/error.h" #include "trace.h" =20 +static GHashTable *pfs; + static void unparent_vfs(PCIDevice *dev, uint16_t total_vfs) { for (uint16_t i =3D 0; i < total_vfs; i++) { @@ -31,13 +32,43 @@ static void unparent_vfs(PCIDevice *dev, uint16_t total= _vfs) dev->exp.sriov_pf.vf =3D NULL; } =20 -bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, - const char *vfname, uint16_t vf_dev_id, - uint16_t init_vfs, uint16_t total_vfs, - uint16_t vf_offset, uint16_t vf_stride, - Error **errp) +static void register_vfs(PCIDevice *dev) +{ + uint16_t num_vfs; + uint16_t i; + uint16_t sriov_cap =3D dev->exp.sriov_cap; + + assert(sriov_cap > 0); + num_vfs =3D pci_get_word(dev->config + sriov_cap + PCI_SRIOV_NUM_VF); + + trace_sriov_register_vfs(dev->name, PCI_SLOT(dev->devfn), + PCI_FUNC(dev->devfn), num_vfs); + for (i =3D 0; i < num_vfs; i++) { + pci_set_enabled(dev->exp.sriov_pf.vf[i], true); + } + + pci_set_word(dev->wmask + sriov_cap + PCI_SRIOV_NUM_VF, 0); +} + +static void unregister_vfs(PCIDevice *dev) +{ + uint8_t *cfg =3D dev->config + dev->exp.sriov_cap; + uint16_t i; + + trace_sriov_unregister_vfs(dev->name, PCI_SLOT(dev->devfn), + PCI_FUNC(dev->devfn)); + for (i =3D 0; i < pci_get_word(cfg + PCI_SRIOV_TOTAL_VF); i++) { + pci_set_enabled(dev->exp.sriov_pf.vf[i], false); + } + + pci_set_word(dev->wmask + dev->exp.sriov_cap + PCI_SRIOV_NUM_VF, 0xfff= f); +} + +static bool pcie_sriov_pf_init_common(PCIDevice *dev, uint16_t offset, + uint16_t vf_dev_id, uint16_t init_vf= s, + uint16_t total_vfs, uint16_t vf_offs= et, + uint16_t vf_stride, Error **errp) { - BusState *bus =3D qdev_get_parent_bus(&dev->qdev); int32_t devfn =3D dev->devfn + vf_offset; uint8_t *cfg =3D dev->config + offset; uint8_t *wmask; @@ -94,6 +125,28 @@ bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, =20 qdev_prop_set_bit(&dev->qdev, "multifunction", true); =20 + return true; +} + +bool pcie_sriov_pf_init(PCIDevice *dev, uint16_t offset, + const char *vfname, uint16_t vf_dev_id, + uint16_t init_vfs, uint16_t total_vfs, + uint16_t vf_offset, uint16_t vf_stride, + Error **errp) +{ + BusState *bus =3D qdev_get_parent_bus(&dev->qdev); + int32_t devfn =3D dev->devfn + vf_offset; + + if (pfs && g_hash_table_contains(pfs, dev->qdev.id)) { + error_setg(errp, "attaching user-created SR-IOV VF unsupported"); + return false; + } + + if (!pcie_sriov_pf_init_common(dev, offset, vf_dev_id, init_vfs, + total_vfs, vf_offset, vf_stride, errp))= { + return false; + } + dev->exp.sriov_pf.vf =3D g_new(PCIDevice *, total_vfs); =20 for (uint16_t i =3D 0; i < total_vfs; i++) { @@ -123,7 +176,22 @@ void pcie_sriov_pf_exit(PCIDevice *dev) { uint8_t *cfg =3D dev->config + dev->exp.sriov_cap; =20 - unparent_vfs(dev, pci_get_word(cfg + PCI_SRIOV_TOTAL_VF)); + if (dev->exp.sriov_pf.vf_user_created) { + uint16_t ven_id =3D pci_get_word(dev->config + PCI_VENDOR_ID); + uint16_t total_vfs =3D pci_get_word(dev->config + PCI_SRIOV_TOTAL_= VF); + uint16_t vf_dev_id =3D pci_get_word(dev->config + PCI_SRIOV_VF_DID= ); + + unregister_vfs(dev); + + for (uint16_t i =3D 0; i < total_vfs; i++) { + dev->exp.sriov_pf.vf[i]->exp.sriov_vf.pf =3D NULL; + + pci_config_set_vendor_id(dev->exp.sriov_pf.vf[i]->config, ven_= id); + pci_config_set_device_id(dev->exp.sriov_pf.vf[i]->config, vf_d= ev_id); + } + } else { + unparent_vfs(dev, pci_get_word(cfg + PCI_SRIOV_TOTAL_VF)); + } } =20 void pcie_sriov_pf_init_vf_bar(PCIDevice *dev, int region_num, @@ -156,69 +224,173 @@ void pcie_sriov_pf_init_vf_bar(PCIDevice *dev, int r= egion_num, void pcie_sriov_vf_register_bar(PCIDevice *dev, int region_num, MemoryRegion *memory) { - PCIIORegion *r; - PCIBus *bus =3D pci_get_bus(dev); uint8_t type; - pcibus_t size =3D memory_region_size(memory); =20 - assert(pci_is_vf(dev)); /* PFs must use pci_register_bar */ - assert(region_num >=3D 0); - assert(region_num < PCI_NUM_REGIONS); + assert(dev->exp.sriov_vf.pf); type =3D dev->exp.sriov_vf.pf->exp.sriov_pf.vf_bar_type[region_num]; =20 - if (!is_power_of_2(size)) { - error_report("%s: PCI region size must be a power" - " of two - type=3D0x%x, size=3D0x%"FMT_PCIBUS, - __func__, type, size); - exit(1); - } - - r =3D &dev->io_regions[region_num]; - r->memory =3D memory; - r->address_space =3D - type & PCI_BASE_ADDRESS_SPACE_IO - ? bus->address_space_io - : bus->address_space_mem; - r->size =3D size; - r->type =3D type; - - r->addr =3D pci_bar_address(dev, region_num, r->type, r->size); - if (r->addr !=3D PCI_BAR_UNMAPPED) { - memory_region_add_subregion_overlap(r->address_space, - r->addr, r->memory, 1); - } + return pci_register_bar(dev, region_num, type, memory); } =20 -static void register_vfs(PCIDevice *dev) +static gint compare_vf_devfns(gconstpointer a, gconstpointer b) { - uint16_t num_vfs; - uint16_t i; - uint16_t sriov_cap =3D dev->exp.sriov_cap; - - assert(sriov_cap > 0); - num_vfs =3D pci_get_word(dev->config + sriov_cap + PCI_SRIOV_NUM_VF); - - trace_sriov_register_vfs(dev->name, PCI_SLOT(dev->devfn), - PCI_FUNC(dev->devfn), num_vfs); - for (i =3D 0; i < num_vfs; i++) { - pci_set_enabled(dev->exp.sriov_pf.vf[i], true); - } - - pci_set_word(dev->wmask + sriov_cap + PCI_SRIOV_NUM_VF, 0); + return (*(PCIDevice **)a)->devfn - (*(PCIDevice **)b)->devfn; } =20 -static void unregister_vfs(PCIDevice *dev) +int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDevice *dev, + uint16_t offset, + Error **errp) { - uint8_t *cfg =3D dev->config + dev->exp.sriov_cap; + GPtrArray *pf; + PCIDevice **vfs; + BusState *bus =3D qdev_get_parent_bus(DEVICE(dev)); + uint16_t ven_id =3D pci_get_word(dev->config + PCI_VENDOR_ID); + uint16_t vf_dev_id; + uint16_t vf_offset; + uint16_t vf_stride; uint16_t i; =20 - trace_sriov_unregister_vfs(dev->name, PCI_SLOT(dev->devfn), - PCI_FUNC(dev->devfn)); - for (i =3D 0; i < pci_get_word(cfg + PCI_SRIOV_TOTAL_VF); i++) { - pci_set_enabled(dev->exp.sriov_pf.vf[i], false); + if (!pfs || !dev->qdev.id) { + return 0; } =20 - pci_set_word(dev->wmask + dev->exp.sriov_cap + PCI_SRIOV_NUM_VF, 0xfff= f); + pf =3D g_hash_table_lookup(pfs, dev->qdev.id); + if (!pf) { + return 0; + } + + if (pf->len > UINT16_MAX) { + error_setg(errp, "too many VFs"); + return -1; + } + + g_ptr_array_sort(pf, compare_vf_devfns); + vfs =3D (void *)pf->pdata; + + if (vfs[0]->devfn <=3D dev->devfn) { + error_setg(errp, "a VF function number is less than the PF functio= n number"); + return -1; + } + + vf_dev_id =3D pci_get_word(vfs[0]->config + PCI_DEVICE_ID); + vf_offset =3D vfs[0]->devfn - dev->devfn; + vf_stride =3D pf->len < 2 ? 0 : vfs[1]->devfn - vfs[0]->devfn; + + for (i =3D 0; i < pf->len; i++) { + if (bus !=3D qdev_get_parent_bus(&vfs[i]->qdev)) { + error_setg(errp, "SR-IOV VF parent bus mismatches with PF"); + return -1; + } + + if (ven_id !=3D pci_get_word(vfs[i]->config + PCI_VENDOR_ID)) { + error_setg(errp, "SR-IOV VF vendor ID mismatches with PF"); + return -1; + } + + if (vf_dev_id !=3D pci_get_word(vfs[i]->config + PCI_DEVICE_ID)) { + error_setg(errp, "inconsistent SR-IOV VF device IDs"); + return -1; + } + + for (size_t j =3D 0; j < PCI_NUM_REGIONS; j++) { + if (vfs[i]->io_regions[j].size !=3D vfs[0]->io_regions[j].size= || + vfs[i]->io_regions[j].type !=3D vfs[0]->io_regions[j].type= ) { + error_setg(errp, "inconsistent SR-IOV BARs"); + return -1; + } + } + + if (vfs[i]->devfn - vfs[0]->devfn !=3D vf_stride * i) { + error_setg(errp, "inconsistent SR-IOV stride"); + return -1; + } + } + + if (!pcie_sriov_pf_init_common(dev, offset, vf_dev_id, pf->len, + pf->len, vf_offset, vf_stride, errp)) { + return -1; + } + + for (i =3D 0; i < pf->len; i++) { + vfs[i]->exp.sriov_vf.pf =3D dev; + vfs[i]->exp.sriov_vf.vf_number =3D i; + + /* set vid/did according to sr/iov spec - they are not used */ + pci_config_set_vendor_id(vfs[i]->config, 0xffff); + pci_config_set_device_id(vfs[i]->config, 0xffff); + } + + dev->exp.sriov_pf.vf =3D vfs; + dev->exp.sriov_pf.vf_user_created =3D true; + + for (i =3D 0; i < PCI_NUM_REGIONS; i++) { + PCIIORegion *region =3D &vfs[0]->io_regions[i]; + + if (region->size) { + pcie_sriov_pf_init_vf_bar(dev, i, region->type, region->size); + } + } + + return PCI_EXT_CAP_SRIOV_SIZEOF; +} + +bool pcie_sriov_register_device(PCIDevice *dev, Error **errp) +{ + if (!dev->exp.sriov_pf.vf && dev->qdev.id && + pfs && g_hash_table_contains(pfs, dev->qdev.id)) { + error_setg(errp, "attaching user-created SR-IOV VF unsupported"); + return false; + } + + if (dev->sriov_pf) { + PCIDevice *pci_pf; + GPtrArray *pf; + + if (!PCI_DEVICE_GET_CLASS(dev)->sriov_vf_user_creatable) { + error_setg(errp, "user cannot create SR-IOV VF with this devic= e type"); + return false; + } + + if (!pci_is_express(dev)) { + error_setg(errp, "PCI Express is required for SR-IOV VF"); + return false; + } + + if (!pci_qdev_find_device(dev->sriov_pf, &pci_pf)) { + error_setg(errp, "PCI device specified as SR-IOV PF already ex= ists"); + return false; + } + + if (!pfs) { + pfs =3D g_hash_table_new_full(g_str_hash, g_str_equal, g_free,= NULL); + } + + pf =3D g_hash_table_lookup(pfs, dev->sriov_pf); + if (!pf) { + pf =3D g_ptr_array_new(); + g_hash_table_insert(pfs, g_strdup(dev->sriov_pf), pf); + } + + g_ptr_array_add(pf, dev); + } + + return true; +} + +void pcie_sriov_unregister_device(PCIDevice *dev) +{ + if (dev->sriov_pf && pfs) { + GPtrArray *pf =3D g_hash_table_lookup(pfs, dev->sriov_pf); + + if (pf) { + g_ptr_array_remove_fast(pf, dev); + + if (!pf->len) { + g_hash_table_remove(pfs, dev->sriov_pf); + g_ptr_array_free(pf, FALSE); + } + } + } } =20 void pcie_sriov_config_write(PCIDevice *dev, uint32_t address, @@ -314,7 +486,7 @@ void pcie_sriov_pf_add_sup_pgsize(PCIDevice *dev, uint1= 6_t opt_sup_pgsize) =20 uint16_t pcie_sriov_vf_number(PCIDevice *dev) { - assert(pci_is_vf(dev)); + assert(dev->exp.sriov_vf.pf); return dev->exp.sriov_vf.vf_number; } =20 --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223656; cv=none; d=zohomail.com; s=zohoarc; b=Qm0JzPGZ6K+p1fTRRkdfTQRR+tNpUuqrrep3qB3LjmrhjDk3JbI/N+d8whrpQVMu856Uw3dEEmnZ0hv9Lb0pDGl/xYQv3xKE5scfi0OXU6/u5k7awTN4D8414aoCWxi4HHR7N1xJoqKOdFMP/70LHvnwaZT/GQi36rJJhI1E4uk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223656; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=J0C8HFVJ2DNJTeZFn2iX0dFCwIr6ly7cQ6TeLyNcp1w=; b=JLcSmqZCJRceRbcurD+kQJOeI6JeTLmrhEYX67ENe/31EOGgs48EWuJA30AxlHkHSm2c2fcssxO7XQcmp968Jz5msovPfvE/eG+FezP2ayg916aNLJ3twstZwjnNcQMCrl+sDpUlNz9t/jI/kgTn05aKhuNVsetWsHIuAZ9et50= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223656737512.2623516134435; Wed, 14 May 2025 04:54:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdp-00069m-0W; Wed, 14 May 2025 07:51:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdd-0005yS-DI for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdS-0006CB-73 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:05 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-586-syJ1e0rWMlqdW2qSEnmhuw-1; Wed, 14 May 2025 07:50:52 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43cfda30a3cso34303775e9.3 for ; Wed, 14 May 2025 04:50:51 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f337db3bsm26059625e9.9.2025.05.14.04.50.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223453; 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: in-reply-to:in-reply-to:references:references; bh=J0C8HFVJ2DNJTeZFn2iX0dFCwIr6ly7cQ6TeLyNcp1w=; b=g0wCt2nFYiZS4C7fF6cXoiXarzaALBSw/F8kDx3Yhi6T5f47Qki8v5JB5SCj+ZjrP9sXEK IpzKTbucon8DyBjj8IuUwmYzrJtSNm9p1OBz7ZxwrVMD8CH6TPWRxBmXXtpSPF4QUNwRJC PjR/pmfWjnJarQatt4XNaWmiCdeTDSU= X-MC-Unique: syJ1e0rWMlqdW2qSEnmhuw-1 X-Mimecast-MFC-AGG-ID: syJ1e0rWMlqdW2qSEnmhuw_1747223451 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223450; x=1747828250; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=J0C8HFVJ2DNJTeZFn2iX0dFCwIr6ly7cQ6TeLyNcp1w=; b=pcYUN7x+ECU/egFMSv1JGPI0tTsGXa2zstRY2aoS9/a96SQ+K6cBnSvYITAEHNYV7Z puiXn9z2YxHXrzRiBzb0w53EmoLbvsEP46E9Bnz35ik5iNKq3nHjJhBILQJxSqNef1rg bPSDguEMFZ49RImctwDuyaAe4+QrVV6M1SC2OKLMPvoRfMrgsRz3/g1dQgYE8nYcQIfn vYRu6FjIIF76wu34BQSV2Z+9/8SPJPylOZk+cQV0LLLnzpBUarlgB/suSfqBRwptEK3F awuipGMCqa334q2XcLws2okt6nRkIj5bhjJ9WpkHxi6CKg+djZVVclh0l3kf4qYxjO0N CD8Q== X-Gm-Message-State: AOJu0Ywyib4HzqdAug24009CGW44HUBzhq1pr0/PO7ySjc06uxeVmZ7j HotyaSyXFm/WpTYK46Ge7EwC6NgXhsNJ1nVwrk57CFLoO9iyoDrhH2wgbHhuUcafY74UfxmgvDO ONA4QBlEFsMQgw25jRFdhqhi/ipp0MlLoI9ov9JcBhwbrJ3/W8cgfZu91Wz5ADKk7dBsyd77c/R 5lonlLJuUuk0WWIvH1xEJYzOYfQxTpbQ== X-Gm-Gg: ASbGncvRRMXLsIRUiOo3XZwJ1NsKBQ0ORTDrV7ziUj90hurMd9VHWkQSz4WDfvxF8Ys HT/dtqZhb7YXMVStRTl+7X15zNGFEOePrjKKYYfwD37832BlrVK2HCduDixQpCua7K7Poi96jsh uhtfnXR3+Q9NdY9fL4bCsl1xH+pD+t/fWqCkhjh33hv/Nr1MhEM5cj0/MAMmkrN3vGSa2nrZumD kxcMdkw2p3biDdCqYo6/DeoGHOs4ZVtEsZpCeiz2KCZOYcfKvpPDvjUNCEizwRSzY6N4jDLBhOQ 8fBPUg== X-Received: by 2002:a05:6000:2401:b0:3a0:b784:883f with SMTP id ffacd0b85a97d-3a3496b8ab0mr2086020f8f.23.1747223450367; Wed, 14 May 2025 04:50:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFVheJh9Ge6MGKZLCBFHzmHjWYnnok4EJzgVkPf6YBhadDBr7Eyn2DiSFdDzF18VIOVyY1bLg== X-Received: by 2002:a05:6000:2401:b0:3a0:b784:883f with SMTP id ffacd0b85a97d-3a3496b8ab0mr2086000f8f.23.1747223449969; Wed, 14 May 2025 04:50:49 -0700 (PDT) Date: Wed, 14 May 2025 07:50:47 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin Subject: [PULL 13/27] virtio-pci: Implement SR-IOV PF Message-ID: <3f9cfaa92c96d604e98f16ade5af4742460e4c0f.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223658425116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki Allow user to attach SR-IOV VF to a virtio-pci PF. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-6-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/virtio/virtio-pci.h | 1 + hw/virtio/virtio-pci.c | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/hw/virtio/virtio-pci.h b/include/hw/virtio/virtio-pci.h index 31ec144509..1dbc3851b0 100644 --- a/include/hw/virtio/virtio-pci.h +++ b/include/hw/virtio/virtio-pci.h @@ -155,6 +155,7 @@ struct VirtIOPCIProxy { uint32_t modern_io_bar_idx; uint32_t modern_mem_bar_idx; int config_cap; + uint16_t last_pcie_cap_offset; uint32_t flags; bool disable_modern; bool ignore_backend_features; diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 0fa8fe4955..fee65d3645 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1962,6 +1962,7 @@ static void virtio_pci_device_plugged(DeviceState *d,= Error **errp) uint8_t *config; uint32_t size; VirtIODevice *vdev =3D virtio_bus_get_device(bus); + int16_t res; =20 /* * Virtio capabilities present without @@ -2109,6 +2110,14 @@ static void virtio_pci_device_plugged(DeviceState *d= , Error **errp) pci_register_bar(&proxy->pci_dev, proxy->legacy_io_bar_idx, PCI_BASE_ADDRESS_SPACE_IO, &proxy->bar); } + + res =3D pcie_sriov_pf_init_from_user_created_vfs(&proxy->pci_dev, + proxy->last_pcie_cap_of= fset, + errp); + if (res > 0) { + proxy->last_pcie_cap_offset +=3D res; + virtio_add_feature(&vdev->host_features, VIRTIO_F_SR_IOV); + } } =20 static void virtio_pci_device_unplugged(DeviceState *d) @@ -2199,7 +2208,7 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Er= ror **errp) =20 if (pcie_port && pci_is_express(pci_dev)) { int pos; - uint16_t last_pcie_cap_offset =3D PCI_CONFIG_SPACE_SIZE; + proxy->last_pcie_cap_offset =3D PCI_CONFIG_SPACE_SIZE; =20 pos =3D pcie_endpoint_cap_init(pci_dev, 0); assert(pos > 0); @@ -2216,9 +2225,9 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Er= ror **errp) pci_set_word(pci_dev->config + pos + PCI_PM_PMC, 0x3); =20 if (proxy->flags & VIRTIO_PCI_FLAG_AER) { - pcie_aer_init(pci_dev, PCI_ERR_VER, last_pcie_cap_offset, + pcie_aer_init(pci_dev, PCI_ERR_VER, proxy->last_pcie_cap_offse= t, PCI_ERR_SIZEOF, NULL); - last_pcie_cap_offset +=3D PCI_ERR_SIZEOF; + proxy->last_pcie_cap_offset +=3D PCI_ERR_SIZEOF; } =20 if (proxy->flags & VIRTIO_PCI_FLAG_INIT_DEVERR) { @@ -2243,9 +2252,9 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Er= ror **errp) } =20 if (proxy->flags & VIRTIO_PCI_FLAG_ATS) { - pcie_ats_init(pci_dev, last_pcie_cap_offset, + pcie_ats_init(pci_dev, proxy->last_pcie_cap_offset, proxy->flags & VIRTIO_PCI_FLAG_ATS_PAGE_ALIGNED); - last_pcie_cap_offset +=3D PCI_EXT_CAP_ATS_SIZEOF; + proxy->last_pcie_cap_offset +=3D PCI_EXT_CAP_ATS_SIZEOF; } =20 if (proxy->flags & VIRTIO_PCI_FLAG_INIT_FLR) { @@ -2273,6 +2282,7 @@ static void virtio_pci_exit(PCIDevice *pci_dev) !pci_bus_is_root(pci_get_bus(pci_dev)); bool modern_pio =3D proxy->flags & VIRTIO_PCI_FLAG_MODERN_PIO_NOTIFY; =20 + pcie_sriov_pf_exit(&proxy->pci_dev); msix_uninit_exclusive_bar(pci_dev); if (proxy->flags & VIRTIO_PCI_FLAG_AER && pcie_port && pci_is_express(pci_dev)) { --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223748; cv=none; d=zohomail.com; s=zohoarc; b=CuQImQMayihXOeWrDKf5WrMKdU78nl6btmOv80C3N/IgeoNpLLLhJwqnKQgF66LPCnlnfQyLatWmN5UIQFL48vd8J7EC3ehcWpkXPlgquQidRyCe0xT2FYfYwBWpFKYAIsNrMUQMFp8zgI2oW+1Pht2s1kTbzsMIQE1qqz15bME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223748; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=scQGANjf5Zg9Z+VVAOZFzRgXSundnohTLR5TyNGPrwM=; b=cZU5euKOF8uq/Br+VHlKgHSiH0MYFVsvhyYgTpZ5eyW7Boofixwq0/WsSxWDv83/aTYpADgXHeaYoKP0qTWkx0CvC3DZi8XE1b8wyAHIi4Yj+lCsFXgylWXpNHXQ4nYOz4PHuKrGbNm700LZa6UNE5Nog47nCUVPLcR2Ysm6rMM= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223748168281.5577581355391; Wed, 14 May 2025 04:55:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdi-00065K-C8; Wed, 14 May 2025 07:51:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdd-0005yR-Cq for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:06 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdW-0006Dt-A6 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:50:59 -0400 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-614-7xd1HfThOBKcqEujAQaAhQ-1; Wed, 14 May 2025 07:50:54 -0400 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-3a0b570a73eso3858176f8f.1 for ; Wed, 14 May 2025 04:50:54 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f57dde1asm19317210f8f.8.2025.05.14.04.50.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223455; 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: in-reply-to:in-reply-to:references:references; bh=scQGANjf5Zg9Z+VVAOZFzRgXSundnohTLR5TyNGPrwM=; b=AoEwz66hByQG7mrlnCGKt4CUfyYv8DMRowaBgUf20ZopAlziFYCbcQcvyiiACW+0uLjJ9s hlnClpUl26vYACIi/JK2eU8IbYNfVkthElcIjrwSA4Ub5z/Gj0WpmJpqGr8ZIKBruouSt9 qHha9vZSlJkUwJw9swQK61UlobsAvqI= X-MC-Unique: 7xd1HfThOBKcqEujAQaAhQ-1 X-Mimecast-MFC-AGG-ID: 7xd1HfThOBKcqEujAQaAhQ_1747223453 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223453; x=1747828253; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=scQGANjf5Zg9Z+VVAOZFzRgXSundnohTLR5TyNGPrwM=; b=IDcPsvD+SWF6Pzqoza10WHHU39xtBG/dX7c0rslqah/+v8pfoN3pNPpLgh94Xdx9wv wzPouuwRFqeWiAEtr55+DjJPhUsbTItX6xscYrnAGs6U5UKJtCp0+vaTmTSHhmdBlmwL x+RRZf9oX3+wfF4KNF7Ez5D3viRckvVNbC07PnAaGCof6MUuToB51S4JszTl5iQZq1j7 ENCqvtIyJS5YedDSuEt9D8UyUomz4t4sLay6RG2nrOp/qiOCNjBBb/TTA7jayPtqHizK 5NXcCwmB7cH6ANX5hDJphEw8GmvDEbxNxPxHYP+E4N+P+hlVB3w3AcP0Akm6aTly1Pi9 dJIw== X-Gm-Message-State: AOJu0YzXz7Bz1OBoVtgW+nvc9nr4Vqg09mrNtknfbeLoOvdV4nNznYNj nElNAG4BWMkPFGjDl20TZDQEg9GH6pHkLSCVZP8Iu5iHfxitpEj/xChuARsPL280nWlQR4nJGhb 15GhRUdguAx48mU64PyKJJydg7MxFuIildHUi25GDP4Mxpnx6l3L7cF8JbHPJJ9pAqTA1Njzs4Q Rg2tvmcSuHst8nX+2lZ1KC0dy7+TfvLA== X-Gm-Gg: ASbGncs7si+GSQ9M4srObLJn8gPejjPBqe/NY7+qc5yWj8AC+VF14zVOzjBLLqNQqhI BwGqjsajFXnLYB8Vnu54rjeyUAnhMI+dDx3swI5E/nW9gfygsuKjpXy3Isv7ydwmQeS46fqwJ+G 6CfxT+vilsuXVCfQeKkhb1pLS1Xky0KaEmOHMjwRDjilEhti+TyOyYJ6UbWvQdh9ItZMSaFp90d DGWoubQlzAg02U8nuiZu8ODef+c35L5bpFJIDARIp7uRETuJOBZq1B3XuMdmOX3oTXry/AQh0aZ o/AXrg== X-Received: by 2002:a5d:64cb:0:b0:3a0:99de:5309 with SMTP id ffacd0b85a97d-3a3496a603fmr2321935f8f.18.1747223452728; Wed, 14 May 2025 04:50:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFA4FN4bayEGrz10h7rsUcxy72k9CqiQedcMKIUfluKGd2T9ZfthiMnq8Y5twmbXt+Qp8yNSw== X-Received: by 2002:a5d:64cb:0:b0:3a0:99de:5309 with SMTP id ffacd0b85a97d-3a3496a603fmr2321913f8f.18.1747223452343; Wed, 14 May 2025 04:50:52 -0700 (PDT) Date: Wed, 14 May 2025 07:50:50 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin Subject: [PULL 14/27] virtio-net: Implement SR-IOV VF Message-ID: <49f7cb18db0790f7f32cb85dc35ffc25e44a828b.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223749132116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki A virtio-net device can be added as a SR-IOV VF to another virtio-pci device that will be the PF. Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-7-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/virtio/virtio-net-pci.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/virtio/virtio-net-pci.c b/hw/virtio/virtio-net-pci.c index 8cf9788bc3..f857a84f11 100644 --- a/hw/virtio/virtio-net-pci.c +++ b/hw/virtio/virtio-net-pci.c @@ -74,6 +74,7 @@ static void virtio_net_pci_class_init(ObjectClass *klass,= const void *data) k->device_id =3D PCI_DEVICE_ID_VIRTIO_NET; k->revision =3D VIRTIO_PCI_ABI_VERSION; k->class_id =3D PCI_CLASS_NETWORK_ETHERNET; + k->sriov_vf_user_creatable =3D true; set_bit(DEVICE_CATEGORY_NETWORK, dc->categories); device_class_set_props(dc, virtio_net_properties); vpciklass->realize =3D virtio_net_pci_realize; --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223629; cv=none; d=zohomail.com; s=zohoarc; b=aC40vipsDGAJ2GP0WBMfClPzZdUW+cBAtLJLM8rGgHiTgOWCAM7TBxahMrfwedOgmlVhg1tUOKJ6Sax9ugBChzcN2VizIeicAtRONZFwqhZg/FWfYdTNbhANLVt8DMjvCiVPXrPArF4uoymw0HmQczh4Xyg8JeQXkrLmLwqC4+A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223629; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kBvJJ1guqk+Wh8WSiEg/aaEDfWIkM3a0BJ0cG44g7BE=; b=BzW1IMy42rrDcOF6pobODBJRJ51TwtajEVwNVioDayk2KT66ZedYPFz8pXE46EEQWcM8TsqFZOcaEd2lLQf9TgKuaU56+kvoYIqJwSNuFJJ4x3MCy1PbBqOdCj18LdDzPVO2LTd3Q9HhSfnDaurd/7S9ST7r+maTArVIGIwnjrg= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223629804898.662973719964; Wed, 14 May 2025 04:53:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdt-0006Ik-Dx; Wed, 14 May 2025 07:51:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdg-00062v-KV for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:08 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdY-0006Ek-34 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:08 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-352-63sCOTZNPnKAfhCjOb46sQ-1; Wed, 14 May 2025 07:50:56 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-441d438a9b7so3167505e9.1 for ; Wed, 14 May 2025 04:50:56 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f396c052sm27873355e9.29.2025.05.14.04.50.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223457; 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: in-reply-to:in-reply-to:references:references; bh=kBvJJ1guqk+Wh8WSiEg/aaEDfWIkM3a0BJ0cG44g7BE=; b=P0FsWYSZb0kCcjreZoQdDQx86qMpDPsVbqGr/FwP3D+SAtrLrmyh6PxzasjDM0SfOh5yze yoF0V2NPeizOvPcdgziVtORRqJ4Grzn7jBAhOVH7wq+2ZOsKqI+38b5CTvr55FGfgbXySV RrRRLQb93i7MQ7858qo/IZkk4Jbpluo= X-MC-Unique: 63sCOTZNPnKAfhCjOb46sQ-1 X-Mimecast-MFC-AGG-ID: 63sCOTZNPnKAfhCjOb46sQ_1747223455 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223455; x=1747828255; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=kBvJJ1guqk+Wh8WSiEg/aaEDfWIkM3a0BJ0cG44g7BE=; b=dE7CFzYKjLDpxLXihp/ximpPp9h63wdcTjKg5vNlQhgpQgbuzWh461StxE5ATokyYP yrClRqFrCV3m+mRQAAMuE38uXfhVQVYD9OufLkeyKvxl2yCjCkiSavaKy1GJsG93s6ur eZYmrFDoXNKkb89fP+CaeTZShNvoUU6di9WHpibxeNMHXaLtYrnhve/bMrHZ4zKakyuS FHCLP9MwBaCmDwQIHk9juYhcUFW74/x/J4EVlWyI1Y1aCezdijE9rxpTfLfqn7w2UtZ5 Pn0HbqwmNE+ktQFqDJc3jFmH2ZpgpKrO/UhKVPyDqip7EWrceIkP82NHvaCUWlWCklBE IzIA== X-Gm-Message-State: AOJu0YzZ0pUBkdLmxV03vqBzr16OB9CBRp1Zb/f1946LlMCTOMcNniXp ksiEMMGUIVwA21YkCnq30RNln52ay43LKONyCENMnYcIjYA292A9FARY0OsZeaX6+2pajhUus4K vWdqcEefgbgFZ8y87NdZQHWRE3Oj9fn7rbDGkvLE6W37YTXpssRFbJtPL1fAqnvgoo+UmyC/B7S LoseNulk2Qxm7RxPd8JylKCu0Xttm1tA== X-Gm-Gg: ASbGncvXQJcmO/rjz0pRqXGZrP5AJcCLIIWPqAw1UVZyxLQHFJyvd5CCXZhZfgWoA5B qcvwqjoXro9tQ784nzKqbiu8lFbMmidFNKPDv/sjYRcNYftZNTVM66aCmAZ49iKjLpJzfl4KVzS Srk7zJBqleJtKBuEb+2yGAw7cSI8dKMNndaivknb3dyy6CXIQ9i6mh0aC6dJWA9KynVsxGz1NlX jDjt7Pd4b759jRcz5103pzxozrg6sV796E/OLGbUjpMZk7pHAtbpG9QU6VuXgj2wpYQJ5OgtTcI +ft+qw== X-Received: by 2002:a05:600c:4f53:b0:439:8878:5029 with SMTP id 5b1f17b1804b1-442f1a0d906mr25135305e9.2.1747223455027; Wed, 14 May 2025 04:50:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFnWl41lYrbfwjbiy1PM1u2OOHTggK1qSmnllwJQPj4jtb2JnyoXL+84o5BHp2qS2crE0qSbg== X-Received: by 2002:a05:600c:4f53:b0:439:8878:5029 with SMTP id 5b1f17b1804b1-442f1a0d906mr25135095e9.2.1747223454616; Wed, 14 May 2025 04:50:54 -0700 (PDT) Date: Wed, 14 May 2025 07:50:52 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 15/27] docs: Document composable SR-IOV device Message-ID: <6f9bebf1dc6b54b63be739ea247b3942f841b9e3.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223630210116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-8-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- MAINTAINERS | 1 + docs/system/index.rst | 1 + docs/system/sriov.rst | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 docs/system/sriov.rst diff --git a/MAINTAINERS b/MAINTAINERS index 6dacd6d004..b579358cdd 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2058,6 +2058,7 @@ F: hw/pci-bridge/* F: qapi/pci.json F: docs/pci* F: docs/specs/*pci* +F: docs/system/sriov.rst =20 PCIE DOE M: Huai-Cheng Kuo diff --git a/docs/system/index.rst b/docs/system/index.rst index c21065e519..718e9d3c56 100644 --- a/docs/system/index.rst +++ b/docs/system/index.rst @@ -39,3 +39,4 @@ or Hypervisor.Framework. multi-process confidential-guest-support vm-templating + sriov diff --git a/docs/system/sriov.rst b/docs/system/sriov.rst new file mode 100644 index 0000000000..a851a66a4b --- /dev/null +++ b/docs/system/sriov.rst @@ -0,0 +1,36 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +Compsable SR-IOV device +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +SR-IOV (Single Root I/O Virtualization) is an optional extended capability= of a +PCI Express device. It allows a single physical function (PF) to appear as +multiple virtual functions (VFs) for the main purpose of eliminating softw= are +overhead in I/O from virtual machines. + +There are devices with predefined SR-IOV configurations, but it is also po= ssible +to compose an SR-IOV device yourself. Composing an SR-IOV device is curren= tly +only supported by virtio-net-pci. + +Users can configure an SR-IOV-capable virtio-net device by adding +virtio-net-pci functions to a bus. Below is a command line example: + +.. code-block:: shell + + -netdev user,id=3Dn -netdev user,id=3Do + -netdev user,id=3Dp -netdev user,id=3Dq + -device pcie-root-port,id=3Db + -device virtio-net-pci,bus=3Db,addr=3D0x0.0x3,netdev=3Dq,sriov-pf=3Df + -device virtio-net-pci,bus=3Db,addr=3D0x0.0x2,netdev=3Dp,sriov-pf=3Df + -device virtio-net-pci,bus=3Db,addr=3D0x0.0x1,netdev=3Do,sriov-pf=3Df + -device virtio-net-pci,bus=3Db,addr=3D0x0.0x0,netdev=3Dn,id=3Df + +The VFs specify the paired PF with ``sriov-pf`` property. The PF must be +added after all VFs. It is the user's responsibility to ensure that VFs ha= ve +function numbers larger than one of the PF, and that the function numbers +have a consistent stride. + +You may also need to perform additional steps to activate the SR-IOV featu= re on +your guest. For Linux, refer to [1]_. + +.. [1] https://docs.kernel.org/PCI/pci-iov-howto.html --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223526; cv=none; d=zohomail.com; s=zohoarc; b=m21bGrn14oCm6QRT9eDLPajNqdO+VODVQjmGwO/0zQkKLdsq2b1xj7zAHkKlAMOrH/czzuVAfCR8d2Xk3JLqZt+oQxTSzVE6NLdXGURg+NZAo608XJuno1sjoaX9zbG0YWLpyZcvUMjK9L+lBN8h1qMxsiUsepGZtH2tjK15DQM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223526; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CyHusw9AnpZuF7E04bQzWNuAptqIyO52JzaZ4eBsnI8=; b=VLSF5MeEehEbvFvCoDPQXNtLZNWoS8RkpXFzRx/lk6At4X4k7JSWBGevrQRWeci3hg45q16w0JW/iC8CtVtGRMTBIMZH30y636A1FabgtJcMbLxiCpg8sZo6WlLRUxED9QwREzd4eV01q2xOeLteAZPybI14CM1ojzKlzMaGcPc= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223526109229.48464205074993; Wed, 14 May 2025 04:52:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAds-0006Dx-Kq; Wed, 14 May 2025 07:51:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdj-00066w-60 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdd-0006FY-6s for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:10 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-651-FBmpcN-QOTSf64SSH4KNhA-1; Wed, 14 May 2025 07:50:59 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43d209dc2d3so33229155e9.3 for ; Wed, 14 May 2025 04:50:59 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a4c5e1sm19237061f8f.89.2025.05.14.04.50.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223460; 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: in-reply-to:in-reply-to:references:references; bh=CyHusw9AnpZuF7E04bQzWNuAptqIyO52JzaZ4eBsnI8=; b=Z3J/02Ovf1doSZFudF2mZOJYjxggxnzfZNEAfBEXdfyLNVFACRD1I3O7Qwr007LBa0aD0R Kddufy5uoeM/Y26os797rWV/XCE+L7jUT6Oj2T5W26KXfV5N2nxC+Or7I6B22r5BUSYFGz 0PmH1NOHKU9BrkJ1Ey4DOQ5s3NQhtk0= X-MC-Unique: FBmpcN-QOTSf64SSH4KNhA-1 X-Mimecast-MFC-AGG-ID: FBmpcN-QOTSf64SSH4KNhA_1747223458 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223457; x=1747828257; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=CyHusw9AnpZuF7E04bQzWNuAptqIyO52JzaZ4eBsnI8=; b=RwOJBDdGIo0QF/GrhMUHQN9NgNhiLQM9y6t0r5OqMfcf58C8sZmPcSgewxB5hrmQkO s+TxUaDilEZ6ukagkoaYggUaCexZy4P8Lk8uPShtc2atpqrmnU31EjAt1bPmMwpKW/Rt GtJ9Xq5wAVa57d9JJ5PZC8k+9aa3KX87gVpnvhBH36ucOfs2my2QrJRCJnT7GGmngUHH 0JZK0uL3lRB5oh6Ns6eC84pfJRuihFIVFAMTqpDAudmdEugMRkzmhqOyhPOb4UWkQ7iq S8wtMXESxkebngHkjHEI8c1ae0FunZLfrXZEKDtRLFxfS9ChkeafSNg70kqYuiJe3r43 p6Dw== X-Gm-Message-State: AOJu0YyQKBvLNm7UAIXrzScGG2ix0S305NkhDtmWdhQXZqApB4aLD8J7 P8xX5hYScI7eT7UiQ2M/iz/i8kWv5q41+VHf8kf9e1Wy2NEof6L2YwQWcUXyZhtu8jj5BJz5xun qxFS71A7nOM7cF5+nLG00N0ElAROb2yst/dBWXPKtyJel2aYAtC2LEJgND63YMlUhCkldcGSd0H pNc/ziY0p//M38C7EULEELAtt8Kougrw== X-Gm-Gg: ASbGncua7k/n8IP+jSlNQHcmEGGIq9kI7aoXb1PomArxOz4G11ONkFCdh1rndfNavhn Fo//ezUQkGgYjqQK66tGWBl4QBjwNTMEnZEWLssIvFFwcFbUInXkQaocKHMvyzzu5zTmwy6UpFr vS8WM3muiyA8K6b5FRoSR4778hvKgrhICOlnnf0n9Lf2zW7ocnXeZX4N9qhE7pmrRWSJXbp9EQ/ G7ZkAr6dsL0GFoLUbNdnhQHv6Lp1YSBHEa2MxiFte10iD/2y3ECHJ+2nRQWuUdb9iV9OyrZYjVu 9DC3lQ== X-Received: by 2002:a05:600c:3c8c:b0:442:ccf9:e6f2 with SMTP id 5b1f17b1804b1-442f210f732mr32145565e9.16.1747223457597; Wed, 14 May 2025 04:50:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFpiCCiX0V5P01m0JQc/+q1+SwvrKE6uWNXqF6ovzQX2rNTLKAy4fP48qbHCyi9G9XywEqQaA== X-Received: by 2002:a05:600c:3c8c:b0:442:ccf9:e6f2 with SMTP id 5b1f17b1804b1-442f210f732mr32145175e9.16.1747223457167; Wed, 14 May 2025 04:50:57 -0700 (PDT) Date: Wed, 14 May 2025 07:50:54 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , Yui Washizu , Pasha Tatashin , Marcel Apfelbaum Subject: [PULL 16/27] pcie_sriov: Make a PCI device with user-created VF ARI-capable Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223527702116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki Signed-off-by: Akihiko Odaki Message-Id: <20250314-sriov-v9-9-57dae8ae3ab5@daynix.com> Tested-by: Yui Washizu Tested-by: Pasha Tatashin Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/pci/pcie_sriov.h | 7 +++++-- hw/pci/pcie_sriov.c | 8 +++++++- hw/virtio/virtio-pci.c | 16 ++++++++++------ docs/system/sriov.rst | 3 ++- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/include/hw/pci/pcie_sriov.h b/include/hw/pci/pcie_sriov.h index f75b8f22ee..aeaa38cf34 100644 --- a/include/hw/pci/pcie_sriov.h +++ b/include/hw/pci/pcie_sriov.h @@ -43,12 +43,15 @@ void pcie_sriov_vf_register_bar(PCIDevice *dev, int reg= ion_num, =20 /** * pcie_sriov_pf_init_from_user_created_vfs() - Initialize PF with user-cr= eated - * VFs. + * VFs, adding ARI to PF * @dev: A PCIe device being realized. * @offset: The offset of the SR-IOV capability. * @errp: pointer to Error*, to store an error if it happens. * - * Return: The size of added capability. 0 if the user did not create VFs. + * Initializes a PF with user-created VFs, adding the ARI extended capabil= ity to + * the PF. The VFs should call pcie_ari_init() to form an ARI device. + * + * Return: The size of added capabilities. 0 if the user did not create VF= s. * -1 if failed. */ int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDevice *dev, diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index 08f707e847..3ad18744f4 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -245,6 +245,7 @@ int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDev= ice *dev, PCIDevice **vfs; BusState *bus =3D qdev_get_parent_bus(DEVICE(dev)); uint16_t ven_id =3D pci_get_word(dev->config + PCI_VENDOR_ID); + uint16_t size =3D PCI_EXT_CAP_SRIOV_SIZEOF; uint16_t vf_dev_id; uint16_t vf_offset; uint16_t vf_stride; @@ -311,6 +312,11 @@ int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDe= vice *dev, return -1; } =20 + if (!pcie_find_capability(dev, PCI_EXT_CAP_ID_ARI)) { + pcie_ari_init(dev, offset + size); + size +=3D PCI_ARI_SIZEOF; + } + for (i =3D 0; i < pf->len; i++) { vfs[i]->exp.sriov_vf.pf =3D dev; vfs[i]->exp.sriov_vf.vf_number =3D i; @@ -331,7 +337,7 @@ int16_t pcie_sriov_pf_init_from_user_created_vfs(PCIDev= ice *dev, } } =20 - return PCI_EXT_CAP_SRIOV_SIZEOF; + return size; } =20 bool pcie_sriov_register_device(PCIDevice *dev, Error **errp) diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index fee65d3645..9b48aa8c3e 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -2111,12 +2111,16 @@ static void virtio_pci_device_plugged(DeviceState *= d, Error **errp) PCI_BASE_ADDRESS_SPACE_IO, &proxy->bar); } =20 - res =3D pcie_sriov_pf_init_from_user_created_vfs(&proxy->pci_dev, - proxy->last_pcie_cap_of= fset, - errp); - if (res > 0) { - proxy->last_pcie_cap_offset +=3D res; - virtio_add_feature(&vdev->host_features, VIRTIO_F_SR_IOV); + if (pci_is_vf(&proxy->pci_dev)) { + pcie_ari_init(&proxy->pci_dev, proxy->last_pcie_cap_offset); + proxy->last_pcie_cap_offset +=3D PCI_ARI_SIZEOF; + } else { + res =3D pcie_sriov_pf_init_from_user_created_vfs( + &proxy->pci_dev, proxy->last_pcie_cap_offset, errp); + if (res > 0) { + proxy->last_pcie_cap_offset +=3D res; + virtio_add_feature(&vdev->host_features, VIRTIO_F_SR_IOV); + } } } =20 diff --git a/docs/system/sriov.rst b/docs/system/sriov.rst index a851a66a4b..d12178f3c3 100644 --- a/docs/system/sriov.rst +++ b/docs/system/sriov.rst @@ -28,7 +28,8 @@ virtio-net-pci functions to a bus. Below is a command lin= e example: The VFs specify the paired PF with ``sriov-pf`` property. The PF must be added after all VFs. It is the user's responsibility to ensure that VFs ha= ve function numbers larger than one of the PF, and that the function numbers -have a consistent stride. +have a consistent stride. Both the PF and VFs are ARI-capable so you can h= ave +255 VFs at maximum. =20 You may also need to perform additional steps to activate the SR-IOV featu= re on your guest. For Linux, refer to [1]_. --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223804; cv=none; d=zohomail.com; s=zohoarc; b=O5ekeqE1lmt9CZ0P6JmvH1dkI7I7gQ7fHLi+2+IN6BDWRSBy499pCgDae7jpEGESMXTNVVIJ/Q4R5XVBrHxAtjCdkrH6SeWVrjKCVKz0PWHrY5lFRqwslHep8Gu4fo+wCtbK7yLkJRz8aZ1FC7uqcFE17lym5cC341NO2THZKlI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223804; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qqntS9ygfuW9rT3V57VhuvgNLMeBxoz/OQrdDTegsok=; b=BG7woI5mANHsL9GsTshe5Z0md4ua6evYYdqhJYCTmxRnPzypYvOFGccA1snti7FEjPJ4XktgPvmzyGYLE8C2dEWxQ5E51TUT8objOLUfzk0Y8k2tPrBbwDnoBGx3seGPxEYAz2dGPKqexyp3w6wggNQsT3B9K1NmhpyWRkrLpp8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223804315604.473219420805; Wed, 14 May 2025 04:56:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdy-0006X2-CO; Wed, 14 May 2025 07:51:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdl-00068v-1a for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:14 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAde-0006GF-6V for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:12 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-198-gWz4RwLaN8KGBEqI-nhQNg-1; Wed, 14 May 2025 07:51:01 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43ceeaf1524so4344465e9.1 for ; Wed, 14 May 2025 04:51:01 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39e8578sm27775085e9.29.2025.05.14.04.50.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:50:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223462; 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: in-reply-to:in-reply-to:references:references; bh=qqntS9ygfuW9rT3V57VhuvgNLMeBxoz/OQrdDTegsok=; b=HZ5rRjco8htx3LftCrytCZdeDm8I5NqwqDqtpN8uCXS3Xa5Q2dkF7zB0qM8+KP7NWLHWgP 4FJcQzJrDu6eDOFCAKb3uN7fyljAyjn+X+gCSAg/12F/auMc+ZlaxMw+zwr/CWtZodHg0C insFaoig32SuYhvzpmVsrDW9dyOrwE8= X-MC-Unique: gWz4RwLaN8KGBEqI-nhQNg-1 X-Mimecast-MFC-AGG-ID: gWz4RwLaN8KGBEqI-nhQNg_1747223460 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223460; x=1747828260; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qqntS9ygfuW9rT3V57VhuvgNLMeBxoz/OQrdDTegsok=; b=AUQuPtgb5wDRan3NuNlVH/owXlAQbhEK9ohBel0noOErrHJObKYQ+mgRulkMjBGNOA Dp0of1bv72elB2i2t4FiWhIuyWnSXCl9/toZSkvjIqS9bUpr/tZDXLdCnmQ0jINFeKoF 7cuSJ8++bfVocC7bUn7hFZ7mcywqlW+jIp27QRV6MKxuQLBRU0pYpgHFDIALnJCVFVOc kz42g53ExWIVDXNivZbj68PwOG/y955HFhWN4tOOzEk9Jib9B1SQ765t522UQV0Eg+W2 JOul/hnQUgK2BZ1eU2ahCNWq076KoHime1bVEQSCfM+vG7Iigr4sK9e3JvPZxt1m1xRL cyOQ== X-Gm-Message-State: AOJu0Ywo9dJ/9c7buS8zVrT7S/dKyw7jMoVBqyR88PrbT5Dvsk792BQp RHOOARd5TnJc2RwLxTLTAIvR8iweCdTbUMR3/0xmXM6cf2phzzcx6YNlfkkQnjHJrgFzB9J5F/A ds+ug5ZRtnN1Jqfif4TYm9wErh+Mjnn8ms+xIhbQZtiHQtU2ILpAOQkGXaph1/LH/9N17/vSZwj JxBU8TrOb4hlbfO83diyZ8BjLt7YssMw== X-Gm-Gg: ASbGncv3iFVXNmhSWqAGPAc3f4QRAMp7xsheRpdIcgGSjHwBcD7W7TcJoIZ+XHSPxxn 1Hzr+T4jrizhogkBfTrfQVA6o85MbDS8I4rYulefmGnS0m0F0f5JSSOL7TPjlMsC6jeDHGamRM2 kSkHzEToOrDRstSi6ZIPu5HOOIm2a5XSlIWw5DMIxcYFDydJkcCgTz7gZQIoZUQTM1UB5TiTE3L AoT/jpCP2zk0z81NsKH4EyDWFXywcSd/jKG3KzH7I+50OR5807IYzCIaOn8ZvnTA0qhfmBPVgPo vbX1+Q== X-Received: by 2002:a05:600c:8707:b0:439:9434:4f3b with SMTP id 5b1f17b1804b1-442f1a42318mr32982485e9.8.1747223459781; Wed, 14 May 2025 04:50:59 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGWNW+7T5B5w1jJh1Am4+Z7rknxs6M44KG2gHRJsm4W5BQVr7XjknJq86LBUvfxfuHaukNvlQ== X-Received: by 2002:a05:600c:8707:b0:439:9434:4f3b with SMTP id 5b1f17b1804b1-442f1a42318mr32982195e9.8.1747223459358; Wed, 14 May 2025 04:50:59 -0700 (PDT) Date: Wed, 14 May 2025 07:50:57 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Stephen Bates , Marcel Apfelbaum Subject: [PULL 17/27] pci-testdev.c: Add membar-backed option for backing membar Message-ID: <8717987fb528ff704e275a1a99f59a20e0b272f5.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223805761116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Stephen Bates The pci-testdev device allows for an optional BAR. We have historically used this without backing to test that systems and OSes can accomodate large PCI BARs. However to help test p2pdma operations it is helpful to add an option to back this BAR with host memory. We add a membar-backed boolean parameter and when set to true or on we do a host RAM backing. The default is false which ensures backward compatability. Signed-off-by: Stephen Bates Message-Id: Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/misc/pci-testdev.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c index 3f6a8bba84..ba71c5069f 100644 --- a/hw/misc/pci-testdev.c +++ b/hw/misc/pci-testdev.c @@ -90,6 +90,7 @@ struct PCITestDevState { int current; =20 uint64_t membar_size; + bool membar_backed; MemoryRegion membar; }; =20 @@ -258,8 +259,14 @@ static void pci_testdev_realize(PCIDevice *pci_dev, Er= ror **errp) pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &d->portio); =20 if (d->membar_size) { - memory_region_init(&d->membar, OBJECT(d), "pci-testdev-membar", - d->membar_size); + if (d->membar_backed) + memory_region_init_ram(&d->membar, OBJECT(d), + "pci-testdev-membar-backed", + d->membar_size, NULL); + else + memory_region_init(&d->membar, OBJECT(d), + "pci-testdev-membar", + d->membar_size); pci_register_bar(pci_dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_PREFETCH | @@ -321,6 +328,7 @@ static void qdev_pci_testdev_reset(DeviceState *dev) =20 static const Property pci_testdev_properties[] =3D { DEFINE_PROP_SIZE("membar", PCITestDevState, membar_size, 0), + DEFINE_PROP_BOOL("membar-backed", PCITestDevState, membar_backed, fals= e), }; =20 static void pci_testdev_class_init(ObjectClass *klass, const void *data) --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223726; cv=none; d=zohomail.com; s=zohoarc; b=RxPgCz4kVQhMHnWpf3BPGDRGsrNB97KwhAeMTMUf8IwNnwshPRgKu8GcuaQK3a+kyTJSa15HXG/Tvlc/iTL1WpBzPYpY6kk8B3yzV9ewW/4keor1HaHxVtCdREhJX5F2uXl6ZovrT/ZvgvwB27a4F6MwE9YQ/nVSuW8xJ2ee2yY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223726; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8c96S+F4hIc7CJWfCqKFJxxIJ4AYWnwfDATH0X1d/os=; b=NOqlMjdYAjXsbkjw9sm2dsHk31DZhAwlZw1W1u6/hSOB32R9o3oD9Fk9I9sgPq2g+ZBIrxyAet9MpziUoqprcuvgucqGFE5R4T9GitsFsDme7bA00/ZT2afOZq0/15TdFQrX13y7ArPwzm3JunAXZShjynSCfZJWmxUHXBf88Dk= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223726234816.9091473834798; Wed, 14 May 2025 04:55:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAdu-0006Nh-IR; Wed, 14 May 2025 07:51:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdk-00068Y-W8 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:14 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdi-0006Ih-4g for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:12 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-256-auziYOpkOgCMbylwi3WrXw-1; Wed, 14 May 2025 07:51:07 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-441c96c1977so43988465e9.0 for ; Wed, 14 May 2025 04:51:07 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39792c3sm27037845e9.35.2025.05.14.04.51.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223468; 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: in-reply-to:in-reply-to:references:references; bh=8c96S+F4hIc7CJWfCqKFJxxIJ4AYWnwfDATH0X1d/os=; b=KhPfGROFrYlyRsIuFlWw8RivOzB/KsWkc2zRmG1Du1C1Qd2SBCGR2cUSrRgxqiVJlYw/2L KHukrNbq6wMX8VwP9ytL8WaCWVerYWSuIZCDSKylu5bbacS7+4ffg1e7zSFDSDcg0rAiH1 5CpKnVqW+AGo6ttq8PaM4xVwod9NTIk= X-MC-Unique: auziYOpkOgCMbylwi3WrXw-1 X-Mimecast-MFC-AGG-ID: auziYOpkOgCMbylwi3WrXw_1747223466 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223463; x=1747828263; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=8c96S+F4hIc7CJWfCqKFJxxIJ4AYWnwfDATH0X1d/os=; b=tg4vfjv7EY4ttxiGfm47VwkO3mZxcBL1/6Q2+5gsjwZN6238/xUVNvict2ckdUmYgs dDwPkGKmHxRslXu+WURed+9V/XYGXIjqWJALdMv7gB7dLel7NRDH0DH/YLjb/t4vQ30E fXdrc5SsefxvWoB8BjVeTnFIXLX7SybgrfZKkw/QYem70dmC7yDMNQWtK0Cg6rjhepQW OlHj+CuDQaNdgCOAmOCKffjQUuhs6B4e+GdcRI+cgVsG3UI3ALifmX3oYaday/hXflAK aTWw691kwl7HRq+yF7DQ06xUtb8RgvxRe7PeFLA5wjlzy4a/AThSsGSkWEkivQMGpSHn FvAQ== X-Gm-Message-State: AOJu0Yz6c++ULyfBq3piXUsIdx9FGAxeotn6jvSJTYmqaIIA90paosxA RyA5Bgde+PfGRD3KmKihfVddNH8kkA6qoYKVyMrhmM3RU6zo7MdOpP9Wbpkw64w4q/5QjKIbDIJ x6pD9u2SIiPESRK0rr8F/mUtnnfVkGpMiZQSPYk0OGjPsm05nZkwiN/LcT7auhvSTW8rETmpWCw FoxNdDtnDYWUu/dkBhLflp7NL1rL8C5A== X-Gm-Gg: ASbGncu23UgvGls2eyY4HZ0qxDKIUK2HPYrbzsfQLMaD6Em0GDVKgAWr3kYh7ip+eEX ELDZihAxstMbpzNhTTWajDtdKPdxjbr5T6Yo3oDN5520OR2QpqZxCfcYbkJL4e0y7wl+i92nmk4 9Va1rnwzcnuD7UeVTB80TxRQ/Gu1uVmiNey0OaKslIHfxyC6UF4xKHpF1Zko+rZaGfhvgKrFBnE TvmYYjwFolDPHYbUYxQawMJkRJO4qg2JgFsF5NSakvuyMNzB8gXlsAmoHRdgQLhyFZAxqiawqeC SvH9cg== X-Received: by 2002:a05:600c:871a:b0:43d:683:8cb2 with SMTP id 5b1f17b1804b1-442f20e340bmr30745805e9.14.1747223462849; Wed, 14 May 2025 04:51:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGJRFk2u7LgrNLOuBP0GNidZWti02ElR+fF5Ou/k7KZw+6NacCoxOOcfn5tvvqzzqdLp3gopA== X-Received: by 2002:a05:600c:871a:b0:43d:683:8cb2 with SMTP id 5b1f17b1804b1-442f20e340bmr30745365e9.14.1747223462350; Wed, 14 May 2025 04:51:02 -0700 (PDT) Date: Wed, 14 May 2025 07:50:59 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Haoqian He , Lei Yang , Stefan Hajnoczi , Kevin Wolf , Hanna Reitz , Paolo Bonzini , Fam Zheng , Alex Williamson , =?utf-8?Q?C=C3=A9dric?= Le Goater , Richard Henderson , qemu-block@nongnu.org Subject: [PULL 18/27] system/runstate: add VM state change cb with return value Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1747223727364019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Haoqian He This patch adds the new VM state change cb type `VMChangeStateHandlerWithRe= t`, which has return value for `VMChangeStateEntry`. Thus, we can register a new VM state change cb with return value for device. Note that `VMChangeStateHandler` and `VMChangeStateHandlerWithRet` are mutu= ally exclusive and cannot be provided at the same time. This patch is the pre patch for 'vhost-user: return failure if backend cras= hes when live migration', which makes the live migration aware of the loss of connection with the vhost-user backend and aborts the live migration. Virtio device will use VMChangeStateHandlerWithRet. Signed-off-by: Haoqian He Message-Id: <20250416024729.3289157-2-haoqian.he@smartx.com> Tested-by: Lei Yang Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/system/runstate.h | 13 +++++++++--- hw/block/virtio-blk.c | 2 +- hw/core/vm-change-state-handler.c | 18 ++++++++++------ hw/scsi/scsi-bus.c | 2 +- hw/vfio/migration.c | 2 +- hw/virtio/virtio.c | 2 +- system/cpus.c | 8 +++++-- system/runstate.c | 35 ++++++++++++++++++++++++++----- 8 files changed, 62 insertions(+), 20 deletions(-) diff --git a/include/system/runstate.h b/include/system/runstate.h index bffc3719d4..fdd5c4a517 100644 --- a/include/system/runstate.h +++ b/include/system/runstate.h @@ -12,6 +12,7 @@ bool runstate_needs_reset(void); void runstate_replay_enable(void); =20 typedef void VMChangeStateHandler(void *opaque, bool running, RunState sta= te); +typedef int VMChangeStateHandlerWithRet(void *opaque, bool running, RunSta= te state); =20 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler = *cb, void *opaque); @@ -20,21 +21,27 @@ VMChangeStateEntry *qemu_add_vm_change_state_handler_pr= io( VMChangeStateEntry * qemu_add_vm_change_state_handler_prio_full(VMChangeStateHandler *cb, VMChangeStateHandler *prepare_c= b, + VMChangeStateHandlerWithRet *cb= _ret, void *opaque, int priority); VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev, VMChangeStateHandler = *cb, + VMChangeStateHandlerW= ithRet *cb_ret, void *opaque); VMChangeStateEntry *qdev_add_vm_change_state_handler_full( - DeviceState *dev, VMChangeStateHandler *cb, - VMChangeStateHandler *prepare_cb, void *opaque); + DeviceState *dev, VMChangeStateHandler *cb, VMChangeStateHandler *prep= are_cb, + VMChangeStateHandlerWithRet *cb_ret, void *opaque); void qemu_del_vm_change_state_handler(VMChangeStateEntry *e); /** * vm_state_notify: Notify the state of the VM * * @running: whether the VM is running or not. * @state: the #RunState of the VM. + * + * Return the result of the callback which has return value. + * If no callback has return value, still return 0 and the + * upper layer should not do additional processing. */ -void vm_state_notify(bool running, RunState state); +int vm_state_notify(bool running, RunState state); =20 static inline bool shutdown_caused_by_guest(ShutdownCause cause) { diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index b54d01d3a2..ea948d18fd 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -1802,7 +1802,7 @@ static void virtio_blk_device_realize(DeviceState *de= v, Error **errp) * called after ->start_ioeventfd() has already set blk's AioContext. */ s->change =3D - qdev_add_vm_change_state_handler(dev, virtio_blk_dma_restart_cb, s= ); + qdev_add_vm_change_state_handler(dev, virtio_blk_dma_restart_cb, N= ULL, s); =20 blk_ram_registrar_init(&s->blk_ram_registrar, s->blk); blk_set_dev_ops(s->blk, &virtio_block_ops, s); diff --git a/hw/core/vm-change-state-handler.c b/hw/core/vm-change-state-ha= ndler.c index 7064995578..99c642b558 100644 --- a/hw/core/vm-change-state-handler.c +++ b/hw/core/vm-change-state-handler.c @@ -40,6 +40,7 @@ static int qdev_get_dev_tree_depth(DeviceState *dev) * qdev_add_vm_change_state_handler: * @dev: the device that owns this handler * @cb: the callback function to be invoked + * @cb_ret: the callback function with return value to be invoked * @opaque: user data passed to the callback function * * This function works like qemu_add_vm_change_state_handler() except call= backs @@ -50,25 +51,30 @@ static int qdev_get_dev_tree_depth(DeviceState *dev) * controller's callback is invoked before the children on its bus when th= e VM * starts running. The order is reversed when the VM stops running. * + * Note that the parameter `cb` and `cb_ret` are mutually exclusive. + * * Returns: an entry to be freed with qemu_del_vm_change_state_handler() */ VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev, VMChangeStateHandler = *cb, + VMChangeStateHandlerW= ithRet *cb_ret, void *opaque) { - return qdev_add_vm_change_state_handler_full(dev, cb, NULL, opaque); + assert(!cb || !cb_ret); + return qdev_add_vm_change_state_handler_full(dev, cb, NULL, cb_ret, op= aque); } =20 /* * Exactly like qdev_add_vm_change_state_handler() but passes a prepare_cb - * argument too. + * and the cb_ret arguments too. */ VMChangeStateEntry *qdev_add_vm_change_state_handler_full( - DeviceState *dev, VMChangeStateHandler *cb, - VMChangeStateHandler *prepare_cb, void *opaque) + DeviceState *dev, VMChangeStateHandler *cb, VMChangeStateHandler *prep= are_cb, + VMChangeStateHandlerWithRet *cb_ret, void *opaque) { int depth =3D qdev_get_dev_tree_depth(dev); =20 - return qemu_add_vm_change_state_handler_prio_full(cb, prepare_cb, opaq= ue, - depth); + assert(!cb || !cb_ret); + return qemu_add_vm_change_state_handler_prio_full(cb, prepare_cb, cb_r= et, + opaque, depth); } diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index 70be4a7367..9b12ee7f1c 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -400,7 +400,7 @@ static void scsi_qdev_realize(DeviceState *qdev, Error = **errp) return; } dev->vmsentry =3D qdev_add_vm_change_state_handler(DEVICE(dev), - scsi_dma_restart_cb, dev); + scsi_dma_restart_cb, NULL, dev); } =20 static void scsi_qdev_unrealize(DeviceState *qdev) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 1dceab1b19..b76697bd1a 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -1016,7 +1016,7 @@ static int vfio_migration_init(VFIODevice *vbasedev) vfio_vmstate_change_prepare : NULL; migration->vm_state =3D qdev_add_vm_change_state_handler_full( - vbasedev->dev, vfio_vmstate_change, prepare_cb, vbasedev); + vbasedev->dev, vfio_vmstate_change, prepare_cb, NULL, vbasedev); migration_add_notifier(&migration->migration_state, vfio_migration_state_notifier); =20 diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 480c2e5036..e3b62522ec 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -3489,7 +3489,7 @@ void virtio_init(VirtIODevice *vdev, uint16_t device_= id, size_t config_size) vdev->config =3D NULL; } vdev->vmstate =3D qdev_add_vm_change_state_handler(DEVICE(vdev), - virtio_vmstate_change, vdev); + virtio_vmstate_change, NULL, vdev); vdev->device_endian =3D virtio_default_endian(); vdev->use_guest_notifier_mask =3D true; } diff --git a/system/cpus.c b/system/cpus.c index 2cc5f887ab..d16b0dff98 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -299,14 +299,18 @@ static int do_vm_stop(RunState state, bool send_stop) if (oldstate =3D=3D RUN_STATE_RUNNING) { pause_all_vcpus(); } - vm_state_notify(0, state); + ret =3D vm_state_notify(0, state); if (send_stop) { qapi_event_send_stop(); } } =20 bdrv_drain_all(); - ret =3D bdrv_flush_all(); + /* + * Even if vm_state_notify() return failure, + * it would be better to flush as before. + */ + ret |=3D bdrv_flush_all(); trace_vm_stop_flush_all(ret); =20 return ret; diff --git a/system/runstate.c b/system/runstate.c index 272801d307..de74d962bc 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -297,6 +297,7 @@ void qemu_system_vmstop_request(RunState state) struct VMChangeStateEntry { VMChangeStateHandler *cb; VMChangeStateHandler *prepare_cb; + VMChangeStateHandlerWithRet *cb_ret; void *opaque; QTAILQ_ENTRY(VMChangeStateEntry) entries; int priority; @@ -320,14 +321,15 @@ static QTAILQ_HEAD(, VMChangeStateEntry) vm_change_st= ate_head =3D VMChangeStateEntry *qemu_add_vm_change_state_handler_prio( VMChangeStateHandler *cb, void *opaque, int priority) { - return qemu_add_vm_change_state_handler_prio_full(cb, NULL, opaque, - priority); + return qemu_add_vm_change_state_handler_prio_full(cb, NULL, NULL, + opaque, priority); } =20 /** * qemu_add_vm_change_state_handler_prio_full: * @cb: the main callback to invoke * @prepare_cb: a callback to invoke before the main callback + * @cb_ret: the main callback to invoke with return value * @opaque: user data passed to the callbacks * @priority: low priorities execute first when the vm runs and the revers= e is * true when the vm stops @@ -344,6 +346,7 @@ VMChangeStateEntry *qemu_add_vm_change_state_handler_pr= io( VMChangeStateEntry * qemu_add_vm_change_state_handler_prio_full(VMChangeStateHandler *cb, VMChangeStateHandler *prepare_c= b, + VMChangeStateHandlerWithRet *cb= _ret, void *opaque, int priority) { VMChangeStateEntry *e; @@ -352,6 +355,7 @@ qemu_add_vm_change_state_handler_prio_full(VMChangeStat= eHandler *cb, e =3D g_malloc0(sizeof(*e)); e->cb =3D cb; e->prepare_cb =3D prepare_cb; + e->cb_ret =3D cb_ret; e->opaque =3D opaque; e->priority =3D priority; =20 @@ -379,9 +383,10 @@ void qemu_del_vm_change_state_handler(VMChangeStateEnt= ry *e) g_free(e); } =20 -void vm_state_notify(bool running, RunState state) +int vm_state_notify(bool running, RunState state) { VMChangeStateEntry *e, *next; + int ret =3D 0; =20 trace_vm_state_notify(running, state, RunState_str(state)); =20 @@ -393,7 +398,17 @@ void vm_state_notify(bool running, RunState state) } =20 QTAILQ_FOREACH_SAFE(e, &vm_change_state_head, entries, next) { - e->cb(e->opaque, running, state); + if (e->cb) { + e->cb(e->opaque, running, state); + } else if (e->cb_ret) { + /* + * Here ignore the return value of cb_ret because + * we only care about the stopping the device during + * the VM live migration to indicate whether the + * connection between qemu and backend is normal. + */ + e->cb_ret(e->opaque, running, state); + } } } else { QTAILQ_FOREACH_REVERSE_SAFE(e, &vm_change_state_head, entries, nex= t) { @@ -403,9 +418,19 @@ void vm_state_notify(bool running, RunState state) } =20 QTAILQ_FOREACH_REVERSE_SAFE(e, &vm_change_state_head, entries, nex= t) { - e->cb(e->opaque, running, state); + if (e->cb) { + e->cb(e->opaque, running, state); + } else if (e->cb_ret) { + /* + * We should execute all registered callbacks even if + * one of them returns failure, otherwise, some cleanup + * work of the device will be skipped. + */ + ret |=3D e->cb_ret(e->opaque, running, state); + } } } + return ret; } =20 static ShutdownCause reset_requested; --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223879; cv=none; d=zohomail.com; s=zohoarc; b=N6YvABVKk5uJm0Zv4o6+4vzatJXaSwqjec8TI9+cDXibYBN2e1VPL3+vJ2Tod2BLjYM82aJdmYP9hdUHBm8wWiiWpnBw3sIX0vTquZFUrXD3NG/FLM2N0VdmNIOIaPKpOsmiKRD1mThFHg65WSSEHMjUK9sDJpxzDRkb7v6OntM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223879; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PhRXtmUdCm+S5qOy3Bl4Anc/xV95bi9unHwGtH+zUJg=; b=A4rCfYLlHYol3hluUzWIUxPU7ypZkOTlfm1IpZ0H1nJeS7CnHYGxzzkWB2NW08Fvq4DTQp9PUXcmNOvkOnkgsT6BAw0fhhsSwl56HnFRzGueVuB9eMmleVP5Oa0jxjMh4koUk14AHyREriNAqxyjDe5ReZeoEkw68zPMtIWPsF0= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223879495148.1882632577092; Wed, 14 May 2025 04:57:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeI-0006vU-A1; Wed, 14 May 2025 07:51:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdl-00069H-Fi for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:14 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdj-0006JN-9e for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:13 -0400 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-447-YfgmrVS-Pe6zl-6hjdSkBg-1; Wed, 14 May 2025 07:51:09 -0400 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3a1f6c5f4f2so1842405f8f.2 for ; Wed, 14 May 2025 04:51:08 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a2cf38sm19366554f8f.77.2025.05.14.04.51.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223470; 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: in-reply-to:in-reply-to:references:references; bh=PhRXtmUdCm+S5qOy3Bl4Anc/xV95bi9unHwGtH+zUJg=; b=Slj4UgXJ87xUZDKY4W8WrA0EZIKft9w2x09jGGv2OkEs5ppfjl83DSn/yWxggR1EKcW+lD Ltb4qAE8TGTfHB4joAb7fpCE9L9plg3Qhg7TtIsga6e1L3GDB6fkE4WSP1GDRhjW6oOEqF QvXRxjz+7Ul2RErguXBlNV8L1MRqjOM= X-MC-Unique: YfgmrVS-Pe6zl-6hjdSkBg-1 X-Mimecast-MFC-AGG-ID: YfgmrVS-Pe6zl-6hjdSkBg_1747223468 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223467; x=1747828267; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=PhRXtmUdCm+S5qOy3Bl4Anc/xV95bi9unHwGtH+zUJg=; b=tMEfx2JnrSnnQgOAkLEG4SrG8e2+wSTufQU0PkuFiOuiSElsKlSRLGXXgfm3ZWLKej dZtQObBqrfk+s8I7F0j5QAloLEsmA8cAHsgWMDaIR4uf6supFramP6vJbltJBSwD26E+ zLqGGCu/Nngo0KKbOB5FkjQmSGgfrpdvjtytPIk1yzc/V2GI63gOjDQiXkJCMtYZgJlz 9wHNElHGPZsHZXkRkvgbDdCxCiAZlMK0CS9zQFL1JALDiIMF9W8IzrHlrMr4EXi7yS41 BFyXJlMrmFLjy99t2OWzlAsYscV8W8P0A2SbrMcbfMXHDtlWHwpSpmOlsTqEjDsehX/F NNWw== X-Gm-Message-State: AOJu0YxpMT/UxgHMAQ/2FDJSZGYln+2tar4MvD20TkUAb7EQ8UA32IkV 1y5JNJbBVlT3FUKA+dlj+cZTkEPjhuZ6CD5CoilsC+d3K2IugtBGsw4sH7K4buzky7KYw4hoE82 QlgRzF1hYYrupY1EKfBd8nOCF/8vuGeLutUdUOFz9IIRdkGs1joI7pWcWhB5+y8p8W5t8kPMVpz L9aml+zo6T8RnLMSFBksl++R+iWnzSEQ== X-Gm-Gg: ASbGncsWNHJHCuR0L0UE/AwRNwWGmlgxfgonrQ1eO5Dx8iDbDJg8ZGZnGEBAFO9L68L khjITXl2n+7/sXSps1fxvNwIXEPalXbVnpEW/BjxHV30iD9LWf93bIO/dGYlvYfHECq553TLSjF fXI8oefDdPQy7z+/hJXtgBMcnK4wgsjPMNGRRnmn+CDxXGQd9IDeCkrECKppNsokKQMZg1GnVHv 4UGodKjLr3Hm6fICoQZmFUdyM8qQkYCAvBfL2kwqqim4LVatoBTwlEuoW50KHeC3fO7LvJZMAzx P9H4FA== X-Received: by 2002:a05:6000:2a8:b0:3a2:3c51:f4a1 with SMTP id ffacd0b85a97d-3a34969ad98mr2493688f8f.7.1747223467378; Wed, 14 May 2025 04:51:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFqXEE1dBvEGd9csjBwRFzOTLi/ecDj3LPyQvogr/wQAiWezzPb/qqRk28CDGGK1A/POmB8mg== X-Received: by 2002:a05:6000:2a8:b0:3a2:3c51:f4a1 with SMTP id ffacd0b85a97d-3a34969ad98mr2493670f8f.7.1747223466872; Wed, 14 May 2025 04:51:06 -0700 (PDT) Date: Wed, 14 May 2025 07:51:02 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Haoqian He , Lei Yang , Stefano Garzarella Subject: [PULL 19/27] vhost: return failure if stop virtqueue failed in vhost_dev_stop Message-ID: <5a317017b827e338358792cd07663f8ea25f1ffe.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223880429019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Haoqian He This patch captures the error of vhost_virtqueue_stop() in vhost_dev_stop() and returns the error upward. Specifically, if QEMU is disconnected from the vhost backend, some actions in vhost_dev_stop() will fail, such as sending vhost-user messages to the backend (GET_VRING_BASE, SET_VRING_ENABLE) and vhost_reset_status. Considering that both set_vring_enable and vhost_reset_status require setti= ng the specific virtio feature bit, we can capture vhost_virtqueue_stop()'s error to indicate that QEMU has lost connection with the backend. This patch is the pre patch for 'vhost-user: return failure if backend cras= hes when live migration', which makes the live migration aware of the loss of connection with the vhost-user backend and aborts the live migration. Signed-off-by: Haoqian He Message-Id: <20250416024729.3289157-3-haoqian.he@smartx.com> Tested-by: Lei Yang Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/virtio/vhost.h | 8 +++++--- hw/virtio/vhost.c | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h index bb4b58e115..38800a7156 100644 --- a/include/hw/virtio/vhost.h +++ b/include/hw/virtio/vhost.h @@ -232,8 +232,10 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevi= ce *vdev, bool vrings); * Stop the vhost device. After the device is stopped the notifiers * can be disabled (@vhost_dev_disable_notifiers) and the device can * be torn down (@vhost_dev_cleanup). + * + * Return: 0 on success, !=3D 0 on error when stopping dev. */ -void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vring= s); +int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings= ); =20 /** * DOC: vhost device configuration handling @@ -333,8 +335,8 @@ int vhost_device_iotlb_miss(struct vhost_dev *dev, uint= 64_t iova, int write); =20 int vhost_virtqueue_start(struct vhost_dev *dev, struct VirtIODevice *vdev, struct vhost_virtqueue *vq, unsigned idx); -void vhost_virtqueue_stop(struct vhost_dev *dev, struct VirtIODevice *vdev, - struct vhost_virtqueue *vq, unsigned idx); +int vhost_virtqueue_stop(struct vhost_dev *dev, struct VirtIODevice *vdev, + struct vhost_virtqueue *vq, unsigned idx); =20 void vhost_dev_reset_inflight(struct vhost_inflight *inflight); void vhost_dev_free_inflight(struct vhost_inflight *inflight); diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 4cae7c1664..fc43853704 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1367,10 +1367,10 @@ fail_alloc_desc: return r; } =20 -void vhost_virtqueue_stop(struct vhost_dev *dev, - struct VirtIODevice *vdev, - struct vhost_virtqueue *vq, - unsigned idx) +int vhost_virtqueue_stop(struct vhost_dev *dev, + struct VirtIODevice *vdev, + struct vhost_virtqueue *vq, + unsigned idx) { int vhost_vq_index =3D dev->vhost_ops->vhost_get_vq_index(dev, idx); struct vhost_vring_state state =3D { @@ -1380,7 +1380,7 @@ void vhost_virtqueue_stop(struct vhost_dev *dev, =20 if (virtio_queue_get_desc_addr(vdev, idx) =3D=3D 0) { /* Don't stop the virtqueue which might have not been started */ - return; + return 0; } =20 r =3D dev->vhost_ops->vhost_get_vring_base(dev, &state); @@ -1411,6 +1411,7 @@ void vhost_virtqueue_stop(struct vhost_dev *dev, 0, virtio_queue_get_avail_size(vdev, idx)); vhost_memory_unmap(dev, vq->desc, virtio_queue_get_desc_size(vdev, idx= ), 0, virtio_queue_get_desc_size(vdev, idx)); + return r; } =20 static int vhost_virtqueue_set_busyloop_timeout(struct vhost_dev *dev, @@ -2135,9 +2136,10 @@ fail_features: } =20 /* Host notifiers must be enabled at this point. */ -void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vring= s) +int vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev, bool vrings) { int i; + int rc =3D 0; =20 /* should only be called after backend is connected */ assert(hdev->vhost_ops); @@ -2156,10 +2158,10 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIOD= evice *vdev, bool vrings) vhost_dev_set_vring_enable(hdev, false); } for (i =3D 0; i < hdev->nvqs; ++i) { - vhost_virtqueue_stop(hdev, - vdev, - hdev->vqs + i, - hdev->vq_index + i); + rc |=3D vhost_virtqueue_stop(hdev, + vdev, + hdev->vqs + i, + hdev->vq_index + i); } if (hdev->vhost_ops->vhost_reset_status) { hdev->vhost_ops->vhost_reset_status(hdev); @@ -2176,6 +2178,7 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODev= ice *vdev, bool vrings) hdev->started =3D false; vdev->vhost_started =3D false; hdev->vdev =3D NULL; + return rc; } =20 int vhost_net_set_backend(struct vhost_dev *hdev, --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223969; cv=none; d=zohomail.com; s=zohoarc; b=eBqjAxICZkP762knT0+ydYcBHQBckoU/pBhxhSSDsq07tM0k1ye/D3XIdjQrq0AytRnzQ4jTLCldq+WQqsJ3aMgc8B8kUtJ+3lv31yiNWy5kdBvdvUNuv6Th/Zzf/HZPzkNnNyRN+5RPILzIkd5KjJYQ51kwJThTL3Ulcqw98oA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223969; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=K+aWiMff6gtRPihDhzGf8upD/FpK9Yj8qYiZ9/XOlMk=; b=YABNBo99e9waYBNqu32q4onr2PeqIdHu/okQ3NBM072jRtr9FI1iSITzoZd2yZIieMzb80cMmiE49rxQeQyxRdXgzF63FJwR2k0tyLVAfCvVkzLjEHPrbMk4Dc6Pd9aTiz+lxe1OE3Q5fmil/vn8aJ73fOpIcTDV/ckxDSps/e8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223969220193.8575598767468; Wed, 14 May 2025 04:59:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeV-0007SU-IA; Wed, 14 May 2025 07:52:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdy-0006Y6-22 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:26 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAds-0006M6-HJ for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:25 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-168-OUdUxqK0PSGLcIWTAJ47gQ-1; Wed, 14 May 2025 07:51:13 -0400 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3a1fc08c424so2676688f8f.3 for ; Wed, 14 May 2025 04:51:12 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f57ee95asm19614420f8f.11.2025.05.14.04.51.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223476; 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: in-reply-to:in-reply-to:references:references; bh=K+aWiMff6gtRPihDhzGf8upD/FpK9Yj8qYiZ9/XOlMk=; b=RqHqayMQWw0y3hMpT4WszkZ5PquUfy2GRbGUUHN2P5t78DZE20EmmLUR92ph3zg6kMoFm6 6yhcEpgMgyxDuriGMRqqGY/tVpNG//MPtbUWaNnVy8Kirr7xefW6Oz2/Q++c516sZdB5A4 iXl56Qyb7Uo6/BCZ121N/svmxXHo2MU= X-MC-Unique: OUdUxqK0PSGLcIWTAJ47gQ-1 X-Mimecast-MFC-AGG-ID: OUdUxqK0PSGLcIWTAJ47gQ_1747223472 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223471; x=1747828271; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=K+aWiMff6gtRPihDhzGf8upD/FpK9Yj8qYiZ9/XOlMk=; b=mG1QxKhOrbZZN8FJLGb2vScNe7Ur5yzyEy7uC8Mv/IHkC1JiP6khjAOPwf+cYQMto4 mPUtAg1hkpjxiWLoHsw7MUreZuI43Uwt4b19X0XvUOYCqDHWzfM8YsO3QxR1mpoq9Fom bedEXo0+F8Re0W3/iJccr/l0G+bIjqnge05EB1IFbm9biYqo4RCaITRJ6ofx3/nqdrDl Hrq6CykqC14AAdR+mrWSCuvD3rHEh8ZNaa9XJzDrz+syOlgGNTJP9ooqFIH/u20/aK3F U5EBrxc0CXdIbfp5w5r9YtB6ZGADjTLM33MuZ5ULwCQbSKUq91JHy8U5Be2dmDzz8SeZ TZjg== X-Gm-Message-State: AOJu0Yxd7Vtk/SPtq3tNFMu6k41fdNwR3xeeHGohpD8CPPhY80PIPHnt vkJRotx+lG2kFKgQhcuPPac57O1u9xvn+1NGuyuiU9m1MhC9JvC9bXptHcyFW+FNDXywQgpOUxE NqYjw0oLw8ymyC/yh5SqS2wunHWxcsvzon7NbP2uKfUzZRrPIE//s0u+hcGAD6L+kXgjm/Xeqg7 WnMPyCokDVweneExVl1eI7vsBF3KonGg== X-Gm-Gg: ASbGncswDRmi2KWzXGbfL3aFZNq0MIQdzd/2lNlxFoDfEfIw+DZ/34OloVh877eTLYe 1Y4PE5iaEwm2PLzAWy89s0TtafuQq6eb2wKe2mVqV5xisyDdjn/3MvWgwMzJJwzyaTwPJ3teKRX rRvE5DvB725W7zxrdHF1divPBBoJKV3YhuIy41IdB6f7P0C4HLzqi7IQvmv2hETsd/nTKuWnI1F gC1ZjmvjkGvAU/IOrGnfQSsa5YHyf3oWu0R0GHiUT5nLGa4ZNrpMaTzmJnSc5kyacYmS5m68SiQ FfiPNg== X-Received: by 2002:a05:6000:430e:b0:3a0:b940:d479 with SMTP id ffacd0b85a97d-3a349949cbbmr2567194f8f.53.1747223470923; Wed, 14 May 2025 04:51:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFGTI6xIfe+6/sDfikU2yaPh8jPeqaExm24jk6MeyIMK0QpGFQZerTpbsUVJuS6PEAgEqAlZw== X-Received: by 2002:a05:6000:430e:b0:3a0:b940:d479 with SMTP id ffacd0b85a97d-3a349949cbbmr2567124f8f.53.1747223470261; Wed, 14 May 2025 04:51:10 -0700 (PDT) Date: Wed, 14 May 2025 07:51:07 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Haoqian He , Lei Yang , Stefano Garzarella , Raphael Norwitz , Kevin Wolf , Hanna Reitz , Stefan Hajnoczi , Laurent Vivier , Amit Shah , =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , Paolo Bonzini , Gerd Hoffmann , Jason Wang , Fam Zheng , Alex =?utf-8?Q?Benn=C3=A9e?= , mzamazal@redhat.com, David Hildenbrand , "Gonglei (Arei)" , Eric Auger , qemu-block@nongnu.org, virtio-fs@lists.linux.dev Subject: [PULL 20/27] vhost-user: return failure if backend crash when live migration Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1747223970536019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Haoqian He Live migration should be terminated if the vhost-user backend crashes before the migration completes. Specifically, since the vhost device will be stopped when VM is stopped before the end of the live migration, in current implementation if the backend crashes, vhost-user device set_status() won't return failure, live migration won't perceive the disconnection between QEMU and the backend. When the VM is migrated to the destination, the inflight IO will be resubmitted, and if the IO was completed out of order before, it will cause IO error. To fix this issue: 1. Add the return value to set_status() for VirtioDeviceClass. a. For the vhost-user device, return failure when the backend crashes. b. For other virtio devices, always return 0. 2. Return failure if vhost_dev_stop() failed for vhost-user device. If QEMU loses connection with the vhost-user backend, virtio set_status() can return failure to the upper layer, migration_completion() can handle the error, terminate the live migration, and restore the VM, so that inflight IO can be completed normally. Signed-off-by: Haoqian He Message-Id: <20250416024729.3289157-4-haoqian.he@smartx.com> Tested-by: Lei Yang Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- include/hw/virtio/vhost-scsi-common.h | 2 +- include/hw/virtio/vhost-vsock-common.h | 2 +- include/hw/virtio/virtio.h | 2 +- include/system/vhost-user-backend.h | 2 +- backends/vhost-user.c | 20 +++++++++---------- hw/block/vhost-user-blk.c | 27 ++++++++++++++------------ hw/block/virtio-blk.c | 5 +++-- hw/char/virtio-serial-bus.c | 3 ++- hw/display/vhost-user-gpu.c | 12 +++++++++--- hw/input/virtio-input.c | 3 ++- hw/net/virtio-net.c | 3 ++- hw/scsi/vhost-scsi-common.c | 13 +++++++------ hw/scsi/vhost-scsi.c | 5 +++-- hw/scsi/vhost-user-scsi.c | 18 ++++++++++------- hw/virtio/vdpa-dev.c | 5 +++-- hw/virtio/vhost-user-base.c | 23 +++++++++++++--------- hw/virtio/vhost-user-fs.c | 23 +++++++++++++--------- hw/virtio/vhost-user-scmi.c | 27 +++++++++++++++----------- hw/virtio/vhost-user-vsock.c | 15 +++++++++----- hw/virtio/vhost-vsock-common.c | 12 ++++++------ hw/virtio/vhost-vsock.c | 11 ++++++----- hw/virtio/virtio-balloon.c | 3 ++- hw/virtio/virtio-crypto.c | 3 ++- hw/virtio/virtio-iommu.c | 3 ++- hw/virtio/virtio-rng.c | 5 +++-- hw/virtio/virtio.c | 22 ++++++++++++++------- 26 files changed, 160 insertions(+), 109 deletions(-) diff --git a/include/hw/virtio/vhost-scsi-common.h b/include/hw/virtio/vhos= t-scsi-common.h index c5d2c09455..d54d9c916f 100644 --- a/include/hw/virtio/vhost-scsi-common.h +++ b/include/hw/virtio/vhost-scsi-common.h @@ -40,7 +40,7 @@ struct VHostSCSICommon { }; =20 int vhost_scsi_common_start(VHostSCSICommon *vsc, Error **errp); -void vhost_scsi_common_stop(VHostSCSICommon *vsc); +int vhost_scsi_common_stop(VHostSCSICommon *vsc); char *vhost_scsi_common_get_fw_dev_path(FWPathProvider *p, BusState *bus, DeviceState *dev); void vhost_scsi_common_set_config(VirtIODevice *vdev, const uint8_t *confi= g); diff --git a/include/hw/virtio/vhost-vsock-common.h b/include/hw/virtio/vho= st-vsock-common.h index 75a74e8a99..01bf6062af 100644 --- a/include/hw/virtio/vhost-vsock-common.h +++ b/include/hw/virtio/vhost-vsock-common.h @@ -42,7 +42,7 @@ struct VHostVSockCommon { }; =20 int vhost_vsock_common_start(VirtIODevice *vdev); -void vhost_vsock_common_stop(VirtIODevice *vdev); +int vhost_vsock_common_stop(VirtIODevice *vdev); int vhost_vsock_common_pre_save(void *opaque); int vhost_vsock_common_post_load(void *opaque, int version_id); void vhost_vsock_common_realize(VirtIODevice *vdev); diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 7e0c471ea4..214d4a77e9 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -186,7 +186,7 @@ struct VirtioDeviceClass { void (*get_config)(VirtIODevice *vdev, uint8_t *config); void (*set_config)(VirtIODevice *vdev, const uint8_t *config); void (*reset)(VirtIODevice *vdev); - void (*set_status)(VirtIODevice *vdev, uint8_t val); + int (*set_status)(VirtIODevice *vdev, uint8_t val); /* Device must validate queue_index. */ void (*queue_reset)(VirtIODevice *vdev, uint32_t queue_index); /* Device must validate queue_index. */ diff --git a/include/system/vhost-user-backend.h b/include/system/vhost-use= r-backend.h index 5ed953cd53..5634ebdb2e 100644 --- a/include/system/vhost-user-backend.h +++ b/include/system/vhost-user-backend.h @@ -43,6 +43,6 @@ struct VhostUserBackend { int vhost_user_backend_dev_init(VhostUserBackend *b, VirtIODevice *vdev, unsigned nvqs, Error **errp); void vhost_user_backend_start(VhostUserBackend *b); -void vhost_user_backend_stop(VhostUserBackend *b); +int vhost_user_backend_stop(VhostUserBackend *b); =20 #endif diff --git a/backends/vhost-user.c b/backends/vhost-user.c index 94274a619d..42845329e7 100644 --- a/backends/vhost-user.c +++ b/backends/vhost-user.c @@ -97,30 +97,28 @@ err_host_notifiers: vhost_dev_disable_notifiers(&b->dev, b->vdev); } =20 -void +int vhost_user_backend_stop(VhostUserBackend *b) { BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(b->vdev))); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); - int ret =3D 0; + int ret; =20 if (!b->started) { - return; + return 0; } =20 - vhost_dev_stop(&b->dev, b->vdev, true); + ret =3D vhost_dev_stop(&b->dev, b->vdev, true); =20 - if (k->set_guest_notifiers) { - ret =3D k->set_guest_notifiers(qbus->parent, - b->dev.nvqs, false); - if (ret < 0) { - error_report("vhost guest notifier cleanup failed: %d", ret); - } + if (k->set_guest_notifiers && + k->set_guest_notifiers(qbus->parent, b->dev.nvqs, false) < 0) { + error_report("vhost guest notifier cleanup failed: %d", ret); + return -1; } - assert(ret >=3D 0); =20 vhost_dev_disable_notifiers(&b->dev, b->vdev); b->started =3D false; + return ret; } =20 static void set_chardev(Object *obj, const char *value, Error **errp) diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 4bb5ed299e..0eebbcd80d 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -204,7 +204,7 @@ err_host_notifiers: return ret; } =20 -static void vhost_user_blk_stop(VirtIODevice *vdev) +static int vhost_user_blk_stop(VirtIODevice *vdev) { VHostUserBlk *s =3D VHOST_USER_BLK(vdev); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); @@ -212,26 +212,26 @@ static void vhost_user_blk_stop(VirtIODevice *vdev) int ret; =20 if (!s->started_vu) { - return; + return 0; } s->started_vu =3D false; =20 if (!k->set_guest_notifiers) { - return; + return 0; } =20 - vhost_dev_stop(&s->dev, vdev, true); + ret =3D vhost_dev_stop(&s->dev, vdev, true); =20 - ret =3D k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false); - if (ret < 0) { + if (k->set_guest_notifiers(qbus->parent, s->dev.nvqs, false) < 0) { error_report("vhost guest notifier cleanup failed: %d", ret); - return; + return -1; } =20 vhost_dev_disable_notifiers(&s->dev, vdev); + return ret; } =20 -static void vhost_user_blk_set_status(VirtIODevice *vdev, uint8_t status) +static int vhost_user_blk_set_status(VirtIODevice *vdev, uint8_t status) { VHostUserBlk *s =3D VHOST_USER_BLK(vdev); bool should_start =3D virtio_device_should_start(vdev, status); @@ -239,11 +239,11 @@ static void vhost_user_blk_set_status(VirtIODevice *v= dev, uint8_t status) int ret; =20 if (!s->connected) { - return; + return -1; } =20 if (vhost_dev_is_started(&s->dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { @@ -253,9 +253,12 @@ static void vhost_user_blk_set_status(VirtIODevice *vd= ev, uint8_t status) qemu_chr_fe_disconnect(&s->chardev); } } else { - vhost_user_blk_stop(vdev); + ret =3D vhost_user_blk_stop(vdev); + if (ret < 0) { + return ret; + } } - + return 0; } =20 static uint64_t vhost_user_blk_get_features(VirtIODevice *vdev, diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index ea948d18fd..9bab2716c1 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -1270,7 +1270,7 @@ static uint64_t virtio_blk_get_features(VirtIODevice = *vdev, uint64_t features, return features; } =20 -static void virtio_blk_set_status(VirtIODevice *vdev, uint8_t status) +static int virtio_blk_set_status(VirtIODevice *vdev, uint8_t status) { VirtIOBlock *s =3D VIRTIO_BLK(vdev); =20 @@ -1279,7 +1279,7 @@ static void virtio_blk_set_status(VirtIODevice *vdev,= uint8_t status) } =20 if (!(status & VIRTIO_CONFIG_S_DRIVER_OK)) { - return; + return 0; } =20 /* A guest that supports VIRTIO_BLK_F_CONFIG_WCE must be able to send @@ -1302,6 +1302,7 @@ static void virtio_blk_set_status(VirtIODevice *vdev,= uint8_t status) virtio_vdev_has_feature(vdev, VIRTIO_BLK_F_WC= E)); } + return 0; } =20 static void virtio_blk_save_device(VirtIODevice *vdev, QEMUFile *f) diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index eb79f5258b..673c50f0be 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -622,7 +622,7 @@ static void guest_reset(VirtIOSerial *vser) } } =20 -static void set_status(VirtIODevice *vdev, uint8_t status) +static int set_status(VirtIODevice *vdev, uint8_t status) { VirtIOSerial *vser; VirtIOSerialPort *port; @@ -650,6 +650,7 @@ static void set_status(VirtIODevice *vdev, uint8_t stat= us) vsc->enable_backend(port, vdev->vm_running); } } + return 0; } =20 static void vser_reset(VirtIODevice *vdev) diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 43d4c08a2e..9fc6bbcd2c 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -516,7 +516,7 @@ vhost_user_gpu_set_config(VirtIODevice *vdev, } } =20 -static void +static int vhost_user_gpu_set_status(VirtIODevice *vdev, uint8_t val) { VhostUserGPU *g =3D VHOST_USER_GPU(vdev); @@ -525,18 +525,24 @@ vhost_user_gpu_set_status(VirtIODevice *vdev, uint8_t= val) if (val & VIRTIO_CONFIG_S_DRIVER_OK && vdev->vm_running) { if (!vhost_user_gpu_do_set_socket(g, &err)) { error_report_err(err); - return; + return 0; } vhost_user_backend_start(g->vhost); } else { + int ret; + /* unblock any wait and stop processing */ if (g->vhost_gpu_fd !=3D -1) { vhost_user_gpu_update_blocked(g, true); qemu_chr_fe_deinit(&g->vhost_chr, true); g->vhost_gpu_fd =3D -1; } - vhost_user_backend_stop(g->vhost); + ret =3D vhost_user_backend_stop(g->vhost); + if (ret < 0) { + return ret; + } } + return 0; } =20 static bool diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c index 1818cbddc7..a3f554f211 100644 --- a/hw/input/virtio-input.c +++ b/hw/input/virtio-input.c @@ -189,7 +189,7 @@ static uint64_t virtio_input_get_features(VirtIODevice = *vdev, uint64_t f, return f; } =20 -static void virtio_input_set_status(VirtIODevice *vdev, uint8_t val) +static int virtio_input_set_status(VirtIODevice *vdev, uint8_t val) { VirtIOInputClass *vic =3D VIRTIO_INPUT_GET_CLASS(vdev); VirtIOInput *vinput =3D VIRTIO_INPUT(vdev); @@ -202,6 +202,7 @@ static void virtio_input_set_status(VirtIODevice *vdev,= uint8_t val) } } } + return 0; } =20 static void virtio_input_reset(VirtIODevice *vdev) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 2de037c273..221252e00a 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -382,7 +382,7 @@ static void virtio_net_drop_tx_queue_data(VirtIODevice = *vdev, VirtQueue *vq) } } =20 -static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t statu= s) +static int virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status) { VirtIONet *n =3D VIRTIO_NET(vdev); VirtIONetQueue *q; @@ -437,6 +437,7 @@ static void virtio_net_set_status(struct VirtIODevice *= vdev, uint8_t status) } } } + return 0; } =20 static void virtio_net_set_link_status(NetClientState *nc) diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c index 4c8637045d..43525ba46d 100644 --- a/hw/scsi/vhost-scsi-common.c +++ b/hw/scsi/vhost-scsi-common.c @@ -101,24 +101,25 @@ err_host_notifiers: return ret; } =20 -void vhost_scsi_common_stop(VHostSCSICommon *vsc) +int vhost_scsi_common_stop(VHostSCSICommon *vsc) { VirtIODevice *vdev =3D VIRTIO_DEVICE(vsc); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); VirtioBusClass *k =3D VIRTIO_BUS_GET_CLASS(qbus); int ret =3D 0; =20 - vhost_dev_stop(&vsc->dev, vdev, true); + ret =3D vhost_dev_stop(&vsc->dev, vdev, true); =20 if (k->set_guest_notifiers) { - ret =3D k->set_guest_notifiers(qbus->parent, vsc->dev.nvqs, false); - if (ret < 0) { - error_report("vhost guest notifier cleanup failed: %d", re= t); + int r =3D k->set_guest_notifiers(qbus->parent, vsc->dev.nvqs, fals= e); + if (r < 0) { + error_report("vhost guest notifier cleanup failed: %d", ret); + return r; } } - assert(ret >=3D 0); =20 vhost_dev_disable_notifiers(&vsc->dev, vdev); + return ret; } =20 uint64_t vhost_scsi_common_get_features(VirtIODevice *vdev, uint64_t featu= res, diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 10fde8eee0..dd4250ebe8 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -114,7 +114,7 @@ static void vhost_scsi_stop(VHostSCSI *s) vhost_scsi_common_stop(vsc); } =20 -static void vhost_scsi_set_status(VirtIODevice *vdev, uint8_t val) +static int vhost_scsi_set_status(VirtIODevice *vdev, uint8_t val) { VHostSCSI *s =3D VHOST_SCSI(vdev); VHostSCSICommon *vsc =3D VHOST_SCSI_COMMON(s); @@ -125,7 +125,7 @@ static void vhost_scsi_set_status(VirtIODevice *vdev, u= int8_t val) } =20 if (vhost_dev_is_started(&vsc->dev) =3D=3D start) { - return; + return 0; } =20 if (start) { @@ -139,6 +139,7 @@ static void vhost_scsi_set_status(VirtIODevice *vdev, u= int8_t val) } else { vhost_scsi_stop(s); } + return 0; } =20 static void vhost_dummy_handle_output(VirtIODevice *vdev, VirtQueue *vq) diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 8298e8cc6d..25f2d894e7 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -52,19 +52,19 @@ static int vhost_user_scsi_start(VHostUserSCSI *s, Erro= r **errp) return ret; } =20 -static void vhost_user_scsi_stop(VHostUserSCSI *s) +static int vhost_user_scsi_stop(VHostUserSCSI *s) { VHostSCSICommon *vsc =3D VHOST_SCSI_COMMON(s); =20 if (!s->started_vu) { - return; + return 0; } s->started_vu =3D false; =20 - vhost_scsi_common_stop(vsc); + return vhost_scsi_common_stop(vsc); } =20 -static void vhost_user_scsi_set_status(VirtIODevice *vdev, uint8_t status) +static int vhost_user_scsi_set_status(VirtIODevice *vdev, uint8_t status) { VHostUserSCSI *s =3D (VHostUserSCSI *)vdev; DeviceState *dev =3D DEVICE(vdev); @@ -75,11 +75,11 @@ static void vhost_user_scsi_set_status(VirtIODevice *vd= ev, uint8_t status) int ret; =20 if (!s->connected) { - return; + return -1; } =20 if (vhost_dev_is_started(&vsc->dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { @@ -91,8 +91,12 @@ static void vhost_user_scsi_set_status(VirtIODevice *vde= v, uint8_t status) qemu_chr_fe_disconnect(&vs->conf.chardev); } } else { - vhost_user_scsi_stop(s); + ret =3D vhost_user_scsi_stop(s); + if (ret) { + return ret; + } } + return 0; } =20 static void vhost_user_scsi_handle_output(VirtIODevice *vdev, VirtQueue *v= q) diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index dd8837ce4e..d1da40afc8 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -312,7 +312,7 @@ static void vhost_vdpa_device_stop(VirtIODevice *vdev) vhost_dev_disable_notifiers(&s->dev, vdev); } =20 -static void vhost_vdpa_device_set_status(VirtIODevice *vdev, uint8_t statu= s) +static int vhost_vdpa_device_set_status(VirtIODevice *vdev, uint8_t status) { VhostVdpaDevice *s =3D VHOST_VDPA_DEVICE(vdev); bool should_start =3D virtio_device_started(vdev, status); @@ -324,7 +324,7 @@ static void vhost_vdpa_device_set_status(VirtIODevice *= vdev, uint8_t status) } =20 if (s->started =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { @@ -335,6 +335,7 @@ static void vhost_vdpa_device_set_status(VirtIODevice *= vdev, uint8_t status) } else { vhost_vdpa_device_stop(vdev); } + return 0; } =20 static const Property vhost_vdpa_device_properties[] =3D { diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c index 77143320a2..ff67a020b4 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -66,7 +66,7 @@ err_host_notifiers: vhost_dev_disable_notifiers(&vub->vhost_dev, vdev); } =20 -static void vub_stop(VirtIODevice *vdev) +static int vub_stop(VirtIODevice *vdev) { VHostUserBase *vub =3D VHOST_USER_BASE(vdev); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); @@ -74,34 +74,39 @@ static void vub_stop(VirtIODevice *vdev) int ret; =20 if (!k->set_guest_notifiers) { - return; + return 0; } =20 - vhost_dev_stop(&vub->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&vub->vhost_dev, vdev, true); =20 - ret =3D k->set_guest_notifiers(qbus->parent, vub->vhost_dev.nvqs, fals= e); - if (ret < 0) { + if (k->set_guest_notifiers(qbus->parent, vub->vhost_dev.nvqs, false) <= 0) { error_report("vhost guest notifier cleanup failed: %d", ret); - return; + return -1; } =20 vhost_dev_disable_notifiers(&vub->vhost_dev, vdev); + return ret; } =20 -static void vub_set_status(VirtIODevice *vdev, uint8_t status) +static int vub_set_status(VirtIODevice *vdev, uint8_t status) { VHostUserBase *vub =3D VHOST_USER_BASE(vdev); bool should_start =3D virtio_device_should_start(vdev, status); =20 if (vhost_dev_is_started(&vub->vhost_dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { vub_start(vdev); } else { - vub_stop(vdev); + int ret; + ret =3D vub_stop(vdev); + if (ret < 0) { + return ret; + } } + return 0; } =20 /* diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index f6d1fc8804..e77c69eb12 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -100,7 +100,7 @@ err_host_notifiers: vhost_dev_disable_notifiers(&fs->vhost_dev, vdev); } =20 -static void vuf_stop(VirtIODevice *vdev) +static int vuf_stop(VirtIODevice *vdev) { VHostUserFS *fs =3D VHOST_USER_FS(vdev); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); @@ -108,34 +108,39 @@ static void vuf_stop(VirtIODevice *vdev) int ret; =20 if (!k->set_guest_notifiers) { - return; + return 0; } =20 - vhost_dev_stop(&fs->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&fs->vhost_dev, vdev, true); =20 - ret =3D k->set_guest_notifiers(qbus->parent, fs->vhost_dev.nvqs, false= ); - if (ret < 0) { + if (k->set_guest_notifiers(qbus->parent, fs->vhost_dev.nvqs, false) < = 0) { error_report("vhost guest notifier cleanup failed: %d", ret); - return; + return -1; } =20 vhost_dev_disable_notifiers(&fs->vhost_dev, vdev); + return ret; } =20 -static void vuf_set_status(VirtIODevice *vdev, uint8_t status) +static int vuf_set_status(VirtIODevice *vdev, uint8_t status) { VHostUserFS *fs =3D VHOST_USER_FS(vdev); bool should_start =3D virtio_device_should_start(vdev, status); =20 if (vhost_dev_is_started(&fs->vhost_dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { vuf_start(vdev); } else { - vuf_stop(vdev); + int ret; + ret =3D vuf_stop(vdev); + if (ret < 0) { + return ret; + } } + return 0; } =20 static uint64_t vuf_get_features(VirtIODevice *vdev, diff --git a/hw/virtio/vhost-user-scmi.c b/hw/virtio/vhost-user-scmi.c index 7a0f622181..f9264c4374 100644 --- a/hw/virtio/vhost-user-scmi.c +++ b/hw/virtio/vhost-user-scmi.c @@ -83,7 +83,7 @@ err_host_notifiers: return ret; } =20 -static void vu_scmi_stop(VirtIODevice *vdev) +static int vu_scmi_stop(VirtIODevice *vdev) { VHostUserSCMI *scmi =3D VHOST_USER_SCMI(vdev); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); @@ -93,41 +93,46 @@ static void vu_scmi_stop(VirtIODevice *vdev) =20 /* vhost_dev_is_started() check in the callers is not fully reliable. = */ if (!scmi->started_vu) { - return; + return 0; } scmi->started_vu =3D false; =20 if (!k->set_guest_notifiers) { - return; + return 0; } =20 - vhost_dev_stop(vhost_dev, vdev, true); + ret =3D vhost_dev_stop(vhost_dev, vdev, true); =20 - ret =3D k->set_guest_notifiers(qbus->parent, vhost_dev->nvqs, false); - if (ret < 0) { + if (k->set_guest_notifiers(qbus->parent, vhost_dev->nvqs, false) < 0) { error_report("vhost guest notifier cleanup failed: %d", ret); - return; + return -1; } vhost_dev_disable_notifiers(vhost_dev, vdev); + return ret; } =20 -static void vu_scmi_set_status(VirtIODevice *vdev, uint8_t status) +static int vu_scmi_set_status(VirtIODevice *vdev, uint8_t status) { VHostUserSCMI *scmi =3D VHOST_USER_SCMI(vdev); bool should_start =3D virtio_device_should_start(vdev, status); =20 if (!scmi->connected) { - return; + return -1; } if (vhost_dev_is_started(&scmi->vhost_dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { vu_scmi_start(vdev); } else { - vu_scmi_stop(vdev); + int ret; + ret =3D vu_scmi_stop(vdev); + if (ret < 0) { + return ret; + } } + return 0; } =20 static uint64_t vu_scmi_get_features(VirtIODevice *vdev, uint64_t features, diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c index 2776792f59..993c287348 100644 --- a/hw/virtio/vhost-user-vsock.c +++ b/hw/virtio/vhost-user-vsock.c @@ -54,23 +54,28 @@ const VhostDevConfigOps vsock_ops =3D { .vhost_dev_config_notifier =3D vuv_handle_config_change, }; =20 -static void vuv_set_status(VirtIODevice *vdev, uint8_t status) +static int vuv_set_status(VirtIODevice *vdev, uint8_t status) { VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(vdev); bool should_start =3D virtio_device_should_start(vdev, status); + int ret; =20 if (vhost_dev_is_started(&vvc->vhost_dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { - int ret =3D vhost_vsock_common_start(vdev); + ret =3D vhost_vsock_common_start(vdev); if (ret < 0) { - return; + return ret; } } else { - vhost_vsock_common_stop(vdev); + ret =3D vhost_vsock_common_stop(vdev); + if (ret < 0) { + return ret; + } } + return 0; } =20 static uint64_t vuv_get_features(VirtIODevice *vdev, diff --git a/hw/virtio/vhost-vsock-common.c b/hw/virtio/vhost-vsock-common.c index 4b4fbb45cc..c6c44d8989 100644 --- a/hw/virtio/vhost-vsock-common.c +++ b/hw/virtio/vhost-vsock-common.c @@ -95,7 +95,7 @@ err_host_notifiers: return ret; } =20 -void vhost_vsock_common_stop(VirtIODevice *vdev) +int vhost_vsock_common_stop(VirtIODevice *vdev) { VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(vdev); BusState *qbus =3D BUS(qdev_get_parent_bus(DEVICE(vdev))); @@ -103,18 +103,18 @@ void vhost_vsock_common_stop(VirtIODevice *vdev) int ret; =20 if (!k->set_guest_notifiers) { - return; + return 0; } =20 - vhost_dev_stop(&vvc->vhost_dev, vdev, true); + ret =3D vhost_dev_stop(&vvc->vhost_dev, vdev, true); =20 - ret =3D k->set_guest_notifiers(qbus->parent, vvc->vhost_dev.nvqs, fals= e); - if (ret < 0) { + if (k->set_guest_notifiers(qbus->parent, vvc->vhost_dev.nvqs, false) <= 0) { error_report("vhost guest notifier cleanup failed: %d", ret); - return; + return -1; } =20 vhost_dev_disable_notifiers(&vvc->vhost_dev, vdev); + return ret; } =20 =20 diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index b73dc723c2..6e4088831f 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -67,37 +67,38 @@ static int vhost_vsock_set_running(VirtIODevice *vdev, = int start) } =20 =20 -static void vhost_vsock_set_status(VirtIODevice *vdev, uint8_t status) +static int vhost_vsock_set_status(VirtIODevice *vdev, uint8_t status) { VHostVSockCommon *vvc =3D VHOST_VSOCK_COMMON(vdev); bool should_start =3D virtio_device_should_start(vdev, status); int ret; =20 if (vhost_dev_is_started(&vvc->vhost_dev) =3D=3D should_start) { - return; + return 0; } =20 if (should_start) { ret =3D vhost_vsock_common_start(vdev); if (ret < 0) { - return; + return 0; } =20 ret =3D vhost_vsock_set_running(vdev, 1); if (ret < 0) { vhost_vsock_common_stop(vdev); error_report("Error starting vhost vsock: %d", -ret); - return; + return 0; } } else { ret =3D vhost_vsock_set_running(vdev, 0); if (ret < 0) { error_report("vhost vsock set running failed: %d", ret); - return; + return 0; } =20 vhost_vsock_common_stop(vdev); } + return 0; } =20 static uint64_t vhost_vsock_get_features(VirtIODevice *vdev, diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 91510ec2e2..db787d00b3 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -958,7 +958,7 @@ static void virtio_balloon_device_reset(VirtIODevice *v= dev) s->poison_val =3D 0; } =20 -static void virtio_balloon_set_status(VirtIODevice *vdev, uint8_t status) +static int virtio_balloon_set_status(VirtIODevice *vdev, uint8_t status) { VirtIOBalloon *s =3D VIRTIO_BALLOON(vdev); =20 @@ -988,6 +988,7 @@ static void virtio_balloon_set_status(VirtIODevice *vde= v, uint8_t status) qemu_mutex_unlock(&s->free_page_lock); } } + return 0; } =20 static ResettableState *virtio_balloon_get_reset_state(Object *obj) diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index e24d6914b6..517f2089c5 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -1197,11 +1197,12 @@ static void virtio_crypto_vhost_status(VirtIOCrypto= *c, uint8_t status) } } =20 -static void virtio_crypto_set_status(VirtIODevice *vdev, uint8_t status) +static int virtio_crypto_set_status(VirtIODevice *vdev, uint8_t status) { VirtIOCrypto *vcrypto =3D VIRTIO_CRYPTO(vdev); =20 virtio_crypto_vhost_status(vcrypto, status); + return 0; } =20 static void virtio_crypto_guest_notifier_mask(VirtIODevice *vdev, int idx, diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 54060988ef..3500f1b082 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -1522,9 +1522,10 @@ static void virtio_iommu_device_reset_exit(Object *o= bj, ResetType type) NULL, NULL, virtio_iommu_put_endpoint); } =20 -static void virtio_iommu_set_status(VirtIODevice *vdev, uint8_t status) +static int virtio_iommu_set_status(VirtIODevice *vdev, uint8_t status) { trace_virtio_iommu_device_status(status); + return 0; } =20 static void virtio_iommu_instance_init(Object *obj) diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c index dcb3c71d6a..3df5d2576e 100644 --- a/hw/virtio/virtio-rng.c +++ b/hw/virtio/virtio-rng.c @@ -159,17 +159,18 @@ static void check_rate_limit(void *opaque) vrng->activate_timer =3D true; } =20 -static void virtio_rng_set_status(VirtIODevice *vdev, uint8_t status) +static int virtio_rng_set_status(VirtIODevice *vdev, uint8_t status) { VirtIORNG *vrng =3D VIRTIO_RNG(vdev); =20 if (!vdev->vm_running) { - return; + return 0; } vdev->status =3D status; =20 /* Something changed, try to process buffers */ virtio_rng_process(vrng); + return 0; } =20 static void virtio_rng_device_realize(DeviceState *dev, Error **errp) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index e3b62522ec..1b55d8d8a2 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2221,12 +2221,12 @@ int virtio_set_status(VirtIODevice *vdev, uint8_t v= al) { VirtioDeviceClass *k =3D VIRTIO_DEVICE_GET_CLASS(vdev); trace_virtio_set_status(vdev, val); + int ret =3D 0; =20 if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) { if (!(vdev->status & VIRTIO_CONFIG_S_FEATURES_OK) && val & VIRTIO_CONFIG_S_FEATURES_OK) { - int ret =3D virtio_validate_features(vdev); - + ret =3D virtio_validate_features(vdev); if (ret) { return ret; } @@ -2239,11 +2239,15 @@ int virtio_set_status(VirtIODevice *vdev, uint8_t v= al) } =20 if (k->set_status) { - k->set_status(vdev, val); + ret =3D k->set_status(vdev, val); + if (ret) { + qemu_log("set %s status to %d failed, old status: %d\n", + vdev->name, val, vdev->status); + } } vdev->status =3D val; =20 - return 0; + return ret; } =20 static enum virtio_device_endian virtio_default_endian(void) @@ -3419,7 +3423,7 @@ void virtio_cleanup(VirtIODevice *vdev) qemu_del_vm_change_state_handler(vdev->vmstate); } =20 -static void virtio_vmstate_change(void *opaque, bool running, RunState sta= te) +static int virtio_vmstate_change(void *opaque, bool running, RunState stat= e) { VirtIODevice *vdev =3D opaque; BusState *qbus =3D qdev_get_parent_bus(DEVICE(vdev)); @@ -3436,8 +3440,12 @@ static void virtio_vmstate_change(void *opaque, bool= running, RunState state) } =20 if (!backend_run) { - virtio_set_status(vdev, vdev->status); + int ret =3D virtio_set_status(vdev, vdev->status); + if (ret) { + return ret; + } } + return 0; } =20 void virtio_instance_init_common(Object *proxy_obj, void *data, @@ -3489,7 +3497,7 @@ void virtio_init(VirtIODevice *vdev, uint16_t device_= id, size_t config_size) vdev->config =3D NULL; } vdev->vmstate =3D qdev_add_vm_change_state_handler(DEVICE(vdev), - virtio_vmstate_change, NULL, vdev); + NULL, virtio_vmstate_change, vdev); vdev->device_endian =3D virtio_default_endian(); vdev->use_guest_notifier_mask =3D true; } --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223540; cv=none; d=zohomail.com; s=zohoarc; b=Ji97TL/WDVetCIFJVMkDhWGSVLBAzehCDqO3X9GE9y3Z1LxngWt3DBCj+lEs0X5xuTMmL5ToEcrDZ+FjJv9CciP1MetfuPUoRJGMafi38TjOzd+2TBnP0wzi317Ny3cRZ7fXF4kq/ZoulYIWtjtWnzIrL12o/ZzAIlv4IQOWHZM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223540; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0VpE5v8x1WSNUUa3q9Dyat/dXaWkUdr2tXgzrQ6PW/w=; b=LcTLQD5F62JFS9d+ZZzNc3VVaP61oTiY+cU4Y4772NhmcD5HyUi+pTsIuWum3SGi6K4/grKio0IS+lFkAesyR6tfc1oj7z6TlVemT/K8FdsO0NpZmJUNpj4FPs63VVbksccikpSgJwctY1cyVd9HsW0oc410pVBvfDFgXXs3lf4= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 174722354047074.83502589579825; Wed, 14 May 2025 04:52:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeL-0007B8-Bc; Wed, 14 May 2025 07:51:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdv-0006Pu-1h for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdp-0006Ly-9I for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:22 -0400 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-694-xTCMgYiYPIKR5HYsF_zLZw-1; Wed, 14 May 2025 07:51:14 -0400 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-3a0b2e56da1so2718690f8f.0 for ; Wed, 14 May 2025 04:51:14 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f5a2cf43sm19497814f8f.70.2025.05.14.04.51.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223476; 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: in-reply-to:in-reply-to:references:references; bh=0VpE5v8x1WSNUUa3q9Dyat/dXaWkUdr2tXgzrQ6PW/w=; b=DEjqAODvt7vBUPMWJa7fYn4HsM6kdaWPkCRmvDz7QORNjNbgTgd097Hji+P1H/0rpKbvzk JRRp3wmssm0Fn88yZPLS4D7k2xQX3UH3KYNT1WhnCfcRoarubZbZCCS79nPNTDp8ZBbSAs jCdU89nx1ElJuueESQp9oyUMBlIRjyI= X-MC-Unique: xTCMgYiYPIKR5HYsF_zLZw-1 X-Mimecast-MFC-AGG-ID: xTCMgYiYPIKR5HYsF_zLZw_1747223473 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223473; x=1747828273; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0VpE5v8x1WSNUUa3q9Dyat/dXaWkUdr2tXgzrQ6PW/w=; b=qHX/jKIUeqzR+bY15H+vjCgwa5upwKlZy1VLJlTDsmgFlfWsS7Fjgg7Rjb3dsq8NgE Ub5qfRVOMrf+DcD7F48g5B5fmBS35o4jlgUs1ESsCpvUuGozzyRCZiLLf2+b65GtYJUr QgjOh3Awmaj2JZASDDUQVSMN8+A3GMf8vijRjXjOYJgrZGc8AZME1AqzqRBg1PQ9Q7H2 XgE5N3M6CvZAQ4udX/AZUeH/xiT8cDk7IC0M93tirmsjCEdF3IRis2ZYrapJvY/L6EJ1 Z4UGGMU7iq8COv/BZPVLQRlgI4vaCzX1OmxAuuWHM/uwt8ZzhdiruOQYvx404l8C+yLf s1mg== X-Gm-Message-State: AOJu0YzntqsaLCqjGllVaeg2egiKKU2SyZgoVC881q4Z9ni6Jr3PM7RZ npNjIOVQAexy5SJjzXkghMwXNYfhr6zwxz0HIIw+b/pjNSJ6br0C9674lT/O62cF6dYSehceSU7 gRBbusVOnhi11a2SaJw7X69apmrrwHgr+iY+qldbrLMHzmYHe9lSAefsgWqwwpEN4+0FKnK2t1P X7QiXJyGovSwRce/NE/vjPlUgaQHWgJQ== X-Gm-Gg: ASbGnctf5GF5Ao+eRoeM0r6r0G5SjwDubOBGsAnjLxofE9W2Ajfl1txdXbBPbs8F5YI 1LQjxIY9ycMpy4XhlsfGSo0Aw5qVr27lGIWzP0kKjUcrzhhwhPMZkgQfXEcXTuiLfk54hz/2/av HM7aMvagk0jzRkOncdgDOGf6P+t8QLEz6NkrvWEIm4t3wm3JycwroBVv8bLXba1arBKQL/E7NmT UxbiuDjvSK8kIcdiJ0e6jz0qZZU4WnTIW2KYg0qwIEmEPeHlcXo3D0SBg6d4md+pVSJ3nw1C5b9 aHJmgA== X-Received: by 2002:a05:6000:250d:b0:3a2:133:b17d with SMTP id ffacd0b85a97d-3a3496b8037mr2806757f8f.14.1747223472933; Wed, 14 May 2025 04:51:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGHMK6CNR+qN/CC8Ucqz6A1RFqXkZxY+7bWCEMqfng3/PthwwaXydgehbqN/ZCFis/YsPonEg== X-Received: by 2002:a05:6000:250d:b0:3a2:133:b17d with SMTP id ffacd0b85a97d-3a3496b8037mr2806725f8f.14.1747223472462; Wed, 14 May 2025 04:51:12 -0700 (PDT) Date: Wed, 14 May 2025 07:51:10 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Dongli Zhang , Stefano Garzarella , Paolo Bonzini , Fam Zheng Subject: [PULL 21/27] vhost-scsi: support VIRTIO_SCSI_F_HOTPLUG Message-ID: <1a5a2629eab94297a37e4adcc5fb69beb7bb0b0c.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223541416116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Dongli Zhang So far there isn't way to test host kernel vhost-scsi event queue path, because VIRTIO_SCSI_F_HOTPLUG isn't supported by QEMU. virtio-scsi.c and vhost-user-scsi.c already support VIRTIO_SCSI_F_HOTPLUG as property "hotplug". Add support to vhost-scsi.c to help evaluate and test event queue. To test the feature: 1. Create vhost-scsi target with targetcli. targetcli /backstores/fileio create name=3Dstorage file_or_dev=3Ddisk01.raw targetcli /vhost create naa.1123451234512345 targetcli /vhost/naa.1123451234512345/tpg1/luns create /backstores/fileio/s= torage 2. Create QEMU instance with vhost-scsi. -device vhost-scsi-pci,wwpn=3Dnaa.1123451234512345,hotplug=3Dtrue 3. Once guest bootup, hotplug a new LUN from host. targetcli /backstores/fileio create name=3Dstorage02 file_or_dev=3Ddisk02.r= aw targetcli /vhost/naa.1123451234512345/tpg1/luns create /backstores/fileio/s= torage02 Signed-off-by: Dongli Zhang Message-Id: <20250203005215.1502-1-dongli.zhang@oracle.com> Acked-by: Stefano Garzarella --- hw/scsi/vhost-scsi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index dd4250ebe8..cdf405b0f8 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -359,6 +359,9 @@ static const Property vhost_scsi_properties[] =3D { DEFINE_PROP_BIT64("t10_pi", VHostSCSICommon, host_features, VIRTIO_SCSI_F_T10_PI, false), + DEFINE_PROP_BIT64("hotplug", VHostSCSICommon, host_features, + VIRTIO_SCSI_F_HOTPLUG, + false), DEFINE_PROP_BOOL("migratable", VHostSCSICommon, migratable, false), DEFINE_PROP_BOOL("worker_per_virtqueue", VirtIOSCSICommon, conf.worker_per_virtqueue, false), --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223986; cv=none; d=zohomail.com; s=zohoarc; b=PH2/NCiUeiP6DA1wDBkiOtu7oSweatuCQiNioH6Y44GJaI3P3VjSVy0ho23XUcYZxYufI5YeCa79NnS9wioPKkLq2EfBf5AuYiXKkD0OpRGaAJ4ZZuwGTglfm2Jd3hcntlfd1GhAJLnBLGgu6MgBVVJVQS8iGRe6WTFRwgG/bYE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223986; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r130SNDHPsyHuJY951ydcB9zf5qK/Ak7BggOv+qCFfw=; b=UGUlqrAwKZ0Ro6atkxTxkfnGcvWOCQiMINPysU4n/044zYG+L3dZR2+F4IeGkyTjZnqi4Vl5wQcMpQw3no6/3uRTT91/+YjlvN76XPXcTY6wk5DKczn3xkVkbeSDYMLgAvlm931WXD/pakvba6irAX9D+zZOdY9mO2IGTNPjBK0= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223986291714.1273416960453; Wed, 14 May 2025 04:59:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeI-0006ww-QB; Wed, 14 May 2025 07:51:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdw-0006UZ-J4 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:25 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdt-0006ND-JG for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:24 -0400 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-221-c2fIguB9PxO4ypV2nSxp9w-1; Wed, 14 May 2025 07:51:16 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43eed325461so35271335e9.3 for ; Wed, 14 May 2025 04:51:16 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f395166fsm27410915e9.18.2025.05.14.04.51.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223477; 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: in-reply-to:in-reply-to:references:references; bh=r130SNDHPsyHuJY951ydcB9zf5qK/Ak7BggOv+qCFfw=; b=CQT+u1+Wsl3fiOjQ/M5ySHvPIXUsvx3olaTllpOmZrLTjIyRVlj1MqfQYCynjsMM0xQqOA UIw6JkR6aZ0EqhvJPKt8u1XElnfyrE+tWbqa6YXXLIp8u7tINO5Xamen1u7NSviynQCXxz S7tsj6Cfqz3zaasdkZqoyqB+4hAO+UQ= X-MC-Unique: c2fIguB9PxO4ypV2nSxp9w-1 X-Mimecast-MFC-AGG-ID: c2fIguB9PxO4ypV2nSxp9w_1747223475 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223475; x=1747828275; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=r130SNDHPsyHuJY951ydcB9zf5qK/Ak7BggOv+qCFfw=; b=IOLzcBqmdM8YAEgb1Z4XhlqEtWkRzuSDj490tXjgFtI4iOunfTEJKnswb2rnASj+iv pm0KZN45KCt2KJDGXTGCj+O0LN2TQhywE44dMdUMFMT5Zc2YpNrwL4w+d+/2cR5mVe2M 2E9WVpb4MnAWuNlhzP7kZPn63lFUXAQexFjT1OWtxg6egj8EnLktFIKWp7zslNB6P5er oJd9HS4v3t2PiDa9WlxYocdsR7HB1ISpFlZoRh+IOHo8mXReShJoxVgUJ2HwE1npQ+8r 5DN/vnBt4RVNpfW49YkowOr1LhN56s3VgKuzHMYuVKdVQ1cbrNl7EOtTlrYo+dICgiDS FKEA== X-Gm-Message-State: AOJu0YxOsv6nBcwN+C8j2E9pwxo/0N7h0Cz9CgFUApQAXh68qKGl1fO4 vvxWyIU7/oW04XSHEbYvxXHuB2kkkceVtA3jF7BhUZuheskGS9T1nRqIQ2dbnb87xM++sgbyGoC zcwHIBJWNISa8U9MaK+hAPKl3UU0jxg32Gr4R9v9U8QVdP7OTDBa1kroo1X8r2b9O4XzSYsGkHe qfs0/bE1gG3iA3u/Fa/9mlQKRs+SLBwg== X-Gm-Gg: ASbGncupgwgNfCNrQ9zd8Spya8vkv9TAkNAiW2EYluWPQPtloDXZr4pBXoHiaqcwsq+ MiExbPOg7QAllWubksx5LUavKJDHvWcSU5R93hneuN3JDMph5K87jD3zlH6YwS5jY7bZJdJdgUX 1/MKUPk4RXEdanPTOZdPfEOil4nFI1f3UDf/YlnLwQf/BkRUdAqU7CH8cC56Xh+dlzCJKiCc8KN VQk5pziErrKt1vRY8nxXjDNbtTgfczJGigIpdP6svlmqE53mMGW1IQtBigvD1BlmiS95nvC6rvS bEddsg== X-Received: by 2002:a05:600c:1547:b0:43d:db5:7b1a with SMTP id 5b1f17b1804b1-442f20e4994mr25701025e9.12.1747223474982; Wed, 14 May 2025 04:51:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG7lIZMd/cE34Bndss/Hyr5hiGECAzKCJvvcxAa35zIkhklTc/65+IM8CP+zhpE16E6Gr8mSA== X-Received: by 2002:a05:600c:1547:b0:43d:db5:7b1a with SMTP id 5b1f17b1804b1-442f20e4994mr25700775e9.12.1747223474496; Wed, 14 May 2025 04:51:14 -0700 (PDT) Date: Wed, 14 May 2025 07:51:12 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , qemu-stable@nongnu.org Subject: [PULL 22/27] virtio: Call set_features during reset Message-ID: <0caed25cd171c611781589b5402161d27d57229c.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223987085116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki virtio-net expects set_features() will be called when the feature set used by the guest changes to update the number of virtqueues but it is not called during reset, which will clear all features, leaving the queues added for VIRTIO_NET_F_MQ or VIRTIO_NET_F_RSS. Not only these extra queues are visible to the guest, they will cause segmentation fault during migration. Call set_features() during reset to remove those queues for virtio-net as we call set_status(). It will also prevent similar bugs for virtio-net and other devices in the future. Fixes: f9d6dbf0bf6e ("virtio-net: remove virtio queues if the guest doesn't= support multiqueue") Buglink: https://issues.redhat.com/browse/RHEL-73842 Cc: qemu-stable@nongnu.org Signed-off-by: Akihiko Odaki Message-Id: <20250421-reset-v2-1-e4c1ead88ea1@daynix.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/virtio/virtio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 1b55d8d8a2..3300f4afb0 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2320,6 +2320,8 @@ void virtio_queue_enable(VirtIODevice *vdev, uint32_t= queue_index) } } =20 +static int virtio_set_features_nocheck(VirtIODevice *vdev, uint64_t val); + void virtio_reset(void *opaque) { VirtIODevice *vdev =3D opaque; @@ -2350,7 +2352,7 @@ void virtio_reset(void *opaque) vdev->start_on_kick =3D false; vdev->started =3D false; vdev->broken =3D false; - vdev->guest_features =3D 0; + virtio_set_features_nocheck(vdev, 0); vdev->queue_sel =3D 0; vdev->status =3D 0; vdev->disabled =3D false; --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223928; cv=none; d=zohomail.com; s=zohoarc; b=J1vwNb4dk/B4ANfOcoW5lRv4J9FM96TSCz7a9DX2lVoE/Xim5rU89LCYJiiJ7GjBwPgsIaTnnpJ6FNnyug0NtMKL2E80pYlxuy5X13DoLPZpmeXH4seRrIVexCXzlF9mY3X4CbW2vKIj+2TCjl5dmoeQwZkLaGC0o88cTAKok5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223928; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HnuqpIUtdmJu47LKWP+h8IXAeG/9kJhvAnZOIfqpYg8=; b=kIP8oplK7xKqiAF58AdnG6j6hXAdW7bxGUH6qTe+miaB3NKzCamRnZK0ztOjeGNrx1E4/CD9RiU0x2C231xjuufFJqdMgqsdXMn/PeN8KWpvKiumVCdDlqVcdtHNO8bs1LNk99i7H8rhmIn5TNPuwd/ImGkk2zOidHZJgC+XpEo= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223928612519.8027524818241; Wed, 14 May 2025 04:58:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAfx-0000e3-SU; Wed, 14 May 2025 07:53:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe0-0006cE-6F for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:33 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdu-0006Nb-Ku for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:27 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-190-SLeayItWO3OODACn6ahKcA-1; Wed, 14 May 2025 07:51:18 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43d0a037f97so34800435e9.2 for ; Wed, 14 May 2025 04:51:18 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f39e84d3sm29380325e9.32.2025.05.14.04.51.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223479; 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: in-reply-to:in-reply-to:references:references; bh=HnuqpIUtdmJu47LKWP+h8IXAeG/9kJhvAnZOIfqpYg8=; b=NRePbIlSZvFhIKzfHv6DLRmDSIhxutCcs3hvgVDVFnbsdfsPHWg14cCTafR1K4VR3qaWkm 9JGnAuR7tRkBxnimektZd6rcBYHYIUPGiXFHmyJjWnXe0B2MEXPncUQhZDiCG2S4oHmTOm GZ+5WzipPvjrDUlCjTMD9Jw+5czwplw= X-MC-Unique: SLeayItWO3OODACn6ahKcA-1 X-Mimecast-MFC-AGG-ID: SLeayItWO3OODACn6ahKcA_1747223477 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223477; x=1747828277; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=HnuqpIUtdmJu47LKWP+h8IXAeG/9kJhvAnZOIfqpYg8=; b=jbZENrY6SPtddrVfwegc+HO6b4GZY4gKDTYm23XPw9cEs9917bAWRTXPFQm6rprXYN 0r8R/W6WG4sx4Bn1nPaHT3uW8XiDkGom8EfSx1RVbFXQzVBhnGRUIC7Q/gs2rfTvVUdR e2A6MrFnIi/T04itqR7vbLCMlvzt2Tlwu7uBTHqvohu6151TS/wGZ+PJ6H6mVYVSlhtu Bi81bG5NGKUcaXX084vQS00igfYqIWuYEfgH/09dZQcagY7OFE0t2RybR8zF6fraTGjm JHBt9cesxw9sP3r0OT6mm79/BfR4yVAjTb30NBEEigHsmXT54ZDHIQmGd0mmx1MtmeIh qg9g== X-Gm-Message-State: AOJu0YxVym0PF0zk8qDv5ZqcQZLMyc3tNL57gSQ2ZkHSIljvtP2KhZwe 4bVb9uPw0eY4HTv+S+rWKI6ZaSTMBwEQOK0Th7mJERDIIkAhUey8ehvmDgaA7fYEILW9PYXUepP DcnU/hqOBnw26wOb8oBfu/B8OK3LPES8cVdC5PACVL2aRffXNKrKtfIoZUw2gSwdhK78OZQuxZd /V4mbh2zjygR+GY1W0shjsDWqG17zKOA== X-Gm-Gg: ASbGncum/bWOYPuaD/lahR6zQDpNqXKnfYv9EaRLVmSpR/7LE4ytDgPnnu2b1tdvmwx zQlCPAIDBDwZU0DMyCUT4X5eR65Q5PN5LgmyuMQYYiudNpKwyAKT3QofsKlf3q1SEIZAxA2cecd n7/2vz5V7vTz1VaW/hKKwKkgYs8uhiNjYV+kGBfE/os+ITxChsFKfuM/W28eAJ3Kd8Hk9j1u/Au drEdR61OdJej3tIawIEm2AKPfTvWBQ61dl2PPHce1YVQ+QlwFDguOOzx4UGcE6p9PboD01PNTS7 f48ZHg== X-Received: by 2002:a05:600c:8508:b0:440:59eb:bfc with SMTP id 5b1f17b1804b1-442f752f78fmr2058545e9.23.1747223476856; Wed, 14 May 2025 04:51:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGK+tkNrWQ23VX/0Xt5GPJfFb5LwXcWoqKhbKXuZjFXfBp+A0FCydWm7Aatlek+OjfqTn/zTQ== X-Received: by 2002:a05:600c:8508:b0:440:59eb:bfc with SMTP id 5b1f17b1804b1-442f752f78fmr2058345e9.23.1747223476510; Wed, 14 May 2025 04:51:16 -0700 (PDT) Date: Wed, 14 May 2025 07:51:14 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki Subject: [PULL 23/27] virtio: Move virtio_reset() Message-ID: <77a9408fc774ad99dcd16ea08f31b96b590fbf99.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223930800116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki Move virtio_reset() to a later part of the file to remove the forward declaration of virtio_set_features_nocheck() and to prepare the situation that we need more operations to perform during reset. Signed-off-by: Akihiko Odaki Message-Id: <20250421-reset-v2-2-e4c1ead88ea1@daynix.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/virtio/virtio.c | 88 ++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 3300f4afb0..2e98cecf64 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2320,51 +2320,6 @@ void virtio_queue_enable(VirtIODevice *vdev, uint32_= t queue_index) } } =20 -static int virtio_set_features_nocheck(VirtIODevice *vdev, uint64_t val); - -void virtio_reset(void *opaque) -{ - VirtIODevice *vdev =3D opaque; - VirtioDeviceClass *k =3D VIRTIO_DEVICE_GET_CLASS(vdev); - int i; - - virtio_set_status(vdev, 0); - if (current_cpu) { - /* Guest initiated reset */ - vdev->device_endian =3D virtio_current_cpu_endian(); - } else { - /* System reset */ - vdev->device_endian =3D virtio_default_endian(); - } - - if (k->get_vhost) { - struct vhost_dev *hdev =3D k->get_vhost(vdev); - /* Only reset when vhost back-end is connected */ - if (hdev && hdev->vhost_ops) { - vhost_reset_device(hdev); - } - } - - if (k->reset) { - k->reset(vdev); - } - - vdev->start_on_kick =3D false; - vdev->started =3D false; - vdev->broken =3D false; - virtio_set_features_nocheck(vdev, 0); - vdev->queue_sel =3D 0; - vdev->status =3D 0; - vdev->disabled =3D false; - qatomic_set(&vdev->isr, 0); - vdev->config_vector =3D VIRTIO_NO_VECTOR; - virtio_notify_vector(vdev, vdev->config_vector); - - for(i =3D 0; i < VIRTIO_QUEUE_MAX; i++) { - __virtio_queue_reset(vdev, i); - } -} - void virtio_queue_set_addr(VirtIODevice *vdev, int n, hwaddr addr) { if (!vdev->vq[n].vring.num) { @@ -3175,6 +3130,49 @@ int virtio_set_features(VirtIODevice *vdev, uint64_t= val) return ret; } =20 +void virtio_reset(void *opaque) +{ + VirtIODevice *vdev =3D opaque; + VirtioDeviceClass *k =3D VIRTIO_DEVICE_GET_CLASS(vdev); + int i; + + virtio_set_status(vdev, 0); + if (current_cpu) { + /* Guest initiated reset */ + vdev->device_endian =3D virtio_current_cpu_endian(); + } else { + /* System reset */ + vdev->device_endian =3D virtio_default_endian(); + } + + if (k->get_vhost) { + struct vhost_dev *hdev =3D k->get_vhost(vdev); + /* Only reset when vhost back-end is connected */ + if (hdev && hdev->vhost_ops) { + vhost_reset_device(hdev); + } + } + + if (k->reset) { + k->reset(vdev); + } + + vdev->start_on_kick =3D false; + vdev->started =3D false; + vdev->broken =3D false; + virtio_set_features_nocheck(vdev, 0); + vdev->queue_sel =3D 0; + vdev->status =3D 0; + vdev->disabled =3D false; + qatomic_set(&vdev->isr, 0); + vdev->config_vector =3D VIRTIO_NO_VECTOR; + virtio_notify_vector(vdev, vdev->config_vector); + + for (i =3D 0; i < VIRTIO_QUEUE_MAX; i++) { + __virtio_queue_reset(vdev, i); + } +} + static void virtio_device_check_notification_compatibility(VirtIODevice *v= dev, Error **errp) { --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223725; cv=none; d=zohomail.com; s=zohoarc; b=KQaxXU1VAXR4C1zoZZpvntnb96Kvq72lRUuqMWaMfF2IFPc+Oj5dqe+gRSwGS6ELjp31gEtFlBsUk34t1DgfBRdAEvPozVDWoc3IygL2zIiLMISKi4zrW6x5PKzgO1iJViv2crQOQg67308WastAvQHTAuA/S/sE0OISzDYFUHM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223725; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6kql+B2DpLK0zsY0c4B4L4VYmubyDfVRDOa+cEX4Mpg=; b=fXLwNv6RnJAAQZiGt7TokSwCtDJuBzCHWBps7Aeg2XVfstBHGl9Zn/awp7+y/BvcyVxn76df+ZqeS4mfVdDH3EJDm8wkWi3/iasfef1HpKGzglIPXYA21z9NGO5k4crkokT0FF58AZ3w7IJkWzMVsyzTpLGJCrHS3hU1+5GrmkM= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223725559572.7215171176803; Wed, 14 May 2025 04:55:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAfU-0008CW-Ha; Wed, 14 May 2025 07:53:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe2-0006dY-Dc for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdx-0006PC-Bn for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:29 -0400 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-563-ZHT2iRFRP9CcF45g_grSIg-1; Wed, 14 May 2025 07:51:22 -0400 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-442dc6f0138so20151485e9.0 for ; Wed, 14 May 2025 04:51:22 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f3368fbasm27531985e9.2.2025.05.14.04.51.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223483; 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: in-reply-to:in-reply-to:references:references; bh=6kql+B2DpLK0zsY0c4B4L4VYmubyDfVRDOa+cEX4Mpg=; b=PCXlMyVJFYR9m2Cvha5Gr6XnWn6G0wQ3kzQU3+SG2Wtm5PqYHEm5bb2A2TAsPdoY84UCbB IXQcjTJRJx0E+peHyHrsA8joaahgjXzbztVjcYUx5s4VAPhf2JxgFz0txPzBZzPFMrwgII e1npvG+fLRAy/Y3LmkNJS6pInHy9drA= X-MC-Unique: ZHT2iRFRP9CcF45g_grSIg-1 X-Mimecast-MFC-AGG-ID: ZHT2iRFRP9CcF45g_grSIg_1747223481 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223480; x=1747828280; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6kql+B2DpLK0zsY0c4B4L4VYmubyDfVRDOa+cEX4Mpg=; b=S4MDc6kYMTZKrcsts5fHqDRLj/bIDLncrKEWpry+FegvKScfLqnyyznODRt2U7n2cj kog1gVh3tst7Yo6JioCEBtv2khYjfsboHRaFRLabMbW5FvcGQC+Ev/hvDN1vi2A1//Jn q3WB1r9/HWaZm44HqIOONdk8INnFNyb8+LmVqGTHly1LNfCN2Xkm+22RwjkmhhXOHA6P lyympB6A4yRIAUAqNDolLTkYQ1bLS9DsN0wtZ5M8DIkW4bnkKdf4UJIzVwnWKoUoMWLj LZcFzElD9AHtjoKX+DCH+S0/Dd6VKBlsORIRBejtuTg1zHlgzx2CrrCRNUZB9Y9ykpsO fmYg== X-Gm-Message-State: AOJu0Yx02s7g8m2hLCcol+MiUNt2c59q2MchpQSInAhPkESeDfJiaLye yW1aT0dqdspp3eu219fL7NL51s2m1gk/tZqH2hlOiQL+JA7zFp/5uxD3pyiLnfObkEGOYEuohgv L2Yhgv4ulHlkCU+kz977D2krIcppNO/UfF4+KFtq04+kdJ6DKKOxmu2bMFNgPP92oWLvr4LRj/G v48ZQc8NoSERzsE1yWVwI01XIVnqcu/w== X-Gm-Gg: ASbGnctJ72o10/9Hu9CqF1WlRM1EQSvtFfp3J64itPNUsjXmbjRYi7MxKUzRpwXoLDc lHsISr4GVvO944QkI+BMngzuID6T+0lQtTIuvPsTtQGU4sx6QR1aFsEEeOZn/7Zc1MNvrz25zs7 lc6c9B0Z63AkDtAOQT1EqlFf4mpSOSEyLmB6tJZUHAsdOPvlJF7NztwD7Pa6Y/z2x7f7255FqQx eybnlChVyNweUw6A5TisBp4wr5IY23tZjViBszEDAmPqTpHQvMEoQu8AgLUR18EYdWf5EGfKcVC +TdjsQ== X-Received: by 2002:a05:600c:5118:b0:43d:526:e0ce with SMTP id 5b1f17b1804b1-442f2169a50mr19098635e9.21.1747223480499; Wed, 14 May 2025 04:51:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE4KxtgrkwQ9kUmO92JnBaAM1wAVRJ5nIOI8b/rA26277TF2Lg4ZNlftbmMxa9MNl0OPu+dRQ== X-Received: by 2002:a05:600c:5118:b0:43d:526:e0ce with SMTP id 5b1f17b1804b1-442f2169a50mr19098285e9.21.1747223480079; Wed, 14 May 2025 04:51:20 -0700 (PDT) Date: Wed, 14 May 2025 07:51:16 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , CLEMENT MATHIEU--DRIF , Zhenzhong Duan , Jason Wang , Yi Liu , Marcel Apfelbaum , Paolo Bonzini , Richard Henderson , Eduardo Habkost Subject: [PULL 24/27] intel_iommu: Use BQL_LOCK_GUARD to manage cleanup automatically Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223728299019000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: CLEMENT MATHIEU--DRIF vtd_switch_address_space needs to take the BQL if not already held. Use BQL_LOCK_GUARD to make the iommu implementation more consistent. Signed-off-by: Clement Mathieu--Drif Message-Id: <20250430124750.240412-2-clement.mathieu--drif@eviden.com> Reviewed-by: Zhenzhong Duan Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/i386/intel_iommu.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 5f8ed1243d..b925e65b02 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -1728,8 +1728,6 @@ static bool vtd_as_pt_enabled(VTDAddressSpace *as) static bool vtd_switch_address_space(VTDAddressSpace *as) { bool use_iommu, pt; - /* Whether we need to take the BQL on our own */ - bool take_bql =3D !bql_locked(); =20 assert(as); =20 @@ -1746,9 +1744,7 @@ static bool vtd_switch_address_space(VTDAddressSpace = *as) * from vtd_pt_enable_fast_path(). However the memory APIs need * it. We'd better make sure we have had it already, or, take it. */ - if (take_bql) { - bql_lock(); - } + BQL_LOCK_GUARD(); =20 /* Turn off first then on the other */ if (use_iommu) { @@ -1801,10 +1797,6 @@ static bool vtd_switch_address_space(VTDAddressSpace= *as) memory_region_set_enabled(&as->iommu_ir_fault, false); } =20 - if (take_bql) { - bql_unlock(); - } - return use_iommu; } =20 --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223630; cv=none; d=zohomail.com; s=zohoarc; b=GOg9TCQDSPXU7VtWoT3ATKpmgnb9eARD0EVhfNa3hZRecX4ozpFLXiWHxfyM85T7buIoo1P4jL5SWV+UyKD2DCvzbL8c603rG2qi7wJGbztVC5YbQqxyxk201y31avr/EDchUsQjCKtdqroBqFE3hPloSmcgXn6VtJfID2756lI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223630; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0awWa+sd4n9SFgUr0omak6uEhyaTwUgBMVocontbFgE=; b=fEQ33RUcrQA81G9v30W0fCS06Bo9fU+vpwrdp/nRqv1AVIw42caG4jkWPh/anSrzj2L7WHsFZDaprdq6QL2BEjvM73iEs48o9oN/CNR/pJEBxtCd3Gir8CWIfmWFZ2QMtw4TJ+1Dwooee3TRbYMIujwQwtdsiuY6zFMGkNE1PpM= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223630915831.9919010568975; Wed, 14 May 2025 04:53:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeJ-000711-Ig; Wed, 14 May 2025 07:51:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe6-0006hJ-19 for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAdz-0006Q1-0d for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:32 -0400 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-227-lEYO9fiGP4C3W25H38jnSw-1; Wed, 14 May 2025 07:51:24 -0400 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43d5ca7c86aso32991985e9.0 for ; Wed, 14 May 2025 04:51:24 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f482f1d6sm22734075e9.14.2025.05.14.04.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223485; 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: in-reply-to:in-reply-to:references:references; bh=0awWa+sd4n9SFgUr0omak6uEhyaTwUgBMVocontbFgE=; b=D+azzMqFS0x1gw8j2Ku0eD1jyeQce25LzInmWSy2ZLT83LbHYe91T2F2wQYU4ctSst8IOi DsAAEyZmcDQWlF6Q5fxciZBmOvh/81+Dp8u5AtzPq0QQK/pfwLLFvN9sN8UPJWu7FnbNuK DK3H0cOdR2sgLP76RLSi/3gE0PKTuc8= X-MC-Unique: lEYO9fiGP4C3W25H38jnSw-1 X-Mimecast-MFC-AGG-ID: lEYO9fiGP4C3W25H38jnSw_1747223483 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223483; x=1747828283; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=0awWa+sd4n9SFgUr0omak6uEhyaTwUgBMVocontbFgE=; b=gPi5PppwNRNZu0YIHcM6IHqjOlgMIG+CRlZSAn13+4gg1RxLBCHJ+VIY6hhejUZgaB JMvzOWiMDBgmVZn8fkLUwv/kHlW+H+20x2RK6xRmxpClxMrnkf5YJ6bBlPbSBH3Lfmno tCmAVH8qkX/Mk0c1VcPNI1xpwsYmEhmhynZJefsR2Ii02YQukF7JZCHiUk5+Qe58MlfU zVuP89P6CZ8xwu7wKBjK5QbbElQEVkJZf0qtAOYATYSKGdsjR3T0FFKDIsEuHA7w18qR yOBuJzO11DT7WHSCdSWe442+cpLfgtX14fIB8mjGnvICKbjIfhOVy2CS1VDdF/o+mfy+ VNfQ== X-Gm-Message-State: AOJu0YwAipvXYbgdsXgmvH6+SD92QJJBi+e5ZUST/8Bj1bRm26zWE9Fs UqQAT9VCDlsIGI//PGygROVITOUphqjcGL8ULJR5RPyNER1XmLTYkmfe8+dd+jPBkFMpw1pV3O6 w9g80hN1P16EQms8pvsqGQCZv27rpY2JMIo7meafMRBl1GREOWtq3dYJkQaUgkX/dNgMiMbvm43 Rm2Ay9k57ocJcvQQa0JZ8PYHhuiTjumg== X-Gm-Gg: ASbGncv0PwzjMZt5Wfvg9xn/aQHPQVOEUKEXbk/4tgiVFX++BWRjiUmVFXvQKvE8sDT I/BNIHq640AM80EQ/zFbNiuomU7MhbUX9EkEF/acckIlxylmvarvFnzVF6R73XlIfX2QxXnb2cX nM7WlzYYjk96V55AM4jBEosSoAo+Lo5G0YbxGNW3fUaaSZwMah5/wLjI04BrjAXPyxk97EGg74X x6Ew+MktmMwSGLtBBZfDW9sq0pcm1NQUCU0ejIJ/P71lbYNDVfPYyQoM/y5ZnMJEgAKbUrXpXAL W0RK/w== X-Received: by 2002:a05:600c:609b:b0:43c:fbba:41ba with SMTP id 5b1f17b1804b1-442f21798ddmr22865015e9.28.1747223482987; Wed, 14 May 2025 04:51:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEMFe0AufQ68xuHNIUOE8flzQfg1eQBJDbiPllCR7h8gdgK4PeI9WTiRSLyXgXn2KYs66oLXQ== X-Received: by 2002:a05:600c:609b:b0:43c:fbba:41ba with SMTP id 5b1f17b1804b1-442f21798ddmr22864645e9.28.1747223482535; Wed, 14 May 2025 04:51:22 -0700 (PDT) Date: Wed, 14 May 2025 07:51:20 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , CLEMENT MATHIEU--DRIF , Zhenzhong Duan , Jason Wang , Yi Liu , Marcel Apfelbaum , Paolo Bonzini , Richard Henderson , Eduardo Habkost Subject: [PULL 25/27] intel_iommu: Take locks when looking for and creating address spaces Message-ID: <1b85dff5f0be30ddbcb7edbd3c084c9c5ee351ca.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: 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 @redhat.com) X-ZM-MESSAGEID: 1747223632271116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: CLEMENT MATHIEU--DRIF vtd_find_add_as can be called by multiple threads which leads to a race condition. Taking the IOMMU lock ensures we avoid such a race. Moreover we also need to take the bql to avoid an assert to fail in memory_region_add_subregion_overlap when actually allocating a new address space. Signed-off-by: Clement Mathieu--Drif Message-Id: <20250430124750.240412-3-clement.mathieu--drif@eviden.com> Reviewed-by: Zhenzhong Duan Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/i386/intel_iommu.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index b925e65b02..69d72ad35c 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -4205,9 +4205,30 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s,= PCIBus *bus, VTDAddressSpace *vtd_dev_as; char name[128]; =20 + vtd_iommu_lock(s); vtd_dev_as =3D g_hash_table_lookup(s->vtd_address_spaces, &key); + vtd_iommu_unlock(s); + if (!vtd_dev_as) { - struct vtd_as_key *new_key =3D g_malloc(sizeof(*new_key)); + struct vtd_as_key *new_key; + /* Slow path */ + + /* + * memory_region_add_subregion_overlap requires the bql, + * make sure we own it. + */ + BQL_LOCK_GUARD(); + vtd_iommu_lock(s); + + /* Check again as we released the lock for a moment */ + vtd_dev_as =3D g_hash_table_lookup(s->vtd_address_spaces, &key); + if (vtd_dev_as) { + vtd_iommu_unlock(s); + return vtd_dev_as; + } + + /* Still nothing, allocate a new address space */ + new_key =3D g_malloc(sizeof(*new_key)); =20 new_key->bus =3D bus; new_key->devfn =3D devfn; @@ -4298,6 +4319,8 @@ VTDAddressSpace *vtd_find_add_as(IntelIOMMUState *s, = PCIBus *bus, vtd_switch_address_space(vtd_dev_as); =20 g_hash_table_insert(s->vtd_address_spaces, new_key, vtd_dev_as); + + vtd_iommu_unlock(s); } return vtd_dev_as; } --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223968; cv=none; d=zohomail.com; s=zohoarc; b=jRzuyth/9UCd0sbN/xYQLUk3RdLQkrhGjHYPwyFEeoDfuHLTC0cN8wa5z9/iU2Q5dI52ZCdjJirqQHVaVkSrSE92R/eHpxdzvcd+D/IyZwcEZ6Uq62j6DZIAEfM8hvtEkjHrslgdF1FRg2U+dFB8c4awJP+1c5BQ2+FKBU0huQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223968; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kC7ms8CkFAeJfPlGtEIrneI+byr9crqmZ1MqZFtR2F4=; b=U7UpHRXEHbt4Xpc/8WpEy1gKXpyU0fOno9DMaUtWn4e3qpHOVxvcUQmh5/4xC6ZHKPwLazeyJtvy+9r1RoSTLyFhmVhVj0tsOl9jUjnhZCF9yZGJVg1GIbQ5w61xe5OKdhbZwwjSW0mI1dj8IqrfFtn9xgfhBbcfH4asDKRPHto= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223968187754.514559894449; Wed, 14 May 2025 04:59:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeO-0007J9-Bz; Wed, 14 May 2025 07:51:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe8-0006iL-3b for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:42 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe1-0006RC-As for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:35 -0400 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-571-gAhHnZ7nNuqxVdAM3NZ4sA-1; Wed, 14 May 2025 07:51:27 -0400 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-3a20257c758so2483131f8f.0 for ; Wed, 14 May 2025 04:51:26 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a1f58ebd75sm19795850f8f.34.2025.05.14.04.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223488; 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=kC7ms8CkFAeJfPlGtEIrneI+byr9crqmZ1MqZFtR2F4=; b=HeDgDoCCDDF9hy4GT12DiLXMlNP6WuJW81IhK4XGp94neRMdXiQNToXchsat4zxcfl1PGd HbxQPp3ntde/zfCmMznMb//zQdIwkXgXNl7hOGYh21Iz8TsSK+TQg1rnVefVIKFNT4LRoA 2kKtLSzkl9IeYBd+5i725lLzVXfnEVw= X-MC-Unique: gAhHnZ7nNuqxVdAM3NZ4sA-1 X-Mimecast-MFC-AGG-ID: gAhHnZ7nNuqxVdAM3NZ4sA_1747223486 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223485; x=1747828285; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kC7ms8CkFAeJfPlGtEIrneI+byr9crqmZ1MqZFtR2F4=; b=oPR2oTIPLpk807yI9tS3KTgp6/E3lC8ltVVQ8wDbNfllXtLXnIqqy1cFojBddL6rcE ZmL6X2r893JDZSIwgeB1F95/mTXY4JCCJgjrwdz9M7EXXj/W/zD/5cSofD9HKkMFpZTK hyLWLHPcWbvMOkMinQRBj1FBkZ/askfCUSIfpbb8ghQJQs0/ByekAwYVzkrWbka9+/qu cmsTemkVXo6hmQgQpyyvjbupDzyh8Vrb8ASRhDa+994zFEByymj0hZYqheJHJPu0Kx1Y mFwRxRF1Ju0rAUC36zGuwEhkxllwtUPoQGeJOU2GxSn6vW9Yk4D11zN3Kd6l0L6ZCuTI aajw== X-Gm-Message-State: AOJu0YwqBcPhwNy/D8nPyRLhPXtzZnx/n4Xs4gpjlArMPq4XAH9+d5zk cFKglKFciRN58sb1ttdo3cdvFbN3VR01biG2PD3OXjdM537+mh69dru5Fu+v0srSgykJfOXmRWq ZHibcfouKmRV7nksPheVEE8O2srUu9DB7bw9DIGLt5MVWmqCj3VbbsKSsjHimWagMjEillB2p4C q7CgxpNTJhcb3TWLPCtu8GrmzsgCIh7Q== X-Gm-Gg: ASbGncsMI+neKWhYdyQZaNyoexcXRSaYIMzge8BuACeu2tUrZOVZMvmBFEFmpCTOB0O EcfOUg3m5juLpN06vDK229iK1krM98jrKLASTmEz/ars1iJVEfB8mqa3ddPbWifXmSoW0kOLZVw a/O6xkloBs4PYKx5sF+amKJkKg7wSeq4BWBQDHF1HrWjslpPUys7XGGw3d7MdLahUqa4HPmI0+h +hoWuNAzLYEvbrB9JitQUBkIaT1xPPlx9U1XNe3gjCulwbPO3NXqIU/0eFtwQ+LX7/Zx4YuuTHw Pexilw== X-Received: by 2002:a05:6000:2a6:b0:3a0:7b07:157 with SMTP id ffacd0b85a97d-3a34969a0cfmr2899126f8f.9.1747223485535; Wed, 14 May 2025 04:51:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHFyzPRjxLoKwZ+L+YNoJ0/tRzNUQnXUV6Y6M0PnORINRPFx10xSFhkLLvtzNT5K0A+mKaL3Q== X-Received: by 2002:a05:6000:2a6:b0:3a0:7b07:157 with SMTP id ffacd0b85a97d-3a34969a0cfmr2899087f8f.9.1747223485047; Wed, 14 May 2025 04:51:25 -0700 (PDT) Date: Wed, 14 May 2025 07:51:22 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Suravee Suthikulpanit , Daniel P =?utf-8?B?LiBCZXJyYW5nw6k=?= , Igor Mammedov , Ani Sinha , Paolo Bonzini , Richard Henderson , Eduardo Habkost , Marcel Apfelbaum Subject: [PULL 26/27] hw/i386/amd_iommu: Isolate AMDVI-PCI from amd-iommu device to allow full control over the PCI device creation Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223970522019000 From: Suravee Suthikulpanit Current amd-iommu model internally creates an AMDVI-PCI device. Here is a snippet from info qtree: bus: main-system-bus type System dev: amd-iommu, id "" xtsup =3D false pci-id =3D "" intremap =3D "on" device-iotlb =3D false pt =3D true ... dev: q35-pcihost, id "" MCFG =3D -1 (0xffffffffffffffff) pci-hole64-size =3D 34359738368 (32 GiB) below-4g-mem-size =3D 134217728 (128 MiB) above-4g-mem-size =3D 0 (0 B) smm-ranges =3D true x-pci-hole64-fix =3D true x-config-reg-migration-enabled =3D true bypass-iommu =3D false bus: pcie.0 type PCIE dev: AMDVI-PCI, id "" addr =3D 01.0 romfile =3D "" romsize =3D 4294967295 (0xffffffff) rombar =3D -1 (0xffffffffffffffff) multifunction =3D false x-pcie-lnksta-dllla =3D true x-pcie-extcap-init =3D true failover_pair_id =3D "" acpi-index =3D 0 (0x0) x-pcie-err-unc-mask =3D true x-pcie-ari-nextfn-1 =3D false x-max-bounce-buffer-size =3D 4096 (4 KiB) x-pcie-ext-tag =3D true busnr =3D 0 (0x0) class Class 0806, addr 00:01.0, pci id 1022:0000 (sub 1af4:1100) ... This prohibits users from specifying the PCI topology for the amd-iommu dev= ice, which becomes a problem when trying to support VM migration since it does n= ot guarantee the same enumeration of AMD IOMMU device. Therefore, allow the 'AMDVI-PCI' device to optionally be pre-created and associated with a 'amd-iommu' device via a new 'pci-id' parameter on the latter. For example: -device AMDVI-PCI,id=3Diommupci0,bus=3Dpcie.0,addr=3D0x05 \ -device amd-iommu,intremap=3Don,pt=3Don,xtsup=3Don,pci-id=3Diommupci0 \ For backward-compatibility, internally create the AMDVI-PCI device if not specified on the CLI. Co-developed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Suravee Suthikulpanit Message-Id: <20250504170405.12623-2-suravee.suthikulpanit@amd.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/i386/amd_iommu.h | 3 ++- hw/i386/acpi-build.c | 8 +++---- hw/i386/amd_iommu.c | 53 ++++++++++++++++++++++++++------------------ 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 28125130c6..7a28181d9c 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -315,7 +315,8 @@ struct AMDVIPCIState { =20 struct AMDVIState { X86IOMMUState iommu; /* IOMMU bus device */ - AMDVIPCIState pci; /* IOMMU PCI device */ + AMDVIPCIState *pci; /* IOMMU PCI device */ + char *pci_id; /* ID of AMDVI-PCI device, if user created= */ =20 uint32_t version; =20 diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index f40ad062f9..61851cc840 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2333,10 +2333,10 @@ build_amd_iommu(GArray *table_data, BIOSLinker *lin= ker, const char *oem_id, build_append_int_noprefix(table_data, ivhd_blob->len + 24, 2); /* DeviceID */ build_append_int_noprefix(table_data, - object_property_get_int(OBJECT(&s->pci), "ad= dr", + object_property_get_int(OBJECT(s->pci), "add= r", &error_abort), 2); /* Capability offset */ - build_append_int_noprefix(table_data, s->pci.capab_offset, 2); + build_append_int_noprefix(table_data, s->pci->capab_offset, 2); /* IOMMU base address */ build_append_int_noprefix(table_data, s->mr_mmio.addr, 8); /* PCI Segment Group */ @@ -2368,10 +2368,10 @@ build_amd_iommu(GArray *table_data, BIOSLinker *lin= ker, const char *oem_id, build_append_int_noprefix(table_data, ivhd_blob->len + 40, 2); /* DeviceID */ build_append_int_noprefix(table_data, - object_property_get_int(OBJECT(&s->pci), "ad= dr", + object_property_get_int(OBJECT(s->pci), "add= r", &error_abort), 2); /* Capability offset */ - build_append_int_noprefix(table_data, s->pci.capab_offset, 2); + build_append_int_noprefix(table_data, s->pci->capab_offset, 2); /* IOMMU base address */ build_append_int_noprefix(table_data, s->mr_mmio.addr, 8); /* PCI Segment Group */ diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 2cf7e24a21..f5466fdc98 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -167,11 +167,11 @@ static void amdvi_generate_msi_interrupt(AMDVIState *= s) { MSIMessage msg =3D {}; MemTxAttrs attrs =3D { - .requester_id =3D pci_requester_id(&s->pci.dev) + .requester_id =3D pci_requester_id(&s->pci->dev) }; =20 - if (msi_enabled(&s->pci.dev)) { - msg =3D msi_get_message(&s->pci.dev, 0); + if (msi_enabled(&s->pci->dev)) { + msg =3D msi_get_message(&s->pci->dev, 0); address_space_stl_le(&address_space_memory, msg.address, msg.data, attrs, NULL); } @@ -239,7 +239,7 @@ static void amdvi_page_fault(AMDVIState *s, uint16_t de= vid, info |=3D AMDVI_EVENT_IOPF_I | AMDVI_EVENT_IOPF; amdvi_encode_event(evt, devid, addr, info); amdvi_log_event(s, evt); - pci_word_test_and_set_mask(s->pci.dev.config + PCI_STATUS, + pci_word_test_and_set_mask(s->pci->dev.config + PCI_STATUS, PCI_STATUS_SIG_TARGET_ABORT); } /* @@ -256,7 +256,7 @@ static void amdvi_log_devtab_error(AMDVIState *s, uint1= 6_t devid, =20 amdvi_encode_event(evt, devid, devtab, info); amdvi_log_event(s, evt); - pci_word_test_and_set_mask(s->pci.dev.config + PCI_STATUS, + pci_word_test_and_set_mask(s->pci->dev.config + PCI_STATUS, PCI_STATUS_SIG_TARGET_ABORT); } /* log an event trying to access command buffer @@ -269,7 +269,7 @@ static void amdvi_log_command_error(AMDVIState *s, hwad= dr addr) =20 amdvi_encode_event(evt, 0, addr, info); amdvi_log_event(s, evt); - pci_word_test_and_set_mask(s->pci.dev.config + PCI_STATUS, + pci_word_test_and_set_mask(s->pci->dev.config + PCI_STATUS, PCI_STATUS_SIG_TARGET_ABORT); } /* log an illegal command event @@ -310,7 +310,7 @@ static void amdvi_log_pagetab_error(AMDVIState *s, uint= 16_t devid, info |=3D AMDVI_EVENT_PAGE_TAB_HW_ERROR; amdvi_encode_event(evt, devid, addr, info); amdvi_log_event(s, evt); - pci_word_test_and_set_mask(s->pci.dev.config + PCI_STATUS, + pci_word_test_and_set_mask(s->pci->dev.config + PCI_STATUS, PCI_STATUS_SIG_TARGET_ABORT); } =20 @@ -1607,7 +1607,7 @@ static void amdvi_sysbus_reset(DeviceState *dev) { AMDVIState *s =3D AMD_IOMMU_DEVICE(dev); =20 - msi_reset(&s->pci.dev); + msi_reset(&s->pci->dev); amdvi_init(s); } =20 @@ -1619,14 +1619,32 @@ static void amdvi_sysbus_realize(DeviceState *dev, = Error **errp) X86MachineState *x86ms =3D X86_MACHINE(ms); PCIBus *bus =3D pcms->pcibus; =20 + if (s->pci_id) { + PCIDevice *pdev =3D NULL; + int ret =3D pci_qdev_find_device(s->pci_id, &pdev); + + if (ret) { + error_report("Cannot find PCI device '%s'", s->pci_id); + return; + } + + if (!object_dynamic_cast(OBJECT(pdev), TYPE_AMD_IOMMU_PCI)) { + error_report("Device '%s' must be an AMDVI-PCI device type", s= ->pci_id); + return; + } + + s->pci =3D AMD_IOMMU_PCI(pdev); + } else { + s->pci =3D AMD_IOMMU_PCI(object_new(TYPE_AMD_IOMMU_PCI)); + /* This device should take care of IOMMU PCI properties */ + if (!qdev_realize(DEVICE(s->pci), &bus->qbus, errp)) { + return; + } + } + s->iotlb =3D g_hash_table_new_full(amdvi_uint64_hash, amdvi_uint64_equal, g_free, g_free); =20 - /* This device should take care of IOMMU PCI properties */ - if (!qdev_realize(DEVICE(&s->pci), &bus->qbus, errp)) { - return; - } - /* Pseudo address space under root PCI bus. */ x86ms->ioapic_as =3D amdvi_host_dma_iommu(bus, s, AMDVI_IOAPIC_SB_DEVI= D); =20 @@ -1663,6 +1681,7 @@ static void amdvi_sysbus_realize(DeviceState *dev, Er= ror **errp) =20 static const Property amdvi_properties[] =3D { DEFINE_PROP_BOOL("xtsup", AMDVIState, xtsup, false), + DEFINE_PROP_STRING("pci-id", AMDVIState, pci_id), }; =20 static const VMStateDescription vmstate_amdvi_sysbus =3D { @@ -1670,13 +1689,6 @@ static const VMStateDescription vmstate_amdvi_sysbus= =3D { .unmigratable =3D 1 }; =20 -static void amdvi_sysbus_instance_init(Object *klass) -{ - AMDVIState *s =3D AMD_IOMMU_DEVICE(klass); - - object_initialize(&s->pci, sizeof(s->pci), TYPE_AMD_IOMMU_PCI); -} - static void amdvi_sysbus_class_init(ObjectClass *klass, const void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -1696,7 +1708,6 @@ static const TypeInfo amdvi_sysbus =3D { .name =3D TYPE_AMD_IOMMU_DEVICE, .parent =3D TYPE_X86_IOMMU_DEVICE, .instance_size =3D sizeof(AMDVIState), - .instance_init =3D amdvi_sysbus_instance_init, .class_init =3D amdvi_sysbus_class_init }; =20 --=20 MST From nobody Sat Nov 15 20:47:18 2025 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=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747223603; cv=none; d=zohomail.com; s=zohoarc; b=XBfGYBKxqgOrR4XTUfgkDDXpbyYiQHCKAmE/CCyF+fN2k+ZmZwMtwNIc+PEc+TGujBFb+vTWApyhdgzZWI6Rh1BfK3Mpyc8JBWsHexHn7H9BkQabtlwMTTdhnJ7jQxgpaSmomWKbRu7ytHIQGf+4oHwpvBuIpn1/ZhywwPdM57s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747223603; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CPjE//v0FbHndDkIbo/kN/ViVZAa/5rEK/Vw1YXqcLc=; b=Eilwwh3CfhpTy27+i1XfYwA+VLe4Zk8v4iaHYUkPQGAhLbYoCn0xS/IpVNlZOwdyinZXGRK2CUtMebIQ7ZlKc6OZ+PZo+soI27ZmyPCwm5CrFq/5VcqfBiPQBzTWfNdKVyKYIGpH15oUidMUoepKI10FRt4/OI3tmvdlye7Qxa8= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747223602947793.7852989231919; Wed, 14 May 2025 04:53:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uFAeS-0007Pc-DG; Wed, 14 May 2025 07:51:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAeF-0006p5-8T for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:44 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uFAe5-0006Rv-Sm for qemu-devel@nongnu.org; Wed, 14 May 2025 07:51:38 -0400 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-669-PLuNCbasM-ihZbcX03yThQ-1; Wed, 14 May 2025 07:51:29 -0400 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-43eea5a5d80so38032635e9.1 for ; Wed, 14 May 2025 04:51:29 -0700 (PDT) Received: from redhat.com ([2a0d:6fc0:1517:1000:ea83:8e5f:3302:3575]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442f3951a8csm27659315e9.23.2025.05.14.04.51.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 04:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747223490; 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: in-reply-to:in-reply-to:references:references; bh=CPjE//v0FbHndDkIbo/kN/ViVZAa/5rEK/Vw1YXqcLc=; b=AY6PtHZZeMb37Bpfti8FDXmh/NXyQjX9/3psTrqROu+8+JmwZtkFCfxBlxkJVzAZt/5oR/ 2BJPY+SDfGghasrI1AGY+/Pwp7fpOj2O7e+/d6r2kXkJ9O8d++vra2/uwWKXUgvt3F1mqx lg48kiSvpFXCK7hdKt8vaHSIckhTsHM= X-MC-Unique: PLuNCbasM-ihZbcX03yThQ-1 X-Mimecast-MFC-AGG-ID: PLuNCbasM-ihZbcX03yThQ_1747223488 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747223488; x=1747828288; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=CPjE//v0FbHndDkIbo/kN/ViVZAa/5rEK/Vw1YXqcLc=; b=B3lZt9W9U7i+sJ9+fwW1TnF1qRFYFQTM03SGw79IO+lQmJbGsQAxfqy/e6TW7t60qE s9Dc+OOFSBpTjxQmZ2R+DdPWn2g5ksJCBpFL30Xgk9yBVwQgFZzh/3lKptThZQrBT1wB BuYR7E97OFk321rDrvnN2ReVguVennSPY+ci9nYfOr1fbdgekS/ezIVwyfvsy+m/YfUh +Uv/BI4PYM64CqoMJr0n0mziYLEkhh+ldmHWiyX3gZvIxf1mMdzhk627rAv4bz22kFSa JfoDJEnVkxeFgaJ3JnDr+rjsjIIDu/GC4IIFVB9FHdxgLSm4yVzZNrRo8XtGnX2OvUBU dsqg== X-Gm-Message-State: AOJu0YxbuIkzkJXh1BEv8FZpUXIWPEaq+dSlrrRGxabj//O35U1TqQDm 2aYa6bsUxUaYVEa9n5T8jmrPjKqpnWvn28pexiJh0KE6tK5y+CUA/y59o8NrnRAoWeJLeLg34k6 ugvsaE5dUO7ZaiJALcj6ng/sCASHyKfeghroBjZFuUHELbBlkjrNxA0rACXTGMPgwH6qMmvW3bJ pOgi1HkPo9yxqO7Uzsfr9CpGA4WliBNQ== X-Gm-Gg: ASbGncu3IpnZU6Nh+WBUKI/4EcXWvqkoDEQYtDBOpZqLPh0VM9F4M+naORxdteGiQhd l4gxukO+HIGgCR/dpubUxfLf0lRxHRQ2jYnHc6YQ9ZjuOD0cig/wA8taPa9kBgSOL4sSd34judl PHgpiWJP9Ugt89XGo48aIeflA8asc/GGZiL5XZFouapgZHv6l/leLJ1BBQd9yeY/3x6VAGckcNe m0u3atky8Nbr7HGjt1QRzdj6dQ+xZrAmQDf1Hg33yNrQRVEBJwtYtBZ6k4qm2ailZPadoXyVe58 y5kH3w== X-Received: by 2002:a05:600c:8505:b0:43d:45a:8fca with SMTP id 5b1f17b1804b1-442f216d56emr35291945e9.30.1747223487770; Wed, 14 May 2025 04:51:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFQKp3y7z+0XmconLflEqMvyMcNL5AHLdiz2BSm621czVY4VwhYK0zld+RQYlKIFZwYJnb0hw== X-Received: by 2002:a05:600c:8505:b0:43d:45a:8fca with SMTP id 5b1f17b1804b1-442f216d56emr35291535e9.30.1747223487342; Wed, 14 May 2025 04:51:27 -0700 (PDT) Date: Wed, 14 May 2025 07:51:25 -0400 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Suravee Suthikulpanit , Marcel Apfelbaum , Paolo Bonzini , Richard Henderson , Eduardo Habkost Subject: [PULL 27/27] hw/i386/amd_iommu: Allow migration when explicitly create the AMDVI-PCI device Message-ID: <28931c2e1591deb4bfaaf744fdc8813e96c230f1.1747223385.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.686, 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_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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: 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 @redhat.com) X-ZM-MESSAGEID: 1747223603992116600 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Suravee Suthikulpanit Add migration support for AMD IOMMU model by saving necessary AMDVIState parameters for MMIO registers, device table, command buffer, and event buffers. Also change devtab_len type from size_t to uint64_t to avoid 32-bit build issue. Signed-off-by: Suravee Suthikulpanit Message-Id: <20250504170405.12623-3-suravee.suthikulpanit@amd.com> Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin --- hw/i386/amd_iommu.h | 2 +- hw/i386/amd_iommu.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 7a28181d9c..5672bdef89 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -329,7 +329,7 @@ struct AMDVIState { bool excl_enabled; =20 hwaddr devtab; /* base address device table */ - size_t devtab_len; /* device table length */ + uint64_t devtab_len; /* device table length */ =20 hwaddr cmdbuf; /* command buffer base address */ uint64_t cmdbuf_len; /* command buffer length */ diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index f5466fdc98..0775c8f3bb 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -1611,8 +1611,55 @@ static void amdvi_sysbus_reset(DeviceState *dev) amdvi_init(s); } =20 +static const VMStateDescription vmstate_amdvi_sysbus_migratable =3D { + .name =3D "amd-iommu", + .version_id =3D 1, + .minimum_version_id =3D 1, + .priority =3D MIG_PRI_IOMMU, + .fields =3D (VMStateField[]) { + /* Updated in amdvi_handle_control_write() */ + VMSTATE_BOOL(enabled, AMDVIState), + VMSTATE_BOOL(ga_enabled, AMDVIState), + VMSTATE_BOOL(ats_enabled, AMDVIState), + VMSTATE_BOOL(cmdbuf_enabled, AMDVIState), + VMSTATE_BOOL(completion_wait_intr, AMDVIState), + VMSTATE_BOOL(evtlog_enabled, AMDVIState), + VMSTATE_BOOL(evtlog_intr, AMDVIState), + /* Updated in amdvi_handle_devtab_write() */ + VMSTATE_UINT64(devtab, AMDVIState), + VMSTATE_UINT64(devtab_len, AMDVIState), + /* Updated in amdvi_handle_cmdbase_write() */ + VMSTATE_UINT64(cmdbuf, AMDVIState), + VMSTATE_UINT64(cmdbuf_len, AMDVIState), + /* Updated in amdvi_handle_cmdhead_write() */ + VMSTATE_UINT32(cmdbuf_head, AMDVIState), + /* Updated in amdvi_handle_cmdtail_write() */ + VMSTATE_UINT32(cmdbuf_tail, AMDVIState), + /* Updated in amdvi_handle_evtbase_write() */ + VMSTATE_UINT64(evtlog, AMDVIState), + VMSTATE_UINT32(evtlog_len, AMDVIState), + /* Updated in amdvi_handle_evthead_write() */ + VMSTATE_UINT32(evtlog_head, AMDVIState), + /* Updated in amdvi_handle_evttail_write() */ + VMSTATE_UINT32(evtlog_tail, AMDVIState), + /* Updated in amdvi_handle_pprbase_write() */ + VMSTATE_UINT64(ppr_log, AMDVIState), + VMSTATE_UINT32(pprlog_len, AMDVIState), + /* Updated in amdvi_handle_pprhead_write() */ + VMSTATE_UINT32(pprlog_head, AMDVIState), + /* Updated in amdvi_handle_tailhead_write() */ + VMSTATE_UINT32(pprlog_tail, AMDVIState), + /* MMIO registers */ + VMSTATE_UINT8_ARRAY(mmior, AMDVIState, AMDVI_MMIO_SIZE), + VMSTATE_UINT8_ARRAY(romask, AMDVIState, AMDVI_MMIO_SIZE), + VMSTATE_UINT8_ARRAY(w1cmask, AMDVIState, AMDVI_MMIO_SIZE), + VMSTATE_END_OF_LIST() + } +}; + static void amdvi_sysbus_realize(DeviceState *dev, Error **errp) { + DeviceClass *dc =3D (DeviceClass *) object_get_class(OBJECT(dev)); AMDVIState *s =3D AMD_IOMMU_DEVICE(dev); MachineState *ms =3D MACHINE(qdev_get_machine()); PCMachineState *pcms =3D PC_MACHINE(ms); @@ -1634,6 +1681,7 @@ static void amdvi_sysbus_realize(DeviceState *dev, Er= ror **errp) } =20 s->pci =3D AMD_IOMMU_PCI(pdev); + dc->vmsd =3D &vmstate_amdvi_sysbus_migratable; } else { s->pci =3D AMD_IOMMU_PCI(object_new(TYPE_AMD_IOMMU_PCI)); /* This device should take care of IOMMU PCI properties */ --=20 MST