/* * Mausezahn - A fast versatile traffic generator * Copyright (C) 2008-2010 Herbert Haas * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses/gpl-2.0.html * */ #include "mz.h" #include "cli.h" #include "mops.h" // Enter interface config mode: // int enter_interface (struct cli_def *cli, const char *command, char *argv[], int argc) { int i, j=0; char prompt[10]; if ( (strcmp(argv[argc-1],"?")==0) || (argc>1) ) { cli_print(cli, "Specify an interface to configure\n"); return CLI_OK; } if (argc) { for (i=0; i1) ) { cli_print(cli, "A.B.C.D Specify a default interface IP address\n"); return CLI_OK; } if (argc) { if (mops_pdesc_ip (device_list[clidev].ip_mops, argv[0])) { cli_print(cli,"Invalid IP address (use format: A.B.C.D)\n"); } } else cli_print(cli, "A.B.C.D Specify a default interface IP address\n"); return CLI_OK; } int conf_mac_address (struct cli_def *cli, const char *command, char *argv[], int argc) { if ( (strcmp(argv[argc-1],"?")==0) || (argc>1) ) { cli_print(cli, "XX:XX:XX:XX:XX:XX Configure a default interface MAC address\n"); return CLI_OK; } if (argc) { if (mops_pdesc_mac (device_list[clidev].mac_mops, argv[0])) { cli_print(cli,"Invalid MAC address (use format: XX:XX:XX:XX:XX:XX)\n"); } } else cli_print(cli, "A.B.C.D Specify a default interface IP address\n"); return CLI_OK; } int conf_tag_dot1q (struct cli_def *cli, const char *command, char *argv[], int argc) { if ( (strcmp(argv[argc-1],"?")==0) || (argc>1) ) { cli_print(cli, "Specify one or more 802.1Q (and optionally 802.1P) tags\n"); return CLI_OK; } cli_print(cli, "Not supported in this version\n"); return CLI_OK; } int conf_tag_mpls (struct cli_def *cli, const char *command, char *argv[], int argc) { if ( (strcmp(argv[argc-1],"?")==0) || (argc>1) ) { cli_print(cli, "Specify one or more MPLS labels (and parameters)\n"); return CLI_OK; } cli_print(cli, "Not supported in this version\n"); return CLI_OK; } ass='nohover'>AgeCommit message (Expand)AuthorFilesLines me='dt' onchange='this.form.submit();'>
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-05-04 14:01:10 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-05-04 14:09:16 +0200
commit6d45b719cbd51f014bb1b5dd8ed99068d78d36af (patch)
treec49822a308038696cbea7e1ea466a6b3248b1efd
parentba41e1bc28bd862089b0fc00e8136aa258a62b21 (diff)
intel_pstate: Fix intel_pstate_get()
After commit 8fa520af5081 "intel_pstate: Remove freq calculation from intel_pstate_calc_busy()" intel_pstate_get() calls get_avg_frequency() to compute the average frequency, which is problematic for two reasons. First, intel_pstate_get() may be invoked before the driver reads the CPU feedback registers for the first time and if that happens, get_avg_frequency() will attempt to divide by zero. Second, the get_avg_frequency() call in intel_pstate_get() is racy with respect to intel_pstate_sample() and it may end up returning completely meaningless values for this reason. Moreover, after commit 7349ec0470b6 "intel_pstate: Move intel_pstate_calc_busy() into get_target_pstate_use_performance()" sample.core_pct_busy is never computed on Atom, but it is used in intel_pstate_adjust_busy_pstate() in that case too. To address those problems notice that if sample.core_pct_busy was used in the average frequency computation carried out by get_avg_frequency(), both the divide by zero problem and the race with respect to intel_pstate_sample() would be avoided. Accordingly, move the invocation of intel_pstate_calc_busy() from get_target_pstate_use_performance() to intel_pstate_update_util(), which also will take care of the uninitialized sample.core_pct_busy on Atom, and modify get_avg_frequency() to use sample.core_pct_busy as per the above. Reported-by: kernel test robot <ying.huang@linux.intel.com> Link: http://marc.info/?l=linux-kernel&m=146226437623173&w=4 Fixes: 8fa520af5081 "intel_pstate: Remove freq calculation from intel_pstate_calc_busy()" Fixes: 7349ec0470b6 "intel_pstate: Move intel_pstate_calc_busy() into get_target_pstate_use_performance()" Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat