Received: by 2002:a17:90a:9103:0:0:0:0 with SMTP id k3csp11801408pjo; Thu, 2 Jan 2020 14:31:19 -0800 (PST) X-Google-Smtp-Source: APXvYqzdXtCxjaqMUJZXX966//uEguyzGgm1rOcnZhJzWn7kLgBjqgTi5F1C3zzLvRAe4vg9RgNQ X-Received: by 2002:a05:6830:1d91:: with SMTP id y17mr89749484oti.276.1578004279527; Thu, 02 Jan 2020 14:31:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578004279; cv=none; d=google.com; s=arc-20160816; b=VDhXIW5HgWYp3uoc0ovpaNjcxn5y4tMDS6M47waJBN5AY51VIBBQg4Gyp0UqL4nj3z bRTAxhA4Ee/OVPCWiekfjXPMRth6plbQ7LUuFDNKTyW17ATYywlcI4NSHMlpFycpyOp2 DoOCNcsvjDPwwvMVf22heLLNDRTTgeiU/w9rMcAPt+u/znWADwmyvwGIy2dhik9tfmaA 8wlyrkYjCdPOzhClU5gZzKRaG/M1NABul7EFrEceJBO8laNuBB4e0/q8c48vW3NAT1iB J84NAuzZdEBEgEup68VjTaZLnpnVqq5vmIabcekdFicgBCPBmxFlA78fQSAM8L0XX/Ie uLcQ== 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=//Y8i2i9silcXkZYV+u97Ih/24UP4HSgQLM4IvgXU0g=; b=q/h2n9wNClSbPCJug3cO0omDgK7b6nFCsWukHICJTyrue0ZGHiEU72281TZRh2Gid8 UD+Bbb6Vk0eZfeHph5zdlIF/OfRKmhP8fImWswAgv383LzFz3GcUXYlxENMTJE7s3Jpc y/85oi1jT1JOvjHFAnJ/Kbp0kctj7JojR/m1Yo9bYY5zhHzAPiajvI7bgykMjB+EjNCt r0dxFS+B+AGZarCtVw7U2aVjMRc0Ma1sTF/GU6aEWcucaH0ZGxzAP5qAo0kDYn6Uw5Jd HdkXcmQyok/b1sDO1lGws4Y1HwhBFb/0gRNEjJZtJ0a9gUJ9ahIhzt4C5ukeunRmYBmz UCBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dDMdFxpe; 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 w18si23280039otj.148.2020.01.02.14.31.04; Thu, 02 Jan 2020 14:31:19 -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=dDMdFxpe; 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 S1729879AbgABWaW (ORCPT + 99 others); Thu, 2 Jan 2020 17:30:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:33994 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730012AbgABWaU (ORCPT ); Thu, 2 Jan 2020 17:30:20 -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 349A62253D; Thu, 2 Jan 2020 22:30:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578004219; bh=Q0XfiEEF4+nFab0KeB9h3/YN2rBxXvvfp51xB1lxAsg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dDMdFxpeWlTSlScb6cJymbkSwv1YjJ1fPglyFhA7FiBZeAQX41MqX71IB5/DjZwAN sjwywIKaz4HMFKcbJ5ZumKZuk0z7ATkLJR475fSP6MivM5X3tc45o2ySM2FRedE86A 8M4aMVFknmGO+s2h5jmK8x4VIorFBV9l0gGsY+3E= 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.9 070/171] cpufreq: Register drivers only after CPU devices have been registered Date: Thu, 2 Jan 2020 23:06:41 +0100 Message-Id: <20200102220556.622524885@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200102220546.960200039@linuxfoundation.org> References: <20200102220546.960200039@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 063ce77df619..86d48f8c6a2e 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -2449,6 +2449,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