Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13387513ybl; Sun, 29 Dec 2019 10:40:10 -0800 (PST) X-Google-Smtp-Source: APXvYqzllmvYN+hQSy0popRSDjFl0M4w5P4QpuaHfKtv/yVWe8BbIMd8WUx/dHuqzHFESI55GEt7 X-Received: by 2002:a9d:242:: with SMTP id 60mr55465242otb.253.1577644810681; Sun, 29 Dec 2019 10:40:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577644810; cv=none; d=google.com; s=arc-20160816; b=QsS7rZZngJQEaoF06wAy1XIBSJegnVPa/6nVG2UF9Zw4OVijOHIBbcLLCnZq66mRH1 /uPoWDH9i2+FfdxFOXagiTYi1kv+OhMkIpwImx5dqrnASzd69u8pVLwORJy85cs7J5js 9RhEBlwBYsNh/gW0/2E18p0Z6909OKYPkL0A9r1qtVFvD5z1p1e9F12icANT+1KWSb0u OWEDE3MBCj2w8FI51nYp+pP7jCeLjlbSmE4uALad1yVhSOuFIyuRA8myYvCjehhIFcG3 0h2p2t94MuoSxxtvQRyn54vNLaT+FbVZUbMZNulOOZeiBqGMkvabmF2ZyhHFyfRItWbh gouA== 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=dNIVbPOWaO9QfP7vvZzNZ+7P1QQG6GAYFz4YzJIIB18=; b=DGcAF4lTf3BjV6b+qaflcXCa/C+EzK+fsUMNFdf9TzQF+dN5IAaq3VtLo/Tj00cGJO /vKHVTcE0XEz3vudIx7X2gvm0NRl+jFNQ8GA0g81sxggbMrrxUBXhSji8S2szaaK0Q6E ZGHHmedc3FnFJMiKozbR7ZUHuL4Vd2EMQ+l8OkMpOj9lI6VJTcxtH3sEvJP6kMyIkP8s j4dKXC3tjnmhiyuZN9zEVgBMjaVlQ1c9N4CPgeBy5k8qCFO2+PfB9IcVDchD5mPFZIAU BFCWeVYO1qN6kUOr1b6s2rdBA2j0eys8NhChx9jXoZuEYaqzpysEhnO+nONhrdpWv7E/ 5Sfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=tAlHwAzg; 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 a10si6067818oid.84.2019.12.29.10.39.59; Sun, 29 Dec 2019 10:40:10 -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=tAlHwAzg; 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 S1728035AbfL2RZo (ORCPT + 99 others); Sun, 29 Dec 2019 12:25:44 -0500 Received: from mail.kernel.org ([198.145.29.99]:45848 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727646AbfL2RZm (ORCPT ); Sun, 29 Dec 2019 12:25:42 -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 B8EB720409; Sun, 29 Dec 2019 17:25:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640342; bh=mx433DjZrytfBywvkEgPpFDG8hQ7EcwwP1Q+DK/lcS4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tAlHwAzg1N10cGwKKQYO+04tCduuaydt0817XE5V1VG1pFXvpvnsVj5RJpGQkP+SH UpIPrS7eDVR+tlqeO3v3yq7JUJ4c6coZStHkrlOvAsdY72bB4XCEjke9421qDRsnl6 jw2IRW6RHHCva2KfenrjyWz21VHSCxKxYvTF0Hgw= 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.14 117/161] cpufreq: Register drivers only after CPU devices have been registered Date: Sun, 29 Dec 2019 18:19:25 +0100 Message-Id: <20191229162433.172423934@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162355.500086350@linuxfoundation.org> References: <20191229162355.500086350@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 480e8c13567c..c798a1233e6a 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2475,6 +2475,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