Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3294304pxj; Tue, 1 Jun 2021 01:47:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxkX1aizsoAND9ZC2Y6IX3AK0lkaBvWenbey0Ed6kod4yUB5c15x+Rh6lFTPyfhJrVIF002 X-Received: by 2002:a17:906:eca7:: with SMTP id qh7mr11902481ejb.143.1622537268086; Tue, 01 Jun 2021 01:47:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622537268; cv=none; d=google.com; s=arc-20160816; b=gJiJNRD95gTMVVn8oDZ+bYhkE21r85lTGsaK0oJ+CPbsAsMfHCF2+LX97xk5kPSxPY 5GGsvvFAOkJWVb0LQRHoyNiNfetMpiC70mGTOg4fl9jmVK6UW7gG/r8GE1zQRu5XZiMT 4uGUYQ8DCOKsNALi+CTro6H5Rhd0ZRtukW7HnM+7UNZ5fQ5MCVGz7VtIzgg2CGQLeAS1 ML42pCcufViTnnstoF1aJTKdmPIGQdrzAOgcvjbH3wJUMLfiyYCACqWnpZqdXLD7nKTG U9fn6E/M17vkFaAN5uJnks0r7DzfQ+LKnepxmD/Y4tZHLBAQwkCWHWImNj4KM2iaTzj3 +l4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WrB6mvofF/eyGV52SKIt7JTVB1esFhxct19/WhmLXiU=; b=oQKL7RaSVOzdtv75MDFYZG+ztpHFrjBlT4x/xJ0qUX0sz1l9atv74ga75MMbBOf+CD YgNsQITRWe6RHvfvjtH7frkFgRXePOEzyy/+I3zGSYYwNrjaCnsZk0k+VtcBrti6y7r3 gRcQDZx4QQzChpBfRdp6t2SiamNvzJO4RtPnrjk7GwoB/EYGqRyofK+ROXa7c8eQ2u5O 43si6qaSBbh/eZb+NKKmYadhoZUhykEBM/xn2fdLHLKoNXLi4L2ttcDtNI9h10b29dr0 Ld/Yw9S7NiiHALg+tpS3ThScmCQ97w245HtJSGNJ2WYNQGi1s7mpP6g9uRl+RkdUTQ22 DVCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Xug6iZTJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r2si7740295edw.385.2021.06.01.01.47.25; Tue, 01 Jun 2021 01:47:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Xug6iZTJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233590AbhFAIrU (ORCPT + 99 others); Tue, 1 Jun 2021 04:47:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:47527 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233597AbhFAIrO (ORCPT ); Tue, 1 Jun 2021 04:47:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1622537132; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WrB6mvofF/eyGV52SKIt7JTVB1esFhxct19/WhmLXiU=; b=Xug6iZTJ4XlsKhRE8R42GN1EmB8O+sY1BlU/H064t/08WWhFm0hTlLjiWx1rd003duhGW1 IFs6J60zl8AqAilkGP/NFFfXza15n41iwdTuNw+XQf7I/XqqhuhPEOA7hidXmtIOIZ6NWd t9FkM03bGenMEvC0ih+7Uum6Oq5y5OQ= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-325-p9zeVaMKOt2wE7gdk0fP-w-1; Tue, 01 Jun 2021 04:45:29 -0400 X-MC-Unique: p9zeVaMKOt2wE7gdk0fP-w-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 29C14802E80; Tue, 1 Jun 2021 08:45:28 +0000 (UTC) Received: from localhost.localdomain (ovpn-12-16.pek2.redhat.com [10.72.12.16]) by smtp.corp.redhat.com (Postfix) with ESMTP id AEBAC1037F21; Tue, 1 Jun 2021 08:45:25 +0000 (UTC) From: Jason Wang To: mst@redhat.com, jasowang@redhat.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, netdev@vger.kernel.org Cc: eli@mellanox.com Subject: [PATCH 3/4] vp_vdpa: allow set vq state to initial state after reset Date: Tue, 1 Jun 2021 16:45:02 +0800 Message-Id: <20210601084503.34724-4-jasowang@redhat.com> In-Reply-To: <20210601084503.34724-1-jasowang@redhat.com> References: <20210601084503.34724-1-jasowang@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We used to fail the set_vq_state() since it was not supported yet by the virtio spec. But if the bus tries to set the state which is equal to the device initial state after reset, we can let it go. This is a must for virtio_vdpa() to set vq state during probe which is required for some vDPA parents. Signed-off-by: Jason Wang --- drivers/vdpa/virtio_pci/vp_vdpa.c | 42 ++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/drivers/vdpa/virtio_pci/vp_vdpa.c b/drivers/vdpa/virtio_pci/vp_vdpa.c index c76ebb531212..18bf4a422772 100644 --- a/drivers/vdpa/virtio_pci/vp_vdpa.c +++ b/drivers/vdpa/virtio_pci/vp_vdpa.c @@ -210,13 +210,49 @@ static int vp_vdpa_get_vq_state(struct vdpa_device *vdpa, u16 qid, return -EOPNOTSUPP; } +static int vp_vdpa_set_vq_state_split(struct vdpa_device *vdpa, + const struct vdpa_vq_state *state) +{ + const struct vdpa_vq_state_split *split = &state->split; + + if (split->avail_index == 0) + return 0; + + return -EOPNOTSUPP; +} + +static int vp_vdpa_set_vq_state_packed(struct vdpa_device *vdpa, + const struct vdpa_vq_state *state) +{ + const struct vdpa_vq_state_packed *packed = &state->packed; + + if (packed->last_avail_counter == 1 && + packed->last_avail_idx == 0 && + packed->last_used_counter == 1 && + packed->last_used_idx == 0) + return 0; + + return -EOPNOTSUPP; +} + static int vp_vdpa_set_vq_state(struct vdpa_device *vdpa, u16 qid, const struct vdpa_vq_state *state) { - /* Note that this is not supported by virtio specification, so - * we return -ENOPOTSUPP here. This means we can't support live - * migration, vhost device start/stop. + struct virtio_pci_modern_device *mdev = vdpa_to_mdev(vdpa); + + /* Note that this is not supported by virtio specification. + * But if the state is by chance equal to the device initial + * state, we can let it go. */ + if ((vp_modern_get_status(mdev) & VIRTIO_CONFIG_S_FEATURES_OK) && + !vp_modern_get_queue_enable(mdev, qid)) { + if (vp_modern_get_driver_features(mdev) & + BIT_ULL(VIRTIO_F_RING_PACKED)) + return vp_vdpa_set_vq_state_packed(vdpa, state); + else + return vp_vdpa_set_vq_state_split(vdpa, state); + } + return -EOPNOTSUPP; } -- 2.25.1