Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp2982515pxb; Mon, 16 Nov 2020 02:33:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJyvCVZXjewb0SurfvcaAbCPVeZ9Xn8JxyjBTBpTWVN55AF3K6UmjG8z6SHQT+hCE8JlhZvS X-Received: by 2002:a17:906:c836:: with SMTP id dd22mr13425546ejb.552.1605522835339; Mon, 16 Nov 2020 02:33:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605522835; cv=none; d=google.com; s=arc-20160816; b=ZhTt83DJHF5+Tcxi54EXoVlBJVX9f51MrAC6H5G0nDfU1VDRYe+9TN1YT3u2XI2rQL 6OLNxrq4g7d1M6NCNeVaC+E1JY/ARGLOqUH4bJdHnaYGQUJsYV6DF9KagtvQ3f1BadbF QfIF8qy0RYgmfeCQzFDI/b+X+N3mrYWX2rJdFQDRYGGyHkchiFMvLdpQiYYhCOWpmFgM ZzinLxsznnmOkD4BDmJ7ok6dHXXJr/cPwa5/QxofPfrsV0s7cSw4Vq0THlmwotQo70S7 jrGylab9bbhm7PxGbGEor4BUNj6ETC6zLqQWjFWKAVmLJKxJLIXuP9tliZiGErFSr5Oc p7xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=t9mu4w19hr/sBfyuZDsXE1cTZzK5aREzs9f9lMQcv5k=; b=qTjpotSBneqAZus5e6P/Eh7uEohiwezfeKQpWG3YSGA0PcpT1Nd0J+HOESWSrK+6eZ nDpI+nfrme19z18xViOXscKRAcDqyQ7vXtpIU+zC32r9l3aPZWzrDXd6k/RsG0OcO+DR 4oBq7esYpHy7soDbNKzpid1L+8xozieoulHhdhTsrtU4bc78IAYKKxHDjc6uMwG8QaTV 5TkC6zd3EdlEMltb4mZkyAxZefZvrk0kjYuaq6TQgY5//wvrRWPDlgA9QFaVkFsouLwI gbjwDIYj8OZN8y+I8v8dHYM5aulokmgxywXyNljiz4bWh03c6vnbC/Qi3J/bWpEGLWc1 pX6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=S9bZ98GY; 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 cz20si11618164edb.203.2020.11.16.02.33.32; Mon, 16 Nov 2020 02:33:55 -0800 (PST) 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=S9bZ98GY; 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 S1728929AbgKPKa3 (ORCPT + 99 others); Mon, 16 Nov 2020 05:30:29 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:47861 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727293AbgKPKa2 (ORCPT ); Mon, 16 Nov 2020 05:30:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1605522626; 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=t9mu4w19hr/sBfyuZDsXE1cTZzK5aREzs9f9lMQcv5k=; b=S9bZ98GYN336Ng/tapW6keavtWBscMI5dAwd+mPENqLaD2ll8537GH+GzY5pcNfTbmcAWn 3uotaY78koOuvzDcjbp0NmFL+efxPvmXrY/IwIKPYQRat33RyS4reqER8mTXSPJV64LkLU 7rhAssfjomxQr1WVgs6lTyzOfpWJUCQ= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-585-gEzWVgpCO1-g3SwCT8zxQA-1; Mon, 16 Nov 2020 05:30:24 -0500 X-MC-Unique: gEzWVgpCO1-g3SwCT8zxQA-1 Received: by mail-wm1-f72.google.com with SMTP id 3so10072195wms.9 for ; Mon, 16 Nov 2020 02:30:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=t9mu4w19hr/sBfyuZDsXE1cTZzK5aREzs9f9lMQcv5k=; b=EIexY3i8h7acjTjgucoTlrBOD0eQst1xunAkxJ/yenCyTaS3Mz9Or/aw6Y3yeFoMCU ThA1F1tq7KuaKJBs7nUNxyJV9/0ZREk4zsyRkmqDGujiphSBowgAyv1AZrx1DuojIGhE UBjDTKP57zEWhyQPWamcjGToLp0k8ILZ8hEkTdo6M0+ZVoP02kPoHMtFe7c5pddhNpGc 676wSDki2b1/1poX4u+6b6zWZKjkBiQ+L4uptjev4aGL0Cc3Fa2yIq3VKkBo/eln0n5e krP+0muuZzjN5Mmk1a0cnszmd4Z6ISCGthIU9r+ctEJnbC4exVPTMPL+uGtO3AyWSEIu scQA== X-Gm-Message-State: AOAM532yAzMmywyFdL36MckwnSex7/A7OWxIgt2V0GvOxZUQCNyeq7iR MZUyAxTmn/AsSBaWR0QcUW0oe+saYn3EOTUpVei86v3uoikzfCMPLFW9IgEb4tcatr2pZJsJibI kEkYXlcAzrK7ESkXy1aZCPeYM X-Received: by 2002:a1c:b18a:: with SMTP id a132mr14882931wmf.95.1605522621918; Mon, 16 Nov 2020 02:30:21 -0800 (PST) X-Received: by 2002:a1c:b18a:: with SMTP id a132mr14882916wmf.95.1605522621691; Mon, 16 Nov 2020 02:30:21 -0800 (PST) Received: from steredhat (host-79-17-248-175.retail.telecomitalia.it. [79.17.248.175]) by smtp.gmail.com with ESMTPSA id w21sm18917595wmi.29.2020.11.16.02.30.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Nov 2020 02:30:20 -0800 (PST) Date: Mon, 16 Nov 2020 11:30:18 +0100 From: Stefano Garzarella To: Jason Wang Cc: virtualization@lists.linux-foundation.org, Stefan Hajnoczi , Laurent Vivier , linux-kernel@vger.kernel.org, Eli Cohen , "Michael S. Tsirkin" , Max Gurtovoy Subject: Re: [PATCH RFC 06/12] vdpa_sim: add struct vdpasim_device to store device properties Message-ID: <20201116103018.3vf2denitfi2byvd@steredhat> References: <20201113134712.69744-1-sgarzare@redhat.com> <20201113134712.69744-7-sgarzare@redhat.com> <6d031365-b03b-9f6f-64cb-e4cb328397b7@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <6d031365-b03b-9f6f-64cb-e4cb328397b7@redhat.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Nov 16, 2020 at 12:14:31PM +0800, Jason Wang wrote: > >On 2020/11/13 下午9:47, Stefano Garzarella wrote: >>Move device properties used during the entire life cycle in a new >>structure to simplify the copy of these fields during the vdpasim >>initialization. >> >>Signed-off-by: Stefano Garzarella > > >It would be better to do it before patch 2. > Okay, I'll move this patch. > >>--- >> drivers/vdpa/vdpa_sim/vdpa_sim.h | 17 ++++++++------ >> drivers/vdpa/vdpa_sim/vdpa_sim.c | 33 ++++++++++++++-------------- >> drivers/vdpa/vdpa_sim/vdpa_sim_blk.c | 8 +++++-- >> drivers/vdpa/vdpa_sim/vdpa_sim_net.c | 9 +++++--- >> 4 files changed, 38 insertions(+), 29 deletions(-) >> >>diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_sim.h >>index 6a1267c40d5e..76e642042eb0 100644 >>--- a/drivers/vdpa/vdpa_sim/vdpa_sim.h >>+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h >>@@ -40,12 +40,17 @@ struct vdpasim_virtqueue { >> irqreturn_t (*cb)(void *data); >> }; >>+struct vdpasim_device { >>+ u64 supported_features; >>+ u32 id; >>+ int nvqs; >>+}; >>+ >> struct vdpasim_init_attr { >>- u32 device_id; >>- u64 features; >>+ struct vdpasim_device device; >>+ int batch_mapping; >>+ >> work_func_t work_fn; >>- int batch_mapping; >>- int nvqs; >> }; >> /* State of each vdpasim device */ >>@@ -53,18 +58,16 @@ struct vdpasim { >> struct vdpa_device vdpa; >> struct vdpasim_virtqueue *vqs; >> struct work_struct work; >>+ struct vdpasim_device device; >> /* spinlock to synchronize virtqueue state */ >> spinlock_t lock; >> /* virtio config according to device type */ >> void *config; >> struct vhost_iotlb *iommu; >> void *buffer; >>- u32 device_id; >> u32 status; >> u32 generation; >> u64 features; >>- u64 supported_features; >>- int nvqs; >> /* spinlock to synchronize iommu table */ >> spinlock_t iommu_lock; >> }; >>diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>index 9c9717441bbe..d053bd14b3f8 100644 >>--- a/drivers/vdpa/vdpa_sim/vdpa_sim.c >>+++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c >>@@ -28,7 +28,7 @@ static void vdpasim_queue_ready(struct vdpasim *vdpasim, unsigned int idx) >> { >> struct vdpasim_virtqueue *vq = &vdpasim->vqs[idx]; >>- vringh_init_iotlb(&vq->vring, vdpasim->supported_features, >>+ vringh_init_iotlb(&vq->vring, vdpasim->device.supported_features, >> VDPASIM_QUEUE_MAX, false, >> (struct vring_desc *)(uintptr_t)vq->desc_addr, >> (struct vring_avail *) >>@@ -46,7 +46,7 @@ static void vdpasim_vq_reset(struct vdpasim *vdpasim, >> vq->device_addr = 0; >> vq->cb = NULL; >> vq->private = NULL; >>- vringh_init_iotlb(&vq->vring, vdpasim->supported_features, >>+ vringh_init_iotlb(&vq->vring, vdpasim->device.supported_features, >> VDPASIM_QUEUE_MAX, false, NULL, NULL, NULL); >> } >>@@ -54,7 +54,7 @@ static void vdpasim_reset(struct vdpasim *vdpasim) >> { >> int i; >>- for (i = 0; i < vdpasim->nvqs; i++) >>+ for (i = 0; i < vdpasim->device.nvqs; i++) >> vdpasim_vq_reset(vdpasim, &vdpasim->vqs[i]); >> spin_lock(&vdpasim->iommu_lock); >>@@ -189,7 +189,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_init_attr *attr) >> struct device *dev; >> int i, size, ret = -ENOMEM; >>- device_id = attr->device_id; >>+ device_id = attr->device.id; >> /* Currently, we only accept the network and block devices. */ >> if (device_id != VIRTIO_ID_NET && device_id != VIRTIO_ID_BLOCK) >> return ERR_PTR(-EOPNOTSUPP); >>@@ -200,10 +200,12 @@ struct vdpasim *vdpasim_create(struct vdpasim_init_attr *attr) >> ops = &vdpasim_config_ops; >> vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops, >>- attr->nvqs); >>+ attr->device.nvqs); >> if (!vdpasim) >> goto err_alloc; >>+ vdpasim->device = attr->device; >>+ >> if (device_id == VIRTIO_ID_NET) >> size = sizeof(struct virtio_net_config); >> else >>@@ -212,14 +214,11 @@ struct vdpasim *vdpasim_create(struct vdpasim_init_attr *attr) >> if (!vdpasim->config) >> goto err_iommu; >>- vdpasim->vqs = kcalloc(attr->nvqs, sizeof(struct vdpasim_virtqueue), >>- GFP_KERNEL); >>+ vdpasim->vqs = kcalloc(vdpasim->device.nvqs, >>+ sizeof(struct vdpasim_virtqueue), GFP_KERNEL); >> if (!vdpasim->vqs) >> goto err_iommu; >>- vdpasim->device_id = device_id; >>- vdpasim->supported_features = attr->features; >>- vdpasim->nvqs = attr->nvqs; >> INIT_WORK(&vdpasim->work, attr->work_fn); >> spin_lock_init(&vdpasim->lock); >> spin_lock_init(&vdpasim->iommu_lock); >>@@ -238,7 +237,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_init_attr *attr) >> if (!vdpasim->buffer) >> goto err_iommu; >>- for (i = 0; i < vdpasim->nvqs; i++) >>+ for (i = 0; i < vdpasim->device.nvqs; i++) >> vringh_set_iotlb(&vdpasim->vqs[i].vring, vdpasim->iommu); >> vdpasim->vdpa.dma_dev = dev; >>@@ -347,7 +346,7 @@ static u64 vdpasim_get_features(struct vdpa_device *vdpa) >> { >> struct vdpasim *vdpasim = vdpa_to_sim(vdpa); >>- return vdpasim->supported_features; >>+ return vdpasim->device.supported_features; >> } >> static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features) >>@@ -358,14 +357,14 @@ static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features) >> if (!(features & (1ULL << VIRTIO_F_ACCESS_PLATFORM))) >> return -EINVAL; >>- vdpasim->features = features & vdpasim->supported_features; >>+ vdpasim->features = features & vdpasim->device.supported_features; >> /* We generally only know whether guest is using the legacy interface >> * here, so generally that's the earliest we can set config fields. >> * Note: We actually require VIRTIO_F_ACCESS_PLATFORM above which >> * implies VIRTIO_F_VERSION_1, but let's not try to be clever here. >> */ >>- if (vdpasim->device_id == VIRTIO_ID_NET) { >>+ if (vdpasim->device.id == VIRTIO_ID_NET) { >> struct virtio_net_config *config = >> (struct virtio_net_config *)vdpasim->config; >>@@ -391,7 +390,7 @@ static u32 vdpasim_get_device_id(struct vdpa_device *vdpa) >> { >> struct vdpasim *vdpasim = vdpa_to_sim(vdpa); >>- return vdpasim->device_id; >>+ return vdpasim->device.id; >> } >> static u32 vdpasim_get_vendor_id(struct vdpa_device *vdpa) >>@@ -427,10 +426,10 @@ static void vdpasim_get_config(struct vdpa_device *vdpa, unsigned int offset, >> { >> struct vdpasim *vdpasim = vdpa_to_sim(vdpa); >>- if (vdpasim->device_id == VIRTIO_ID_BLOCK && >>+ if (vdpasim->device.id == VIRTIO_ID_BLOCK && >> (offset + len < sizeof(struct virtio_blk_config))) >> memcpy(buf, vdpasim->config + offset, len); >>- else if (vdpasim->device_id == VIRTIO_ID_NET && >>+ else if (vdpasim->device.id == VIRTIO_ID_NET && >> (offset + len < sizeof(struct virtio_net_config))) >> memcpy(buf, vdpasim->config + offset, len); >> } >>diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c >>index 386dbb2f7138..363273d72e26 100644 >>--- a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c >>+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c >>@@ -78,9 +78,13 @@ static int __init vdpasim_blk_init(void) >> struct virtio_blk_config *config; >> int ret; >>- attr.device_id = VIRTIO_ID_BLOCK; >>- attr.features = VDPASIM_FEATURES | VDPASIM_BLK_FEATURES; >>+ attr.device.id = VIRTIO_ID_BLOCK; >>+ attr.device.supported_features = VDPASIM_FEATURES | >>+ VDPASIM_BLK_FEATURES; >>+ attr.device.nvqs = VDPASIM_BLK_VQ_NUM; >>+ >> attr.work_fn = vdpasim_blk_work; >>+ >> vdpasim_blk_dev = vdpasim_create(&attr); >> if (IS_ERR(vdpasim_blk_dev)) { >> ret = PTR_ERR(vdpasim_blk_dev); >>diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c >>index e1e57c52b108..88c9569f6bd3 100644 >>--- a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c >>+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c >>@@ -105,11 +105,14 @@ static int __init vdpasim_net_init(void) >> struct virtio_net_config *config; >> int ret; >>- attr.device_id = VIRTIO_ID_NET; >>- attr.features = VDPASIM_FEATURES | VDPASIM_NET_FEATURES; >>- attr.nvqs = VDPASIM_NET_VQ_NUM; >>+ attr.device.id = VIRTIO_ID_NET; >>+ attr.device.supported_features = VDPASIM_FEATURES | >>+ VDPASIM_NET_FEATURES; >>+ attr.device.nvqs = VDPASIM_NET_VQ_NUM; >>+ >> attr.work_fn = vdpasim_net_work; >> attr.batch_mapping = batch_mapping; >>+ > > >Unnecessary changes. I'll remove these new lines. Thanks, Stefano