Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13464976ybl; Sun, 29 Dec 2019 12:30:56 -0800 (PST) X-Google-Smtp-Source: APXvYqxBZqdkg9YWwBFoNQwSJNxRxRdDwy10FfI83AeMPAq/baXWwfUdSldUOOjPiO6Rgl3t13Q/ X-Received: by 2002:a05:6830:4a4:: with SMTP id l4mr70996751otd.91.1577651456624; Sun, 29 Dec 2019 12:30:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577651456; cv=none; d=google.com; s=arc-20160816; b=oXGaov08esiR1yFELQnMMPK6hUXpL+hMhGiY63A+75Ejih+moYHvCw5aNO3kkmj8g9 DoiMPQLuD1zZbmiW6KsqKOo4ZQd6AdN/uVeBsZVdj43bilbgON1DErp8+keqG9gfR7VY bu2TiCYAPwOmizgIUs7gMLFV3ln34mi9BwYWr/kIk/C89PCJK9HAOKjTrnyi+NRbSLhS ka+YlNO6BNVv4CqVqzwJWU6t9C4JLTOKj/yqqtm7VMvVoX4Rq5GdvJRkueA7qBp9uFbF Yt+88UDnsJYIT4kU0/RJsXIfScs3kHNsKG6juM+RIjqVFg2wskXzl8kWQB2qxXtz0Cev 2NGw== 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=gHUeP7V+20e8CXvAcGlm3kqOdyllhfCOqD3P1h1Ol50=; b=acXGFLTkSe320E6iG0u2ssO0cUlH0xMhe0bM5mOITRVyrADIXkHiCgU+EpLne7NPzV DGS1gQrgVjwuSVmLwx62Y/TBqrp3VUa6N4684qW9GTS+TxXfVXPA+fa1p2rlbVmj06cl /ntqjA4PdeojXBkWpsEl2YaxK6prvs/rneRGB+ta908+SFIKsfIpEh332UvQTWzdpFrm TLans81izYKjzpmj25FNANotKdBRAkM/eOVd8CJtsiBhNOp3a6U6LY/JsoB457K/dRs6 p43wbNaEV9lJnuSDIgI6yu4b2bZ/eU5s15PbHn96WKEM5t8WHnlb6s619AKbpU74e7dZ A8SQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ZeuWt3MX; 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 h7si19451171otm.165.2019.12.29.12.30.45; Sun, 29 Dec 2019 12:30:56 -0800 (PST) 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=ZeuWt3MX; 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 S1729558AbfL2ReA (ORCPT + 99 others); Sun, 29 Dec 2019 12:34:00 -0500 Received: from mail.kernel.org ([198.145.29.99]:36416 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729535AbfL2Rd6 (ORCPT ); Sun, 29 Dec 2019 12:33:58 -0500 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 2F92520722; Sun, 29 Dec 2019 17:33:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640837; bh=lpKrn/z464txxM/CiCqCNfrmIYaLTF+arTlZnHGXzXM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZeuWt3MXlpKOFg5O2eeQVYsTrk4Per7vayrFJscRDlZepxTqE/hYtp/4JN3F32nlN PRPtfzXUr7GyRJYXThqw0m+/uGU9Cy/erYYhZTA8gq9pUbl9m1CjMhnbniwsG+ZTIh j6fdtgtFrf5+r+Qr3FHPI4Ey2sUNfI8/CMApr3PI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bjorn Andersson , Viresh Kumar , Amit Kucheria , "Rafael J. Wysocki" , Sasha Levin Subject: [PATCH 4.19 158/219] cpufreq: Register drivers only after CPU devices have been registered Date: Sun, 29 Dec 2019 18:19:20 +0100 Message-Id: <20191229162532.386006575@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162508.458551679@linuxfoundation.org> References: <20191229162508.458551679@linuxfoundation.org> User-Agent: quilt/0.66 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 From: Viresh Kumar [ Upstream commit 46770be0cf94149ca48be87719bda1d951066644 ] The cpufreq core heavily depends on the availability of the struct device for CPUs and if they aren't available at the time cpufreq driver is registered, we will never succeed in making cpufreq work. This happens due to following sequence of events: - cpufreq_register_driver() - subsys_interface_register() - return 0; //successful registration of driver ... at a later point of time - register_cpu(); - device_register(); - bus_probe_device(); - sif->add_dev(); - cpufreq_add_dev(); - get_cpu_device(); //FAILS - per_cpu(cpu_sys_devices, num) = &cpu->dev; //used by get_cpu_device() - return 0; //CPU registered successfully Because the per-cpu variable cpu_sys_devices is set only after the CPU device is regsitered, cpufreq will never be able to get it when cpufreq_add_dev() is called. This patch avoids this failure by making sure device structure of at least CPU0 is available when the cpufreq driver is registered, else return -EPROBE_DEFER. Reported-by: Bjorn Andersson Co-developed-by: Amit Kucheria Signed-off-by: Viresh Kumar Tested-by: Amit Kucheria Signed-off-by: Rafael J. Wysocki Signed-off-by: Sasha Levin --- drivers/cpufreq/cpufreq.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 9d8d64f706e0..e35c397b1259 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2480,6 +2480,13 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) if (cpufreq_disabled()) return -ENODEV; + /* + * The cpufreq core depends heavily on the availability of device + * structure, make sure they are available before proceeding further. + */ + if (!get_cpu_device(0)) + return -EPROBE_DEFER; + if (!driver_data || !driver_data->verify || !driver_data->init || !(driver_data->setpolicy || driver_data->target_index || driver_data->target) || -- 2.20.1