Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964947AbcCRO0y (ORCPT ); Fri, 18 Mar 2016 10:26:54 -0400 Received: from mx2.suse.de ([195.135.220.15]:50047 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964857AbcCRO0s (ORCPT ); Fri, 18 Mar 2016 10:26:48 -0400 X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" From: Johannes Thumshirn To: Johannes Thumshirn Cc: Andreas Werner , linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] mcb: Correctly initialize the bus's device Date: Fri, 18 Mar 2016 15:26:36 +0100 Message-Id: <96c7417e88d1716bdde1f538c812a4c35d62cf62.1458311073.git.jthumshirn@suse.de> X-Mailer: git-send-email 2.7.2 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1815 Lines: 73 The mcb bus' device member wasn't correctly initialized and thus wasn't placed correctly into the driver model. Signed-off-by: Johannes Thumshirn --- drivers/mcb/mcb-core.c | 19 ++++++++++++++++--- include/linux/mcb.h | 5 ++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/mcb/mcb-core.c b/drivers/mcb/mcb-core.c index a4be451..1e336cc 100644 --- a/drivers/mcb/mcb-core.c +++ b/drivers/mcb/mcb-core.c @@ -187,6 +187,7 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier) { struct mcb_bus *bus; int bus_nr; + int rc; bus = kzalloc(sizeof(struct mcb_bus), GFP_KERNEL); if (!bus) @@ -194,14 +195,26 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier) bus_nr = ida_simple_get(&mcb_ida, 0, 0, GFP_KERNEL); if (bus_nr < 0) { - kfree(bus); - return ERR_PTR(bus_nr); + rc = bus_nr; + goto err_free; } - INIT_LIST_HEAD(&bus->children); bus->bus_nr = bus_nr; bus->carrier = carrier; + + device_initialize(&bus->dev); + bus->dev.parent = carrier; + bus->dev.bus = &mcb_bus_type; + + dev_set_name(&bus->dev, "mcb:%d", bus_nr); + rc = device_add(&bus->dev); + if (rc) + goto err_free; + return bus; +err_free: + kfree(bus); + return ERR_PTR(rc); } EXPORT_SYMBOL_GPL(mcb_alloc_bus); diff --git a/include/linux/mcb.h b/include/linux/mcb.h index ed06e15..3efafbc 100644 --- a/include/linux/mcb.h +++ b/include/linux/mcb.h @@ -21,13 +21,12 @@ struct mcb_device; /** * struct mcb_bus - MEN Chameleon Bus * - * @dev: pointer to carrier device - * @children: the child busses + * @dev: bus device + * @carrier: pointer to carrier device * @bus_nr: mcb bus number * @get_irq: callback to get IRQ number */ struct mcb_bus { - struct list_head children; struct device dev; struct device *carrier; int bus_nr; -- 2.7.2