mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 21:19:04 -04:00
Merge Linus's 5.4-rc1-prerelease branch into android-mainline
This merges Linus's tree as of commit b41dae061b ("Merge tag
'xfs-5.4-merge-7' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux")
into android-mainline.
This "early" merge makes it easier to test and handle merge conflicts
instead of having to wait until the "end" of the merge window and handle
all 10000+ commits at once.
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I6bebf55e5e2353f814e3c87f5033607b1ae5d812
This commit is contained in:
commit
bfa0399bc8
7251 changed files with 334804 additions and 222478 deletions
|
|
@ -1088,6 +1088,7 @@ TRACE_EVENT(btrfs_trigger_flush,
|
|||
{ FLUSH_DELAYED_REFS, "FLUSH_ELAYED_REFS"}, \
|
||||
{ ALLOC_CHUNK, "ALLOC_CHUNK"}, \
|
||||
{ ALLOC_CHUNK_FORCE, "ALLOC_CHUNK_FORCE"}, \
|
||||
{ RUN_DELAYED_IPUTS, "RUN_DELAYED_IPUTS"}, \
|
||||
{ COMMIT_TRANS, "COMMIT_TRANS"})
|
||||
|
||||
TRACE_EVENT(btrfs_flush_space,
|
||||
|
|
@ -2086,8 +2087,6 @@ DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock);
|
|||
DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_unlock_blocking);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_read);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_set_lock_blocking_write);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_clear_lock_blocking_read);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_clear_lock_blocking_write);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_read_lock);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_try_tree_write_lock);
|
||||
DEFINE_BTRFS_LOCK_EVENT(btrfs_tree_read_lock_atomic);
|
||||
|
|
|
|||
259
include/trace/events/erofs.h
Normal file
259
include/trace/events/erofs.h
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM erofs
|
||||
|
||||
#if !defined(_TRACE_EROFS_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_EROFS_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
struct erofs_map_blocks;
|
||||
|
||||
#define show_dev(dev) MAJOR(dev), MINOR(dev)
|
||||
#define show_dev_nid(entry) show_dev(entry->dev), entry->nid
|
||||
|
||||
#define show_file_type(type) \
|
||||
__print_symbolic(type, \
|
||||
{ 0, "FILE" }, \
|
||||
{ 1, "DIR" })
|
||||
|
||||
#define show_map_flags(flags) __print_flags(flags, "|", \
|
||||
{ EROFS_GET_BLOCKS_RAW, "RAW" })
|
||||
|
||||
#define show_mflags(flags) __print_flags(flags, "", \
|
||||
{ EROFS_MAP_MAPPED, "M" }, \
|
||||
{ EROFS_MAP_META, "I" }, \
|
||||
{ EROFS_MAP_ZIPPED, "Z" })
|
||||
|
||||
TRACE_EVENT(erofs_lookup,
|
||||
|
||||
TP_PROTO(struct inode *dir, struct dentry *dentry, unsigned int flags),
|
||||
|
||||
TP_ARGS(dir, dentry, flags),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev )
|
||||
__field(erofs_nid_t, nid )
|
||||
__field(const char *, name )
|
||||
__field(unsigned int, flags )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = dir->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(dir)->nid;
|
||||
__entry->name = dentry->d_name.name;
|
||||
__entry->flags = flags;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), pnid = %llu, name:%s, flags:%x",
|
||||
show_dev_nid(__entry),
|
||||
__entry->name,
|
||||
__entry->flags)
|
||||
);
|
||||
|
||||
TRACE_EVENT(erofs_fill_inode,
|
||||
TP_PROTO(struct inode *inode, int isdir),
|
||||
TP_ARGS(inode, isdir),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev )
|
||||
__field(erofs_nid_t, nid )
|
||||
__field(erofs_blk_t, blkaddr )
|
||||
__field(unsigned int, ofs )
|
||||
__field(int, isdir )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(inode)->nid;
|
||||
__entry->blkaddr = erofs_blknr(iloc(EROFS_I_SB(inode), __entry->nid));
|
||||
__entry->ofs = erofs_blkoff(iloc(EROFS_I_SB(inode), __entry->nid));
|
||||
__entry->isdir = isdir;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu, blkaddr %u ofs %u, isdir %d",
|
||||
show_dev_nid(__entry),
|
||||
__entry->blkaddr, __entry->ofs,
|
||||
__entry->isdir)
|
||||
);
|
||||
|
||||
TRACE_EVENT(erofs_readpage,
|
||||
|
||||
TP_PROTO(struct page *page, bool raw),
|
||||
|
||||
TP_ARGS(page, raw),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev )
|
||||
__field(erofs_nid_t, nid )
|
||||
__field(int, dir )
|
||||
__field(pgoff_t, index )
|
||||
__field(int, uptodate)
|
||||
__field(bool, raw )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = page->mapping->host->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(page->mapping->host)->nid;
|
||||
__entry->dir = S_ISDIR(page->mapping->host->i_mode);
|
||||
__entry->index = page->index;
|
||||
__entry->uptodate = PageUptodate(page);
|
||||
__entry->raw = raw;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu, %s, index = %lu, uptodate = %d "
|
||||
"raw = %d",
|
||||
show_dev_nid(__entry),
|
||||
show_file_type(__entry->dir),
|
||||
(unsigned long)__entry->index,
|
||||
__entry->uptodate,
|
||||
__entry->raw)
|
||||
);
|
||||
|
||||
TRACE_EVENT(erofs_readpages,
|
||||
|
||||
TP_PROTO(struct inode *inode, struct page *page, unsigned int nrpage,
|
||||
bool raw),
|
||||
|
||||
TP_ARGS(inode, page, nrpage, raw),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev )
|
||||
__field(erofs_nid_t, nid )
|
||||
__field(pgoff_t, start )
|
||||
__field(unsigned int, nrpage )
|
||||
__field(bool, raw )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(inode)->nid;
|
||||
__entry->start = page->index;
|
||||
__entry->nrpage = nrpage;
|
||||
__entry->raw = raw;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu, start = %lu nrpage = %u raw = %d",
|
||||
show_dev_nid(__entry),
|
||||
(unsigned long)__entry->start,
|
||||
__entry->nrpage,
|
||||
__entry->raw)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(erofs__map_blocks_enter,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned int flags),
|
||||
|
||||
TP_ARGS(inode, map, flags),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( erofs_nid_t, nid )
|
||||
__field( erofs_off_t, la )
|
||||
__field( u64, llen )
|
||||
__field( unsigned int, flags )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(inode)->nid;
|
||||
__entry->la = map->m_la;
|
||||
__entry->llen = map->m_llen;
|
||||
__entry->flags = flags;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu, la %llu llen %llu flags %s",
|
||||
show_dev_nid(__entry),
|
||||
__entry->la, __entry->llen,
|
||||
__entry->flags ? show_map_flags(__entry->flags) : "NULL")
|
||||
);
|
||||
|
||||
DEFINE_EVENT(erofs__map_blocks_enter, erofs_map_blocks_flatmode_enter,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned flags),
|
||||
|
||||
TP_ARGS(inode, map, flags)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(erofs__map_blocks_enter, z_erofs_map_blocks_iter_enter,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned int flags),
|
||||
|
||||
TP_ARGS(inode, map, flags)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(erofs__map_blocks_exit,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned int flags, int ret),
|
||||
|
||||
TP_ARGS(inode, map, flags, ret),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( erofs_nid_t, nid )
|
||||
__field( unsigned int, flags )
|
||||
__field( erofs_off_t, la )
|
||||
__field( erofs_off_t, pa )
|
||||
__field( u64, llen )
|
||||
__field( u64, plen )
|
||||
__field( unsigned int, mflags )
|
||||
__field( int, ret )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(inode)->nid;
|
||||
__entry->flags = flags;
|
||||
__entry->la = map->m_la;
|
||||
__entry->pa = map->m_pa;
|
||||
__entry->llen = map->m_llen;
|
||||
__entry->plen = map->m_plen;
|
||||
__entry->mflags = map->m_flags;
|
||||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu, flags %s "
|
||||
"la %llu pa %llu llen %llu plen %llu mflags %s ret %d",
|
||||
show_dev_nid(__entry),
|
||||
__entry->flags ? show_map_flags(__entry->flags) : "NULL",
|
||||
__entry->la, __entry->pa, __entry->llen, __entry->plen,
|
||||
show_mflags(__entry->mflags), __entry->ret)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(erofs__map_blocks_exit, erofs_map_blocks_flatmode_exit,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned flags, int ret),
|
||||
|
||||
TP_ARGS(inode, map, flags, ret)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(erofs__map_blocks_exit, z_erofs_map_blocks_iter_exit,
|
||||
TP_PROTO(struct inode *inode, struct erofs_map_blocks *map,
|
||||
unsigned int flags, int ret),
|
||||
|
||||
TP_ARGS(inode, map, flags, ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(erofs_destroy_inode,
|
||||
TP_PROTO(struct inode *inode),
|
||||
|
||||
TP_ARGS(inode),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( erofs_nid_t, nid )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->nid = EROFS_I(inode)->nid;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), nid = %llu", show_dev_nid(__entry))
|
||||
);
|
||||
|
||||
#endif /* _TRACE_EROFS_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
@ -176,7 +176,7 @@ TRACE_EVENT(generic_add_lease,
|
|||
TP_STRUCT__entry(
|
||||
__field(unsigned long, i_ino)
|
||||
__field(int, wcount)
|
||||
__field(int, dcount)
|
||||
__field(int, rcount)
|
||||
__field(int, icount)
|
||||
__field(dev_t, s_dev)
|
||||
__field(fl_owner_t, fl_owner)
|
||||
|
|
@ -188,16 +188,16 @@ TRACE_EVENT(generic_add_lease,
|
|||
__entry->s_dev = inode->i_sb->s_dev;
|
||||
__entry->i_ino = inode->i_ino;
|
||||
__entry->wcount = atomic_read(&inode->i_writecount);
|
||||
__entry->dcount = d_count(fl->fl_file->f_path.dentry);
|
||||
__entry->rcount = atomic_read(&inode->i_readcount);
|
||||
__entry->icount = atomic_read(&inode->i_count);
|
||||
__entry->fl_owner = fl ? fl->fl_owner : NULL;
|
||||
__entry->fl_flags = fl ? fl->fl_flags : 0;
|
||||
__entry->fl_type = fl ? fl->fl_type : 0;
|
||||
__entry->fl_owner = fl->fl_owner;
|
||||
__entry->fl_flags = fl->fl_flags;
|
||||
__entry->fl_type = fl->fl_type;
|
||||
),
|
||||
|
||||
TP_printk("dev=0x%x:0x%x ino=0x%lx wcount=%d dcount=%d icount=%d fl_owner=0x%p fl_flags=%s fl_type=%s",
|
||||
TP_printk("dev=0x%x:0x%x ino=0x%lx wcount=%d rcount=%d icount=%d fl_owner=0x%p fl_flags=%s fl_type=%s",
|
||||
MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
|
||||
__entry->i_ino, __entry->wcount, __entry->dcount,
|
||||
__entry->i_ino, __entry->wcount, __entry->rcount,
|
||||
__entry->icount, __entry->fl_owner,
|
||||
show_fl_flags(__entry->fl_flags),
|
||||
show_fl_type(__entry->fl_type))
|
||||
|
|
|
|||
106
include/trace/events/intel_iommu.h
Normal file
106
include/trace/events/intel_iommu.h
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Intel IOMMU trace support
|
||||
*
|
||||
* Copyright (C) 2019 Intel Corporation
|
||||
*
|
||||
* Author: Lu Baolu <baolu.lu@linux.intel.com>
|
||||
*/
|
||||
#ifdef CONFIG_INTEL_IOMMU
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM intel_iommu
|
||||
|
||||
#if !defined(_TRACE_INTEL_IOMMU_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_INTEL_IOMMU_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include <linux/intel-iommu.h>
|
||||
|
||||
DECLARE_EVENT_CLASS(dma_map,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, phys_addr_t phys_addr,
|
||||
size_t size),
|
||||
|
||||
TP_ARGS(dev, dev_addr, phys_addr, size),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__string(dev_name, dev_name(dev))
|
||||
__field(dma_addr_t, dev_addr)
|
||||
__field(phys_addr_t, phys_addr)
|
||||
__field(size_t, size)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(dev_name, dev_name(dev));
|
||||
__entry->dev_addr = dev_addr;
|
||||
__entry->phys_addr = phys_addr;
|
||||
__entry->size = size;
|
||||
),
|
||||
|
||||
TP_printk("dev=%s dev_addr=0x%llx phys_addr=0x%llx size=%zu",
|
||||
__get_str(dev_name),
|
||||
(unsigned long long)__entry->dev_addr,
|
||||
(unsigned long long)__entry->phys_addr,
|
||||
__entry->size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_map, map_single,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, phys_addr_t phys_addr,
|
||||
size_t size),
|
||||
TP_ARGS(dev, dev_addr, phys_addr, size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_map, map_sg,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, phys_addr_t phys_addr,
|
||||
size_t size),
|
||||
TP_ARGS(dev, dev_addr, phys_addr, size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_map, bounce_map_single,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, phys_addr_t phys_addr,
|
||||
size_t size),
|
||||
TP_ARGS(dev, dev_addr, phys_addr, size)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(dma_unmap,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, size_t size),
|
||||
|
||||
TP_ARGS(dev, dev_addr, size),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__string(dev_name, dev_name(dev))
|
||||
__field(dma_addr_t, dev_addr)
|
||||
__field(size_t, size)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(dev_name, dev_name(dev));
|
||||
__entry->dev_addr = dev_addr;
|
||||
__entry->size = size;
|
||||
),
|
||||
|
||||
TP_printk("dev=%s dev_addr=0x%llx size=%zu",
|
||||
__get_str(dev_name),
|
||||
(unsigned long long)__entry->dev_addr,
|
||||
__entry->size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_unmap, unmap_single,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, size_t size),
|
||||
TP_ARGS(dev, dev_addr, size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_unmap, unmap_sg,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, size_t size),
|
||||
TP_ARGS(dev, dev_addr, size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(dma_unmap, bounce_unmap_single,
|
||||
TP_PROTO(struct device *dev, dma_addr_t dev_addr, size_t size),
|
||||
TP_ARGS(dev, dev_addr, size)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_INTEL_IOMMU_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
#endif /* CONFIG_INTEL_IOMMU */
|
||||
178
include/trace/events/iocost.h
Normal file
178
include/trace/events/iocost.h
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM iocost
|
||||
|
||||
struct ioc;
|
||||
struct ioc_now;
|
||||
struct ioc_gq;
|
||||
|
||||
#if !defined(_TRACE_BLK_IOCOST_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_BLK_IOCOST_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
TRACE_EVENT(iocost_iocg_activate,
|
||||
|
||||
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
|
||||
u64 last_period, u64 cur_period, u64 vtime),
|
||||
|
||||
TP_ARGS(iocg, path, now, last_period, cur_period, vtime),
|
||||
|
||||
TP_STRUCT__entry (
|
||||
__string(devname, ioc_name(iocg->ioc))
|
||||
__string(cgroup, path)
|
||||
__field(u64, now)
|
||||
__field(u64, vnow)
|
||||
__field(u64, vrate)
|
||||
__field(u64, last_period)
|
||||
__field(u64, cur_period)
|
||||
__field(u64, last_vtime)
|
||||
__field(u64, vtime)
|
||||
__field(u32, weight)
|
||||
__field(u32, inuse)
|
||||
__field(u64, hweight_active)
|
||||
__field(u64, hweight_inuse)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(devname, ioc_name(iocg->ioc));
|
||||
__assign_str(cgroup, path);
|
||||
__entry->now = now->now;
|
||||
__entry->vnow = now->vnow;
|
||||
__entry->vrate = now->vrate;
|
||||
__entry->last_period = last_period;
|
||||
__entry->cur_period = cur_period;
|
||||
__entry->last_vtime = iocg->last_vtime;
|
||||
__entry->vtime = vtime;
|
||||
__entry->weight = iocg->weight;
|
||||
__entry->inuse = iocg->inuse;
|
||||
__entry->hweight_active = iocg->hweight_active;
|
||||
__entry->hweight_inuse = iocg->hweight_inuse;
|
||||
),
|
||||
|
||||
TP_printk("[%s:%s] now=%llu:%llu vrate=%llu "
|
||||
"period=%llu->%llu vtime=%llu->%llu "
|
||||
"weight=%u/%u hweight=%llu/%llu",
|
||||
__get_str(devname), __get_str(cgroup),
|
||||
__entry->now, __entry->vnow, __entry->vrate,
|
||||
__entry->last_period, __entry->cur_period,
|
||||
__entry->last_vtime, __entry->vtime,
|
||||
__entry->inuse, __entry->weight,
|
||||
__entry->hweight_inuse, __entry->hweight_active
|
||||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(iocg_inuse_update,
|
||||
|
||||
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
|
||||
u32 old_inuse, u32 new_inuse,
|
||||
u64 old_hw_inuse, u64 new_hw_inuse),
|
||||
|
||||
TP_ARGS(iocg, path, now, old_inuse, new_inuse,
|
||||
old_hw_inuse, new_hw_inuse),
|
||||
|
||||
TP_STRUCT__entry (
|
||||
__string(devname, ioc_name(iocg->ioc))
|
||||
__string(cgroup, path)
|
||||
__field(u64, now)
|
||||
__field(u32, old_inuse)
|
||||
__field(u32, new_inuse)
|
||||
__field(u64, old_hweight_inuse)
|
||||
__field(u64, new_hweight_inuse)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(devname, ioc_name(iocg->ioc));
|
||||
__assign_str(cgroup, path);
|
||||
__entry->now = now->now;
|
||||
__entry->old_inuse = old_inuse;
|
||||
__entry->new_inuse = new_inuse;
|
||||
__entry->old_hweight_inuse = old_hw_inuse;
|
||||
__entry->new_hweight_inuse = new_hw_inuse;
|
||||
),
|
||||
|
||||
TP_printk("[%s:%s] now=%llu inuse=%u->%u hw_inuse=%llu->%llu",
|
||||
__get_str(devname), __get_str(cgroup), __entry->now,
|
||||
__entry->old_inuse, __entry->new_inuse,
|
||||
__entry->old_hweight_inuse, __entry->new_hweight_inuse
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(iocg_inuse_update, iocost_inuse_takeback,
|
||||
|
||||
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
|
||||
u32 old_inuse, u32 new_inuse,
|
||||
u64 old_hw_inuse, u64 new_hw_inuse),
|
||||
|
||||
TP_ARGS(iocg, path, now, old_inuse, new_inuse,
|
||||
old_hw_inuse, new_hw_inuse)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(iocg_inuse_update, iocost_inuse_giveaway,
|
||||
|
||||
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
|
||||
u32 old_inuse, u32 new_inuse,
|
||||
u64 old_hw_inuse, u64 new_hw_inuse),
|
||||
|
||||
TP_ARGS(iocg, path, now, old_inuse, new_inuse,
|
||||
old_hw_inuse, new_hw_inuse)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(iocg_inuse_update, iocost_inuse_reset,
|
||||
|
||||
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
|
||||
u32 old_inuse, u32 new_inuse,
|
||||
u64 old_hw_inuse, u64 new_hw_inuse),
|
||||
|
||||
TP_ARGS(iocg, path, now, old_inuse, new_inuse,
|
||||
old_hw_inuse, new_hw_inuse)
|
||||
);
|
||||
|
||||
TRACE_EVENT(iocost_ioc_vrate_adj,
|
||||
|
||||
TP_PROTO(struct ioc *ioc, u64 new_vrate, u32 (*missed_ppm)[2],
|
||||
u32 rq_wait_pct, int nr_lagging, int nr_shortages,
|
||||
int nr_surpluses),
|
||||
|
||||
TP_ARGS(ioc, new_vrate, missed_ppm, rq_wait_pct, nr_lagging, nr_shortages,
|
||||
nr_surpluses),
|
||||
|
||||
TP_STRUCT__entry (
|
||||
__string(devname, ioc_name(ioc))
|
||||
__field(u64, old_vrate)
|
||||
__field(u64, new_vrate)
|
||||
__field(int, busy_level)
|
||||
__field(u32, read_missed_ppm)
|
||||
__field(u32, write_missed_ppm)
|
||||
__field(u32, rq_wait_pct)
|
||||
__field(int, nr_lagging)
|
||||
__field(int, nr_shortages)
|
||||
__field(int, nr_surpluses)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(devname, ioc_name(ioc));
|
||||
__entry->old_vrate = atomic64_read(&ioc->vtime_rate);;
|
||||
__entry->new_vrate = new_vrate;
|
||||
__entry->busy_level = ioc->busy_level;
|
||||
__entry->read_missed_ppm = (*missed_ppm)[READ];
|
||||
__entry->write_missed_ppm = (*missed_ppm)[WRITE];
|
||||
__entry->rq_wait_pct = rq_wait_pct;
|
||||
__entry->nr_lagging = nr_lagging;
|
||||
__entry->nr_shortages = nr_shortages;
|
||||
__entry->nr_surpluses = nr_surpluses;
|
||||
),
|
||||
|
||||
TP_printk("[%s] vrate=%llu->%llu busy=%d missed_ppm=%u:%u rq_wait_pct=%u lagging=%d shortages=%d surpluses=%d",
|
||||
__get_str(devname), __entry->old_vrate, __entry->new_vrate,
|
||||
__entry->busy_level,
|
||||
__entry->read_missed_ppm, __entry->write_missed_ppm,
|
||||
__entry->rq_wait_pct, __entry->nr_lagging, __entry->nr_shortages,
|
||||
__entry->nr_surpluses
|
||||
)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_BLK_IOCOST_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
@ -379,9 +379,7 @@ DECLARE_EVENT_CLASS(pm_qos_request,
|
|||
|
||||
TP_printk("pm_qos_class=%s value=%d",
|
||||
__print_symbolic(__entry->pm_qos_class,
|
||||
{ PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
|
||||
{ PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
|
||||
{ PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
|
||||
{ PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" }),
|
||||
__entry->value)
|
||||
);
|
||||
|
||||
|
|
@ -426,9 +424,7 @@ TRACE_EVENT(pm_qos_update_request_timeout,
|
|||
|
||||
TP_printk("pm_qos_class=%s value=%d, timeout_us=%ld",
|
||||
__print_symbolic(__entry->pm_qos_class,
|
||||
{ PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" },
|
||||
{ PM_QOS_NETWORK_LATENCY, "NETWORK_LATENCY" },
|
||||
{ PM_QOS_NETWORK_THROUGHPUT, "NETWORK_THROUGHPUT" }),
|
||||
{ PM_QOS_CPU_DMA_LATENCY, "CPU_DMA_LATENCY" }),
|
||||
__entry->value, __entry->timeout_us)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -100,7 +100,6 @@ TRACE_EVENT_RCU(rcu_grace_period,
|
|||
* "Startedroot": Requested a nocb grace period based on root-node data.
|
||||
* "NoGPkthread": The RCU grace-period kthread has not yet started.
|
||||
* "StartWait": Start waiting for the requested grace period.
|
||||
* "ResumeWait": Resume waiting after signal.
|
||||
* "EndWait": Complete wait.
|
||||
* "Cleanup": Clean up rcu_node structure after previous GP.
|
||||
* "CleanupMore": Clean up, and another GP is needed.
|
||||
|
|
@ -267,7 +266,8 @@ TRACE_EVENT_RCU(rcu_exp_funnel_lock,
|
|||
* "WakeNotPoll": Don't wake rcuo kthread because it is polling.
|
||||
* "DeferredWake": Carried out the "IsDeferred" wakeup.
|
||||
* "Poll": Start of new polling cycle for rcu_nocb_poll.
|
||||
* "Sleep": Sleep waiting for CBs for !rcu_nocb_poll.
|
||||
* "Sleep": Sleep waiting for GP for !rcu_nocb_poll.
|
||||
* "CBSleep": Sleep waiting for CBs for !rcu_nocb_poll.
|
||||
* "WokeEmpty": rcuo kthread woke to find empty list.
|
||||
* "WokeNonEmpty": rcuo kthread woke to find non-empty list.
|
||||
* "WaitQueue": Enqueue partially done, timed wait for it to complete.
|
||||
|
|
|
|||
|
|
@ -176,6 +176,132 @@ static inline unsigned int __trace_wbc_assign_cgroup(struct writeback_control *w
|
|||
#endif /* CONFIG_CGROUP_WRITEBACK */
|
||||
#endif /* CREATE_TRACE_POINTS */
|
||||
|
||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||
TRACE_EVENT(inode_foreign_history,
|
||||
|
||||
TP_PROTO(struct inode *inode, struct writeback_control *wbc,
|
||||
unsigned int history),
|
||||
|
||||
TP_ARGS(inode, wbc, history),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array(char, name, 32)
|
||||
__field(unsigned long, ino)
|
||||
__field(unsigned int, cgroup_ino)
|
||||
__field(unsigned int, history)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strncpy(__entry->name, dev_name(inode_to_bdi(inode)->dev), 32);
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->cgroup_ino = __trace_wbc_assign_cgroup(wbc);
|
||||
__entry->history = history;
|
||||
),
|
||||
|
||||
TP_printk("bdi %s: ino=%lu cgroup_ino=%u history=0x%x",
|
||||
__entry->name,
|
||||
__entry->ino,
|
||||
__entry->cgroup_ino,
|
||||
__entry->history
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(inode_switch_wbs,
|
||||
|
||||
TP_PROTO(struct inode *inode, struct bdi_writeback *old_wb,
|
||||
struct bdi_writeback *new_wb),
|
||||
|
||||
TP_ARGS(inode, old_wb, new_wb),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array(char, name, 32)
|
||||
__field(unsigned long, ino)
|
||||
__field(unsigned int, old_cgroup_ino)
|
||||
__field(unsigned int, new_cgroup_ino)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strncpy(__entry->name, dev_name(old_wb->bdi->dev), 32);
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->old_cgroup_ino = __trace_wb_assign_cgroup(old_wb);
|
||||
__entry->new_cgroup_ino = __trace_wb_assign_cgroup(new_wb);
|
||||
),
|
||||
|
||||
TP_printk("bdi %s: ino=%lu old_cgroup_ino=%u new_cgroup_ino=%u",
|
||||
__entry->name,
|
||||
__entry->ino,
|
||||
__entry->old_cgroup_ino,
|
||||
__entry->new_cgroup_ino
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(track_foreign_dirty,
|
||||
|
||||
TP_PROTO(struct page *page, struct bdi_writeback *wb),
|
||||
|
||||
TP_ARGS(page, wb),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array(char, name, 32)
|
||||
__field(u64, bdi_id)
|
||||
__field(unsigned long, ino)
|
||||
__field(unsigned int, memcg_id)
|
||||
__field(unsigned int, cgroup_ino)
|
||||
__field(unsigned int, page_cgroup_ino)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
struct address_space *mapping = page_mapping(page);
|
||||
struct inode *inode = mapping ? mapping->host : NULL;
|
||||
|
||||
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
|
||||
__entry->bdi_id = wb->bdi->id;
|
||||
__entry->ino = inode ? inode->i_ino : 0;
|
||||
__entry->memcg_id = wb->memcg_css->id;
|
||||
__entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
|
||||
__entry->page_cgroup_ino = page->mem_cgroup->css.cgroup->kn->id.ino;
|
||||
),
|
||||
|
||||
TP_printk("bdi %s[%llu]: ino=%lu memcg_id=%u cgroup_ino=%u page_cgroup_ino=%u",
|
||||
__entry->name,
|
||||
__entry->bdi_id,
|
||||
__entry->ino,
|
||||
__entry->memcg_id,
|
||||
__entry->cgroup_ino,
|
||||
__entry->page_cgroup_ino
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(flush_foreign,
|
||||
|
||||
TP_PROTO(struct bdi_writeback *wb, unsigned int frn_bdi_id,
|
||||
unsigned int frn_memcg_id),
|
||||
|
||||
TP_ARGS(wb, frn_bdi_id, frn_memcg_id),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__array(char, name, 32)
|
||||
__field(unsigned int, cgroup_ino)
|
||||
__field(unsigned int, frn_bdi_id)
|
||||
__field(unsigned int, frn_memcg_id)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
|
||||
__entry->cgroup_ino = __trace_wb_assign_cgroup(wb);
|
||||
__entry->frn_bdi_id = frn_bdi_id;
|
||||
__entry->frn_memcg_id = frn_memcg_id;
|
||||
),
|
||||
|
||||
TP_printk("bdi %s: cgroup_ino=%u frn_bdi_id=%u frn_memcg_id=%u",
|
||||
__entry->name,
|
||||
__entry->cgroup_ino,
|
||||
__entry->frn_bdi_id,
|
||||
__entry->frn_memcg_id
|
||||
)
|
||||
);
|
||||
#endif
|
||||
|
||||
DECLARE_EVENT_CLASS(writeback_write_inode_template,
|
||||
|
||||
TP_PROTO(struct inode *inode, struct writeback_control *wbc),
|
||||
|
|
|
|||
|
|
@ -175,7 +175,8 @@ struct _bpf_dtab_netdev {
|
|||
#endif /* __DEVMAP_OBJ_TYPE */
|
||||
|
||||
#define devmap_ifindex(fwd, map) \
|
||||
((map->map_type == BPF_MAP_TYPE_DEVMAP) ? \
|
||||
((map->map_type == BPF_MAP_TYPE_DEVMAP || \
|
||||
map->map_type == BPF_MAP_TYPE_DEVMAP_HASH) ? \
|
||||
((struct _bpf_dtab_netdev *)fwd)->dev->ifindex : 0)
|
||||
|
||||
#define _trace_xdp_redirect_map(dev, xdp, fwd, map, idx) \
|
||||
|
|
|
|||
Loading…
Reference in a new issue