Performance monitoring support for papr-scm nvdimm devices via perf interface is added which includes addition of pmu functions like add/del/read/event_init for nvdimm_pmu struture. A new parameter 'priv' in added to the pdev_archdata structure to save nvdimm_pmu device pointer, to handle the unregistering of pmu device. papr_scm_pmu_register function populates the nvdimm_pmu structure with name, capabilities, cpumask along with event handling functions. Finally the populated nvdimm_pmu structure is passed to register the pmu device. Event handling functions internally uses hcall to get events and counter data. Result in power9 machine with 2 nvdimm device: Ex: List all event by perf list command:# perf list nmem nmem0/cache_rh_cnt/ [Kernel PMU event] nmem0/cache_wh_cnt/ [Kernel PMU event] nmem0/cri_res_util/ [Kernel PMU event] nmem0/ctl_res_cnt/ [Kernel PMU event] nmem0/ctl_res_tm/ [Kernel PMU event] nmem0/fast_w_cnt/ [Kernel PMU event] nmem0/host_l_cnt/ [Kernel PMU event] nmem0/host_l_dur/ [Kernel PMU event] nmem0/host_s_cnt/ [Kernel PMU event] nmem0/host_s_dur/ [Kernel PMU event] nmem0/med_r_cnt/ [Kernel PMU event] nmem0/med_r_dur/ [Kernel PMU event] nmem0/med_w_cnt/ [Kernel PMU event] nmem0/med_w_dur/ [Kernel PMU event] nmem0/mem_life/ [Kernel PMU event] nmem0/poweron_secs/ [Kernel PMU event] ... nmem1/mem_life/ [Kernel PMU event] nmem1/poweron_secs/ [Kernel PMU event] Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Tested-by: Nageswara R Sastry <rnsastry@linux.ibm.com> Signed-off-by: Kajol Jain <kjain@linux.ibm.com> [Add numa_map_to_online_node function call to get online node id] Reported-by: Nageswara R Sastry <rnsastry@linux.ibm.com> Reviewed-by: Madhavan Srinivasan <maddy@in.ibm.com> Link: https://lore.kernel.org/r/20220225143024.47947-4-kjain@linux.ibm.com Signed-off-by: Dan Williams <dan.j.williams@intel.com>
59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Arch specific extensions to struct device
|
|
*/
|
|
#ifndef _ASM_POWERPC_DEVICE_H
|
|
#define _ASM_POWERPC_DEVICE_H
|
|
|
|
struct device_node;
|
|
#ifdef CONFIG_PPC64
|
|
struct pci_dn;
|
|
struct iommu_table;
|
|
#endif
|
|
|
|
/*
|
|
* Arch extensions to struct device.
|
|
*
|
|
* When adding fields, consider macio_add_one_device in
|
|
* drivers/macintosh/macio_asic.c
|
|
*/
|
|
struct dev_archdata {
|
|
/*
|
|
* These two used to be a union. However, with the hybrid ops we need
|
|
* both so here we store both a DMA offset for direct mappings and
|
|
* an iommu_table for remapped DMA.
|
|
*/
|
|
dma_addr_t dma_offset;
|
|
|
|
#ifdef CONFIG_PPC64
|
|
struct iommu_table *iommu_table_base;
|
|
#endif
|
|
|
|
#ifdef CONFIG_PPC64
|
|
struct pci_dn *pci_data;
|
|
#endif
|
|
#ifdef CONFIG_EEH
|
|
struct eeh_dev *edev;
|
|
#endif
|
|
#ifdef CONFIG_FAIL_IOMMU
|
|
int fail_iommu;
|
|
#endif
|
|
#ifdef CONFIG_CXL_BASE
|
|
struct cxl_context *cxl_ctx;
|
|
#endif
|
|
#ifdef CONFIG_PCI_IOV
|
|
void *iov_data;
|
|
#endif
|
|
};
|
|
|
|
struct pdev_archdata {
|
|
u64 dma_mask;
|
|
/*
|
|
* Pointer to nvdimm_pmu structure, to handle the unregistering
|
|
* of pmu device
|
|
*/
|
|
void *priv;
|
|
};
|
|
|
|
#endif /* _ASM_POWERPC_DEVICE_H */
|