From patchwork Thu Jun 16 21:26:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 70269 Delivered-To: patch@linaro.org Received: by 10.140.28.4 with SMTP id 4csp470682qgy; Thu, 16 Jun 2016 14:47:34 -0700 (PDT) X-Received: by 10.66.139.133 with SMTP id qy5mr7563440pab.4.1466113654820; Thu, 16 Jun 2016 14:47:34 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x13si8042127pfi.161.2016.06.16.14.47.34; Thu, 16 Jun 2016 14:47:34 -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=@linaro.org; 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; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933428AbcFPVrW (ORCPT + 30 others); Thu, 16 Jun 2016 17:47:22 -0400 Received: from mail-wm0-f45.google.com ([74.125.82.45]:34175 "EHLO mail-wm0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754900AbcFPV2E (ORCPT ); Thu, 16 Jun 2016 17:28:04 -0400 Received: by mail-wm0-f45.google.com with SMTP id k184so34368588wme.1 for ; Thu, 16 Jun 2016 14:28:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3TVIsXK0OWXjHgXpiiPWa08s49ZynZ4Fk8kQbMXnb3k=; b=M2FfL761T3T/dGg2Ko80mlDTaEdbefzC3dbsP8IrSChctiDLhmIv3g+GFBWddpGsMK 6ZiLTwRyCjUvAnDho067JgBUSzFgwlkJKaoVTB/cFEqr7VYDAXeJI3hWPpGtFD6bHs47 mHsQZxmaRzFXBhxVgIE27l0VxAy4xKs1rLD8s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3TVIsXK0OWXjHgXpiiPWa08s49ZynZ4Fk8kQbMXnb3k=; b=UnOCq4B6zfnVLqnzWefyDzlT+fvkoiu7zrvU3wmvC9c0Hdl1fhJrVkZ640k5w5duPi 85lPLRYFaHoPlafN4PVncEpalXwsC5W1DZYYenbKhBRCkU/yvS1LSH4jCB8Kz8xWEQrY HClG5zHNhTzOD9VKQyvfnOXSzQkzgDkwNAOrL81Vt4AW4hq8cd91lMoIusnahBXCgK4s 39wcaZNzIc9Us7FCYAEyZE0L/mGpS1vM8BpUS8q0gbyYflvRW6yY9jA7XeXpjxThmEmW j9tI4o72sNMHRHtGlm0bKa2MzOIk6eN7kwIbAnvABHS44OtBKSb7LdSOrTMyRsl50wKe B33g== X-Gm-Message-State: ALyK8tKzkFj+gnIq6W376xuP+KmZDpfB8LfbszWRpLBkBIwsqbu4XnkoLMYIllmnX3O5hpFa X-Received: by 10.194.141.238 with SMTP id rr14mr1452629wjb.58.1466112482665; Thu, 16 Jun 2016 14:28:02 -0700 (PDT) Received: from localhost.localdomain (sju31-1-78-210-255-2.fbx.proxad.net. [78.210.255.2]) by smtp.gmail.com with ESMTPSA id x128sm16705606wmf.6.2016.06.16.14.28.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 16 Jun 2016 14:28:02 -0700 (PDT) From: Daniel Lezcano To: daniel.lezcano@linaro.org, tglx@linutronix.de Cc: linux-kernel@vger.kernel.org, Arnd Bergmann , John Stultz , linux-arch@vger.kernel.org (open list:GENERIC INCLUDE/A...) Subject: [PATCH V2 02/63] clocksource/drivers/clksrc-probe: Introduce init functions with return code Date: Thu, 16 Jun 2016 23:26:21 +0200 Message-Id: <1466112442-31105-3-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1466112442-31105-1-git-send-email-daniel.lezcano@linaro.org> References: <1466112442-31105-1-git-send-email-daniel.lezcano@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, the clksrc-probe is not able to handle any error from the init functions. There are different issues with the current code: - the code is duplicated in the init functions by writing error - every driver tends to panic in its own init function - counting the number of clocksources is not reliable This patch adds another table to store the functions returning an error. The table is temporary while we convert all the drivers to return an error and will disappear. Signed-off-by: Daniel Lezcano --- drivers/clocksource/clksrc-probe.c | 22 ++++++++++++++++++++++ include/asm-generic/vmlinux.lds.h | 2 ++ include/linux/clocksource.h | 3 +++ 3 files changed, 27 insertions(+) -- 1.9.1 diff --git a/drivers/clocksource/clksrc-probe.c b/drivers/clocksource/clksrc-probe.c index 7cb6c92..5fa6a55 100644 --- a/drivers/clocksource/clksrc-probe.c +++ b/drivers/clocksource/clksrc-probe.c @@ -20,16 +20,22 @@ #include extern struct of_device_id __clksrc_of_table[]; +extern struct of_device_id __clksrc_ret_of_table[]; static const struct of_device_id __clksrc_of_table_sentinel __used __section(__clksrc_of_table_end); +static const struct of_device_id __clksrc_ret_of_table_sentinel + __used __section(__clksrc_ret_of_table_end); + void __init clocksource_probe(void) { struct device_node *np; const struct of_device_id *match; of_init_fn_1 init_func; + of_init_fn_1_ret init_func_ret; unsigned clocksources = 0; + int ret; for_each_matching_node_and_match(np, __clksrc_of_table, &match) { if (!of_device_is_available(np)) @@ -40,6 +46,22 @@ void __init clocksource_probe(void) clocksources++; } + for_each_matching_node_and_match(np, __clksrc_ret_of_table, &match) { + if (!of_device_is_available(np)) + continue; + + init_func_ret = match->data; + + ret = init_func_ret(np); + if (ret) { + pr_err("Failed to initialize '%s': %d", + of_node_full_name(np), ret); + continue; + } + + clocksources++; + } + clocksources += acpi_probe_device_table(clksrc); if (!clocksources) diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 6a67ab9..8c6c626 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -173,6 +173,7 @@ *(__##name##_of_table_end) #define CLKSRC_OF_TABLES() OF_TABLE(CONFIG_CLKSRC_OF, clksrc) +#define CLKSRC_RET_OF_TABLES() OF_TABLE(CONFIG_CLKSRC_OF, clksrc_ret) #define IRQCHIP_OF_MATCH_TABLE() OF_TABLE(CONFIG_IRQCHIP, irqchip) #define CLK_OF_TABLES() OF_TABLE(CONFIG_COMMON_CLK, clk) #define IOMMU_OF_TABLES() OF_TABLE(CONFIG_OF_IOMMU, iommu) @@ -531,6 +532,7 @@ CLK_OF_TABLES() \ RESERVEDMEM_OF_TABLES() \ CLKSRC_OF_TABLES() \ + CLKSRC_RET_OF_TABLES() \ IOMMU_OF_TABLES() \ CPU_METHOD_OF_TABLES() \ CPUIDLE_METHOD_OF_TABLES() \ diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 44a1aff..15c3839 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h @@ -246,6 +246,9 @@ extern int clocksource_i8253_init(void); #define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \ OF_DECLARE_1(clksrc, name, compat, fn) +#define CLOCKSOURCE_OF_DECLARE_RET(name, compat, fn) \ + OF_DECLARE_1_RET(clksrc_ret, name, compat, fn) + #ifdef CONFIG_CLKSRC_PROBE extern void clocksource_probe(void); #else