Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: "An uncore PMU driver hardware enablement change for Intel SkyLake uncore PMUs (Skylake Y, U, H and S platforms), plus a number of tooling fixes for the histogram handling/displaying code" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/x86/intel/uncore: Add more Intel uncore IMC PCI IDs for SkyLake perf hists: Fix column length on --hierarchy perf hists browser: Fix column indentation on --hierarchy perf hists browser: Show folded sign properly on --hierarchy perf hists browser: Fix indentation of folded sign on --hierarchy perf hist browser: Fix hierarchy column counts
This commit is contained in:
commit
5ad62a9e5c
3 changed files with 71 additions and 21 deletions
|
@ -8,8 +8,12 @@
|
|||
#define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
|
||||
#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
|
||||
#define PCI_DEVICE_ID_INTEL_BDW_IMC 0x1604
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_IMC 0x191f
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_U_IMC 0x190c
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_U_IMC 0x1904
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_Y_IMC 0x190c
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_HD_IMC 0x1900
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_HQ_IMC 0x1910
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_SD_IMC 0x190f
|
||||
#define PCI_DEVICE_ID_INTEL_SKL_SQ_IMC 0x191f
|
||||
|
||||
/* SNB event control */
|
||||
#define SNB_UNC_CTL_EV_SEL_MASK 0x000000ff
|
||||
|
@ -616,13 +620,29 @@ static const struct pci_device_id bdw_uncore_pci_ids[] = {
|
|||
|
||||
static const struct pci_device_id skl_uncore_pci_ids[] = {
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_IMC),
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_Y_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_U_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_HD_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_HQ_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_SD_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
{ /* IMC */
|
||||
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_SQ_IMC),
|
||||
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
|
||||
},
|
||||
|
||||
{ /* end: all zeroes */ },
|
||||
};
|
||||
|
@ -666,8 +686,12 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
|
|||
IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
|
||||
IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
|
||||
IMC_DEV(BDW_IMC, &bdw_uncore_pci_driver), /* 5th Gen Core U */
|
||||
IMC_DEV(SKL_IMC, &skl_uncore_pci_driver), /* 6th Gen Core */
|
||||
IMC_DEV(SKL_Y_IMC, &skl_uncore_pci_driver), /* 6th Gen Core Y */
|
||||
IMC_DEV(SKL_U_IMC, &skl_uncore_pci_driver), /* 6th Gen Core U */
|
||||
IMC_DEV(SKL_HD_IMC, &skl_uncore_pci_driver), /* 6th Gen Core H Dual Core */
|
||||
IMC_DEV(SKL_HQ_IMC, &skl_uncore_pci_driver), /* 6th Gen Core H Quad Core */
|
||||
IMC_DEV(SKL_SD_IMC, &skl_uncore_pci_driver), /* 6th Gen Core S Dual Core */
|
||||
IMC_DEV(SKL_SQ_IMC, &skl_uncore_pci_driver), /* 6th Gen Core S Quad Core */
|
||||
{ /* end marker */ }
|
||||
};
|
||||
|
||||
|
|
|
@ -1337,8 +1337,8 @@ static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
|
|||
}
|
||||
|
||||
if (first) {
|
||||
ui_browser__printf(&browser->b, "%c", folded_sign);
|
||||
width--;
|
||||
ui_browser__printf(&browser->b, "%c ", folded_sign);
|
||||
width -= 2;
|
||||
first = false;
|
||||
} else {
|
||||
ui_browser__printf(&browser->b, " ");
|
||||
|
@ -1361,8 +1361,10 @@ static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
|
|||
width -= hpp.buf - s;
|
||||
}
|
||||
|
||||
ui_browser__write_nstring(&browser->b, "", hierarchy_indent);
|
||||
width -= hierarchy_indent;
|
||||
if (!first) {
|
||||
ui_browser__write_nstring(&browser->b, "", hierarchy_indent);
|
||||
width -= hierarchy_indent;
|
||||
}
|
||||
|
||||
if (column >= browser->b.horiz_scroll) {
|
||||
char s[2048];
|
||||
|
@ -1381,7 +1383,13 @@ static int hist_browser__show_hierarchy_entry(struct hist_browser *browser,
|
|||
}
|
||||
|
||||
perf_hpp_list__for_each_format(entry->hpp_list, fmt) {
|
||||
ui_browser__write_nstring(&browser->b, "", 2);
|
||||
if (first) {
|
||||
ui_browser__printf(&browser->b, "%c ", folded_sign);
|
||||
first = false;
|
||||
} else {
|
||||
ui_browser__write_nstring(&browser->b, "", 2);
|
||||
}
|
||||
|
||||
width -= 2;
|
||||
|
||||
/*
|
||||
|
@ -1555,10 +1563,11 @@ static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *brows
|
|||
int indent = hists->nr_hpp_node - 2;
|
||||
bool first_node, first_col;
|
||||
|
||||
ret = scnprintf(buf, size, " ");
|
||||
ret = scnprintf(buf, size, " ");
|
||||
if (advance_hpp_check(&dummy_hpp, ret))
|
||||
return ret;
|
||||
|
||||
first_node = true;
|
||||
/* the first hpp_list_node is for overhead columns */
|
||||
fmt_node = list_first_entry(&hists->hpp_formats,
|
||||
struct perf_hpp_list_node, list);
|
||||
|
@ -1573,12 +1582,16 @@ static int hists_browser__scnprintf_hierarchy_headers(struct hist_browser *brows
|
|||
ret = scnprintf(dummy_hpp.buf, dummy_hpp.size, " ");
|
||||
if (advance_hpp_check(&dummy_hpp, ret))
|
||||
break;
|
||||
|
||||
first_node = false;
|
||||
}
|
||||
|
||||
ret = scnprintf(dummy_hpp.buf, dummy_hpp.size, "%*s",
|
||||
indent * HIERARCHY_INDENT, "");
|
||||
if (advance_hpp_check(&dummy_hpp, ret))
|
||||
return ret;
|
||||
if (!first_node) {
|
||||
ret = scnprintf(dummy_hpp.buf, dummy_hpp.size, "%*s",
|
||||
indent * HIERARCHY_INDENT, "");
|
||||
if (advance_hpp_check(&dummy_hpp, ret))
|
||||
return ret;
|
||||
}
|
||||
|
||||
first_node = true;
|
||||
list_for_each_entry_continue(fmt_node, &hists->hpp_formats, list) {
|
||||
|
@ -2076,8 +2089,21 @@ void hist_browser__init(struct hist_browser *browser,
|
|||
browser->b.use_navkeypressed = true;
|
||||
browser->show_headers = symbol_conf.show_hist_headers;
|
||||
|
||||
hists__for_each_format(hists, fmt)
|
||||
if (symbol_conf.report_hierarchy) {
|
||||
struct perf_hpp_list_node *fmt_node;
|
||||
|
||||
/* count overhead columns (in the first node) */
|
||||
fmt_node = list_first_entry(&hists->hpp_formats,
|
||||
struct perf_hpp_list_node, list);
|
||||
perf_hpp_list__for_each_format(&fmt_node->hpp, fmt)
|
||||
++browser->b.columns;
|
||||
|
||||
/* add a single column for whole hierarchy sort keys*/
|
||||
++browser->b.columns;
|
||||
} else {
|
||||
hists__for_each_format(hists, fmt)
|
||||
++browser->b.columns;
|
||||
}
|
||||
|
||||
hists__reset_column_width(hists);
|
||||
}
|
||||
|
|
|
@ -1600,18 +1600,18 @@ static void hists__hierarchy_output_resort(struct hists *hists,
|
|||
if (prog)
|
||||
ui_progress__update(prog, 1);
|
||||
|
||||
hists->nr_entries++;
|
||||
if (!he->filtered) {
|
||||
hists->nr_non_filtered_entries++;
|
||||
hists__calc_col_len(hists, he);
|
||||
}
|
||||
|
||||
if (!he->leaf) {
|
||||
hists__hierarchy_output_resort(hists, prog,
|
||||
&he->hroot_in,
|
||||
&he->hroot_out,
|
||||
min_callchain_hits,
|
||||
use_callchain);
|
||||
hists->nr_entries++;
|
||||
if (!he->filtered) {
|
||||
hists->nr_non_filtered_entries++;
|
||||
hists__calc_col_len(hists, he);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue