Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751830AbbD0EcZ (ORCPT ); Mon, 27 Apr 2015 00:32:25 -0400 Received: from mail-ob0-f178.google.com ([209.85.214.178]:33688 "EHLO mail-ob0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751629AbbD0EcO (ORCPT ); Mon, 27 Apr 2015 00:32:14 -0400 MIME-Version: 1.0 In-Reply-To: <1429722265-2953-2-git-send-email-shilpa.bhat@linux.vnet.ibm.com> References: <1429722265-2953-1-git-send-email-shilpa.bhat@linux.vnet.ibm.com> <1429722265-2953-2-git-send-email-shilpa.bhat@linux.vnet.ibm.com> Date: Mon, 27 Apr 2015 10:02:13 +0530 Message-ID: Subject: Re: [PATCH 2/2] cpufreq: powernv: Register for OCC related opal_message notification From: Viresh Kumar To: Shilpasri G Bhat Cc: Linux Kernel Mailing List , "linuxppc-dev@ozlabs.org" , "Rafael J. Wysocki" , "linux-pm@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4105 Lines: 118 On 22 April 2015 at 22:34, Shilpasri G Bhat wrote: > diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c > +static char throttle_reason[6][50] = { "No throttling", Don't need to mention 6 here. And the max length you need right now is 27, so maybe s/50/30 ? Also, start 'No Throttling' in a new line, like below. > + "Power Cap", > + "Processor Over Temperature", > + "Power Supply Failure", > + "OverCurrent", s/OverCurrent/Over Current/ ? > + "OCC Reset" > + }; > + > +static int powernv_cpufreq_occ_msg(struct notifier_block *nb, > + unsigned long msg_type, void *msg) > +{ > + struct opal_msg *occ_msg = msg; > + uint64_t token; > + uint64_t chip_id, reason; > + > + if (msg_type != OPAL_MSG_OCC) > + return 0; Blank line here. > + token = be64_to_cpu(occ_msg->params[0]); Here as well.. > + switch (token) { > + case 0: > + occ_reset = true; > + /* > + * powernv_cpufreq_throttle_check() is called in > + * target() callback which can detect the throttle state > + * for governors like ondemand. > + * But static governors will not call target() often thus > + * report throttling here. > + */ Now, do I understand correctly that this notifier will be called as soon as we switch throttling state ? If yes, then do we still need the throttle_check() routine you added earlier ? Maybe not. > + if (!throttled) { > + throttled = true; > + pr_crit("CPU Frequency is throttled\n"); > + } > + pr_info("OCC in Reset\n"); > + break; > + case 1: > + pr_info("OCC is Loaded\n"); > + break; > + case 2: > + chip_id = be64_to_cpu(occ_msg->params[1]); > + reason = be64_to_cpu(occ_msg->params[2]); Blank line here. > + if (occ_reset) { > + occ_reset = false; > + throttled = false; > + pr_info("OCC is Active\n"); > + /* Sanity check for static governors */ > + powernv_cpufreq_throttle_check(smp_processor_id()); > + } else if (reason) { > + throttled = true; > + pr_info("Pmax reduced due to %s on chip %x\n", > + throttle_reason[reason], (int)chip_id); > + } else { > + throttled = false; > + pr_info("%s on chip %x\n", > + throttle_reason[reason], (int)chip_id); > + } Run checkpatch with --strict option, and you will see some warnings. > + break; > + } > + return 0; > +} > + > +static struct notifier_block powernv_cpufreq_opal_nb = { > + .notifier_call = powernv_cpufreq_occ_msg, > + .next = NULL, > + .priority = 0, > +}; > + > static void powernv_cpufreq_stop_cpu(struct cpufreq_policy *policy) > { > struct powernv_smp_call_data freq_data; > @@ -430,6 +497,7 @@ static int __init powernv_cpufreq_init(void) > } > > register_reboot_notifier(&powernv_cpufreq_reboot_nb); > + opal_message_notifier_register(OPAL_MSG_OCC, &powernv_cpufreq_opal_nb); > return cpufreq_register_driver(&powernv_cpufreq_driver); > } > module_init(powernv_cpufreq_init); > -- > 1.9.3 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/