Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp633140img; Fri, 22 Mar 2019 05:34:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqw1yQThxabH2WVE+Lme8vYdn1fxp1iyBA6qzq2pn5vJSf1AQmqobYwu1h9IKg7v9WqQluyK X-Received: by 2002:a62:b415:: with SMTP id h21mr8945106pfn.26.1553258058251; Fri, 22 Mar 2019 05:34:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553258058; cv=none; d=google.com; s=arc-20160816; b=lU5wRNj/BLskXK5Ui70BPB8xyo/IqAxg8lF5oZYvoQlAJBM2U9fWQgr5QfnDp6eKsu FlsSeXJ29Hmkf9y8rnaI+KZgZpQX24jYfpequfhIjsPmBzBUsGvGh6N2393qkeBJvtlF RsA1/UShscHaTiP8ZAZei8S+3a7CzD1viMk4PlKneRgrxiZq/XbqrbmuTlOX8MRzCMjR cPHNNmVwRUsK+ihDT/DoIwyu0U39mUfKFGjDNBEod9Sz3vKG7r1IaUy9QQDlvqYdIP97 F63CAmJA6K09ZbXNaQ+V6i/a6qG1hrUnK/fj7tpFZOCS9UU6Xl50hNf0wc0PNFeQI1OU m5MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=amgA3NM1etlst+iYqSpcBXlH2c5HF8HSHAze2n4yApY=; b=XZN2jNaFuaKz4QzHfEl2gcz584K+84/I+fY1XE+WOqEgT9fr70tGdGVghGH5NpUqm9 eBPu2r1nboPBDMwtYvQKAZflL3PLPTG9ZusaNwV89KeWGHa5YSFkdN1yWOk9ipk9MOqm URUGow+GoDkJI8Nn1ntTEr6o832ALb0wScmqrvwqbPo4T5kCqgnRs4wHDqJMWT4bTlt9 XHAOc+dwsK45jYOOWB/lPJ/+IlnNzOxlUnAfhn2nqbDvBzUMwl2eu4YauG993Pqpe4o+ 8wDz8P4ZQ4u+0IK8UZW43JomtKemcckhgd5ZODX8VH36l0J6OmGw3BtRc9qV9qbDSTm7 zRyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2mk8RVS6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k1si6474070pgo.417.2019.03.22.05.34.00; Fri, 22 Mar 2019 05:34:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2mk8RVS6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390048AbfCVMPW (ORCPT + 99 others); Fri, 22 Mar 2019 08:15:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:53752 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390044AbfCVMPU (ORCPT ); Fri, 22 Mar 2019 08:15:20 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8CFC421939; Fri, 22 Mar 2019 12:15:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553256919; bh=fAeIm/VJviWEZ+qzqFqkXDoDLzbmFvbJNR/Mm5BVk+0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2mk8RVS6VPCxSsjgVT1Ntikya5nYnw9Vi9xZgIZNg+aD7USIW0LpFGAGRRT7v6vz0 9os/xrvdAPTbqm3dvaYvcAvLJ5GhTfznE5pWe9/EMXL9Ez+FCfdmOWzZ9qtH5NQ+iF V2YTIoH9WopQ4Uk6HzfaZ3RTkKaPiVkMh0pcV9NY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Marc Hartmayer , Christian Borntraeger , Pierre Morel , Cornelia Huck , Tony Krowiak , Halil Pasic , Martin Schwidefsky Subject: [PATCH 5.0 076/238] s390: vfio_ap: link the vfio_ap devices to the vfio_ap bus subsystem Date: Fri, 22 Mar 2019 12:14:55 +0100 Message-Id: <20190322111303.090479615@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111258.383569278@linuxfoundation.org> References: <20190322111258.383569278@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 5.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Pierre Morel commit 36360658eb5a6cf04bb9f2704d1e4ce54037ec99 upstream. Libudev relies on having a subsystem link for non-root devices. To avoid libudev (and potentially other userspace tools) choking on the matrix device let us introduce a matrix bus and with it the matrix bus subsytem. Also make the matrix device reside within the matrix bus. Doing this we remove the forced link from the matrix device to the vfio_ap driver and the device_type we do not need anymore. Since the associated matrix driver is not the vfio_ap driver any more, we have to change the search for the devices on the vfio_ap driver in the function vfio_ap_verify_queue_reserved. Fixes: 1fde573413b5 ("s390: vfio-ap: base implementation of VFIO AP device driver") Cc: stable@vger.kernel.org Reported-by: Marc Hartmayer Reported-by: Christian Borntraeger Signed-off-by: Pierre Morel Tested-by: Christian Borntraeger Reviewed-by: Cornelia Huck Reviewed-by: Tony Krowiak Acked-by: Halil Pasic Signed-off-by: Martin Schwidefsky Signed-off-by: Greg Kroah-Hartman --- drivers/s390/crypto/vfio_ap_drv.c | 44 +++++++++++++++++++++++++++------- drivers/s390/crypto/vfio_ap_ops.c | 4 +-- drivers/s390/crypto/vfio_ap_private.h | 1 3 files changed, 38 insertions(+), 11 deletions(-) --- a/drivers/s390/crypto/vfio_ap_drv.c +++ b/drivers/s390/crypto/vfio_ap_drv.c @@ -15,7 +15,6 @@ #include "vfio_ap_private.h" #define VFIO_AP_ROOT_NAME "vfio_ap" -#define VFIO_AP_DEV_TYPE_NAME "ap_matrix" #define VFIO_AP_DEV_NAME "matrix" MODULE_AUTHOR("IBM Corporation"); @@ -24,10 +23,6 @@ MODULE_LICENSE("GPL v2"); static struct ap_driver vfio_ap_drv; -static struct device_type vfio_ap_dev_type = { - .name = VFIO_AP_DEV_TYPE_NAME, -}; - struct ap_matrix_dev *matrix_dev; /* Only type 10 adapters (CEX4 and later) are supported @@ -62,6 +57,22 @@ static void vfio_ap_matrix_dev_release(s kfree(matrix_dev); } +static int matrix_bus_match(struct device *dev, struct device_driver *drv) +{ + return 1; +} + +static struct bus_type matrix_bus = { + .name = "matrix", + .match = &matrix_bus_match, +}; + +static struct device_driver matrix_driver = { + .name = "vfio_ap", + .bus = &matrix_bus, + .suppress_bind_attrs = true, +}; + static int vfio_ap_matrix_dev_create(void) { int ret; @@ -71,6 +82,10 @@ static int vfio_ap_matrix_dev_create(voi if (IS_ERR(root_device)) return PTR_ERR(root_device); + ret = bus_register(&matrix_bus); + if (ret) + goto bus_register_err; + matrix_dev = kzalloc(sizeof(*matrix_dev), GFP_KERNEL); if (!matrix_dev) { ret = -ENOMEM; @@ -87,30 +102,41 @@ static int vfio_ap_matrix_dev_create(voi mutex_init(&matrix_dev->lock); INIT_LIST_HEAD(&matrix_dev->mdev_list); - matrix_dev->device.type = &vfio_ap_dev_type; dev_set_name(&matrix_dev->device, "%s", VFIO_AP_DEV_NAME); matrix_dev->device.parent = root_device; + matrix_dev->device.bus = &matrix_bus; matrix_dev->device.release = vfio_ap_matrix_dev_release; - matrix_dev->device.driver = &vfio_ap_drv.driver; + matrix_dev->vfio_ap_drv = &vfio_ap_drv; ret = device_register(&matrix_dev->device); if (ret) goto matrix_reg_err; + ret = driver_register(&matrix_driver); + if (ret) + goto matrix_drv_err; + return 0; +matrix_drv_err: + device_unregister(&matrix_dev->device); matrix_reg_err: put_device(&matrix_dev->device); matrix_alloc_err: + bus_unregister(&matrix_bus); +bus_register_err: root_device_unregister(root_device); - return ret; } static void vfio_ap_matrix_dev_destroy(void) { + struct device *root_device = matrix_dev->device.parent; + + driver_unregister(&matrix_driver); device_unregister(&matrix_dev->device); - root_device_unregister(matrix_dev->device.parent); + bus_unregister(&matrix_bus); + root_device_unregister(root_device); } static int __init vfio_ap_init(void) --- a/drivers/s390/crypto/vfio_ap_ops.c +++ b/drivers/s390/crypto/vfio_ap_ops.c @@ -198,8 +198,8 @@ static int vfio_ap_verify_queue_reserved qres.apqi = apqi; qres.reserved = false; - ret = driver_for_each_device(matrix_dev->device.driver, NULL, &qres, - vfio_ap_has_queue); + ret = driver_for_each_device(&matrix_dev->vfio_ap_drv->driver, NULL, + &qres, vfio_ap_has_queue); if (ret) return ret; --- a/drivers/s390/crypto/vfio_ap_private.h +++ b/drivers/s390/crypto/vfio_ap_private.h @@ -40,6 +40,7 @@ struct ap_matrix_dev { struct ap_config_info info; struct list_head mdev_list; struct mutex lock; + struct ap_driver *vfio_ap_drv; }; extern struct ap_matrix_dev *matrix_dev;