Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp603629pxu; Thu, 26 Nov 2020 06:56:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJz6A1tSgE+ZDdkKOGxlbke35bjGxcu8jFyg7VP40a0/6n+jibefa7PM1Xjs7DIIbhBzSGYT X-Received: by 2002:a17:906:8058:: with SMTP id x24mr3222760ejw.272.1606402585106; Thu, 26 Nov 2020 06:56:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606402585; cv=none; d=google.com; s=arc-20160816; b=yAq3Nz9vNAvN2NLn/cS0pXOk4tzBiyVJW6kYh3U19LFzM59PTcTP6hGA1TV2izCRtv dOzCvjisxgsonqDeSDakUlCo+odluehby6cNZbuHI19BqRCItol+swS3Y/KpS8vjpNYF 2DwK+980F7XLtY85GS/9x4mlgsoLro9IgmMnQl/7g4uTbk773adaLJcrLIkBHjajg+6K Cufr8vk/Dpg/AM2ijzBJ+gU+rzAerQFulAFZ73UdhKpWfail0zEClWmSS+P71dRyfOXx GH9gmBzgAI/HAYNlzNcGB4nQIrno8I8J62XGbiJnVfNxHcGhA0eFP+NTkrYsXLEn7qFe aFyA== 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=y/nzhzLdAz02U0XcQU9jw/b66ZTiRpRml1WRGlOC0m0=; b=TtqIQ7H15mRMh5hEJVw7T5mCUoJ99rOBSwKHg/YI9ODCLXvtusfB8rNq8ltFhNQ5jo i92umHHvDEHbweRL2nefdYoVvqf5cHKhzCnPzU/pNNKLA1l2nF0oO4eQ4q4H+pkU5iPZ k9xduHQhGqSTRLMpOxKlO6nwpHwLQuhZhpuKaj6jEzaE4Tr/wm9o6RLTeI846Q6DVchI 78qIJ71ESO8Wk3pie6RyG5YRluduvVPNhPCsyuLTMR6vtRHni8Ne2rDUThYiSFwEEMgg hGZFU7mO8HflfYjXyD8A98FB3PVg7yUovoanuf/isCY7Z/e8kgzNVuaYxlYyUfRl/rL8 QcFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=fEA6TBay; 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 k22si4472327edj.571.2020.11.26.06.56.02; Thu, 26 Nov 2020 06:56:25 -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=fEA6TBay; 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 S2391173AbgKZOv1 (ORCPT + 99 others); Thu, 26 Nov 2020 09:51:27 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:44810 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390826AbgKZOv0 (ORCPT ); Thu, 26 Nov 2020 09:51:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1606402285; 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=y/nzhzLdAz02U0XcQU9jw/b66ZTiRpRml1WRGlOC0m0=; b=fEA6TBaymDC87oyh4OM7SxhgDzQwbFWPYcQvm65dYpl/sir/2RHvkuI62WEi0s/52vavI+ gGQ2lxbdZNtWpEysnTHip24WPqPjxvbAwH7GFcq74Zysq8uGBk2gTUQVYOyeNfqbLUJbJF FYdfw3G941UC1NBebS+Cpzt/HafnCgI= 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-502-dAdV5MZVPPS6FkaIfnShgw-1; Thu, 26 Nov 2020 09:51:23 -0500 X-MC-Unique: dAdV5MZVPPS6FkaIfnShgw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E43AF10919C5; Thu, 26 Nov 2020 14:51:21 +0000 (UTC) Received: from steredhat.redhat.com (ovpn-113-252.ams2.redhat.com [10.36.113.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2620760636; Thu, 26 Nov 2020 14:51:19 +0000 (UTC) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Stefan Hajnoczi , linux-kernel@vger.kernel.org, Laurent Vivier , Max Gurtovoy , "Michael S. Tsirkin" , Eli Cohen , Jason Wang Subject: [PATCH v2 11/17] vdpa_sim: make 'config' generic and usable for any device type Date: Thu, 26 Nov 2020 15:49:44 +0100 Message-Id: <20201126144950.92850-12-sgarzare@redhat.com> In-Reply-To: <20201126144950.92850-1-sgarzare@redhat.com> References: <20201126144950.92850-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add new 'config_size' attribute in 'vdpasim_dev_attr' and allocates 'config' dynamically to support any device types. Signed-off-by: Stefano Garzarella --- drivers/vdpa/vdpa_sim/vdpa_sim.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c index 9f2ca3a77025..c07ddf6af720 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -60,6 +60,7 @@ struct vdpasim_virtqueue { struct vdpasim_dev_attr { u64 supported_features; + size_t config_size; int nvqs; u32 id; @@ -74,7 +75,8 @@ struct vdpasim { struct vdpasim_dev_attr dev_attr; /* spinlock to synchronize virtqueue state */ spinlock_t lock; - struct virtio_net_config config; + /* virtio config according to device type */ + void *config; struct vhost_iotlb *iommu; void *buffer; u32 status; @@ -374,6 +376,10 @@ static struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr) goto err_iommu; set_dma_ops(dev, &vdpasim_dma_ops); + vdpasim->config = kzalloc(dev_attr->config_size, GFP_KERNEL); + if (!vdpasim->config) + goto err_iommu; + vdpasim->vqs = kcalloc(dev_attr->nvqs, sizeof(struct vdpasim_virtqueue), GFP_KERNEL); if (!vdpasim->vqs) @@ -514,7 +520,8 @@ static u64 vdpasim_get_features(struct vdpa_device *vdpa) static int vdpasim_set_features(struct vdpa_device *vdpa, u64 features) { struct vdpasim *vdpasim = vdpa_to_sim(vdpa); - struct virtio_net_config *config = &vdpasim->config; + struct virtio_net_config *config = + (struct virtio_net_config *)vdpasim->config; /* DMA mapping must be done by driver */ if (!(features & (1ULL << VIRTIO_F_ACCESS_PLATFORM))) @@ -586,8 +593,8 @@ static void vdpasim_get_config(struct vdpa_device *vdpa, unsigned int offset, { struct vdpasim *vdpasim = vdpa_to_sim(vdpa); - if (offset + len < sizeof(struct virtio_net_config)) - memcpy(buf, (u8 *)&vdpasim->config + offset, len); + if (offset + len < vdpasim->dev_attr.config_size) + memcpy(buf, vdpasim->config + offset, len); } static void vdpasim_set_config(struct vdpa_device *vdpa, unsigned int offset, @@ -674,6 +681,7 @@ static void vdpasim_free(struct vdpa_device *vdpa) if (vdpasim->iommu) vhost_iotlb_free(vdpasim->iommu); kfree(vdpasim->vqs); + kfree(vdpasim->config); } static const struct vdpa_config_ops vdpasim_config_ops = { @@ -736,6 +744,7 @@ static int __init vdpasim_dev_init(void) dev_attr.id = VIRTIO_ID_NET; dev_attr.supported_features = VDPASIM_NET_FEATURES; dev_attr.nvqs = VDPASIM_VQ_NUM; + dev_attr.config_size = sizeof(struct virtio_net_config); dev_attr.work_fn = vdpasim_net_work; vdpasim_dev = vdpasim_create(&dev_attr); -- 2.26.2