From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935003AbcIOMGi (ORCPT ); Thu, 15 Sep 2016 08:06:38 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:36633 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934609AbcIOMGc (ORCPT ); Thu, 15 Sep 2016 08:06:32 -0400 From: Tomeu Vizoso To: linux-kernel@vger.kernel.org Cc: Tomeu Vizoso , Jon Hunter , Heiko Stuebner , "Rafael J. Wysocki" , Kevin Hilman , Ulf Hansson , Len Brown , Pavel Machek , Greg Kroah-Hartman , linux-pm@vger.kernel.org Subject: [PATCH v2] PM / Domains: Allow holes in genpd_data.domains array Date: Thu, 15 Sep 2016 14:05:23 +0200 Message-Id: <1473941123-15090-1-git-send-email-tomeu.vizoso@collabora.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <5256c34e-5afb-2cfe-9818-8e6a6e1f0fa3@nvidia.com> References: <5256c34e-5afb-2cfe-9818-8e6a6e1f0fa3@nvidia.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In platforms such as Rockchip's, the array of domains isn't always filled without holes, as which domains are present depend on the particular SoC revision. By allowing holes to be in the array, such SoCs can still use a single set of constants to index the array of power domains. Fixes: 0159ec670763 ("PM / Domains: Verify the PM domain is present when adding a provider") Signed-off-by: Tomeu Vizoso Cc: Jon Hunter Cc: Heiko Stuebner --- v2: Also skip holes in the error path. --- drivers/base/power/domain.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index b0cf46dcae73..83ae3d7d3fdd 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -1581,6 +1581,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, mutex_lock(&gpd_list_lock); for (i = 0; i < data->num_domains; i++) { + if (!data->domains[i]) + continue; if (!pm_genpd_present(data->domains[i])) goto error; @@ -1598,6 +1600,8 @@ int of_genpd_add_provider_onecell(struct device_node *np, error: while (i--) { + if (!data->domains[i]) + continue; data->domains[i]->provider = NULL; data->domains[i]->has_provider = false; } -- 2.7.4