mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
s390/pci: extract software counters from fmb
The software counters are not a part of the function measurement block. Also we do not check for zdev->fmb != NULL when using these counters (function measurement can be toggled at runtime). Just move the software counters to struct zpci_dev. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
df3044f1ef
commit
6001018ae8
@ -44,10 +44,6 @@ struct zpci_fmb {
|
||||
u64 rpcit_ops;
|
||||
u64 dma_rbytes;
|
||||
u64 dma_wbytes;
|
||||
/* software counters */
|
||||
atomic64_t allocated_pages;
|
||||
atomic64_t mapped_pages;
|
||||
atomic64_t unmapped_pages;
|
||||
} __packed __aligned(16);
|
||||
|
||||
enum zpci_state {
|
||||
@ -111,6 +107,10 @@ struct zpci_dev {
|
||||
/* Function measurement block */
|
||||
struct zpci_fmb *fmb;
|
||||
u16 fmb_update; /* update interval */
|
||||
/* software counters */
|
||||
atomic64_t allocated_pages;
|
||||
atomic64_t mapped_pages;
|
||||
atomic64_t unmapped_pages;
|
||||
|
||||
enum pci_bus_speed max_bus_speed;
|
||||
|
||||
|
@ -190,6 +190,11 @@ int zpci_fmb_enable_device(struct zpci_dev *zdev)
|
||||
return -ENOMEM;
|
||||
WARN_ON((u64) zdev->fmb & 0xf);
|
||||
|
||||
/* reset software counters */
|
||||
atomic64_set(&zdev->allocated_pages, 0);
|
||||
atomic64_set(&zdev->mapped_pages, 0);
|
||||
atomic64_set(&zdev->unmapped_pages, 0);
|
||||
|
||||
args.fmb_addr = virt_to_phys(zdev->fmb);
|
||||
return mod_pci(zdev, ZPCI_MOD_FC_SET_MEASURE, 0, &args);
|
||||
}
|
||||
|
@ -31,12 +31,25 @@ static char *pci_perf_names[] = {
|
||||
"Refresh operations",
|
||||
"DMA read bytes",
|
||||
"DMA write bytes",
|
||||
/* software counters */
|
||||
};
|
||||
|
||||
static char *pci_sw_names[] = {
|
||||
"Allocated pages",
|
||||
"Mapped pages",
|
||||
"Unmapped pages",
|
||||
};
|
||||
|
||||
static void pci_sw_counter_show(struct seq_file *m)
|
||||
{
|
||||
struct zpci_dev *zdev = m->private;
|
||||
atomic64_t *counter = &zdev->allocated_pages;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pci_sw_names); i++, counter++)
|
||||
seq_printf(m, "%26s:\t%llu\n", pci_sw_names[i],
|
||||
atomic64_read(counter));
|
||||
}
|
||||
|
||||
static int pci_perf_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct zpci_dev *zdev = m->private;
|
||||
@ -63,12 +76,8 @@ static int pci_perf_show(struct seq_file *m, void *v)
|
||||
for (i = 4; i < 6; i++)
|
||||
seq_printf(m, "%26s:\t%llu\n",
|
||||
pci_perf_names[i], *(stat + i));
|
||||
/* software counters */
|
||||
for (i = 6; i < ARRAY_SIZE(pci_perf_names); i++)
|
||||
seq_printf(m, "%26s:\t%llu\n",
|
||||
pci_perf_names[i],
|
||||
atomic64_read((atomic64_t *) (stat + i)));
|
||||
|
||||
pci_sw_counter_show(m);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -300,7 +300,7 @@ static dma_addr_t s390_dma_map_pages(struct device *dev, struct page *page,
|
||||
flags |= ZPCI_TABLE_PROTECTED;
|
||||
|
||||
if (!dma_update_trans(zdev, pa, dma_addr, size, flags)) {
|
||||
atomic64_add(nr_pages, &zdev->fmb->mapped_pages);
|
||||
atomic64_add(nr_pages, &zdev->mapped_pages);
|
||||
return dma_addr + (offset & ~PAGE_MASK);
|
||||
}
|
||||
|
||||
@ -328,7 +328,7 @@ static void s390_dma_unmap_pages(struct device *dev, dma_addr_t dma_addr,
|
||||
zpci_err_hex(&dma_addr, sizeof(dma_addr));
|
||||
}
|
||||
|
||||
atomic64_add(npages, &zdev->fmb->unmapped_pages);
|
||||
atomic64_add(npages, &zdev->unmapped_pages);
|
||||
iommu_page_index = (dma_addr - zdev->start_dma) >> PAGE_SHIFT;
|
||||
dma_free_iommu(zdev, iommu_page_index, npages);
|
||||
}
|
||||
@ -357,7 +357,7 @@ static void *s390_dma_alloc(struct device *dev, size_t size,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
atomic64_add(size / PAGE_SIZE, &zdev->fmb->allocated_pages);
|
||||
atomic64_add(size / PAGE_SIZE, &zdev->allocated_pages);
|
||||
if (dma_handle)
|
||||
*dma_handle = map;
|
||||
return (void *) pa;
|
||||
@ -370,7 +370,7 @@ static void s390_dma_free(struct device *dev, size_t size,
|
||||
struct zpci_dev *zdev = get_zdev(to_pci_dev(dev));
|
||||
|
||||
size = PAGE_ALIGN(size);
|
||||
atomic64_sub(size / PAGE_SIZE, &zdev->fmb->allocated_pages);
|
||||
atomic64_sub(size / PAGE_SIZE, &zdev->allocated_pages);
|
||||
s390_dma_unmap_pages(dev, dma_handle, size, DMA_BIDIRECTIONAL, NULL);
|
||||
free_pages((unsigned long) pa, get_order(size));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user