mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
for-5.4/block-2019-09-16
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAl1/no0QHGF4Ym9lQGtl
cm5lbC5kawAKCRD301j7KXHgpmo9EACFXMbdNmEEUMyRSdOkVLlr7ZlTyQi1tLpB
YESDPxdBfybzpi0qa8JSaysGIfvSkSjmSAqBqrWPmASOSOL6CK4bbA4fTYbgPplk
XeHUdgGiG34oCQUn8Xil5reYaTm7I6LQWnWTpVa5fIhAyUYaGJL+987ykoGmpQmB
Dvf3YSc+8H0RTp9PCMVd6UCGPkZbVlLImGad3PF5ULvTEaE4RCXC2aiAgh0p1l5A
J2CkRZ+/mio3zN2O4YN7VdPGfr1Wo1iZ834xbIGLegv1miHXagFk7jwTcC7zIt5t
oSnJnqIg3iCe7SpWt4Bkzw/zy/2UqaspifbCMgw8vychlViVRUHFO5h85Yboo7kQ
OMLEQPcwjm6dTHv5h1iXF9LW1O7NoiYmmgvApU9uOo1HUrl1X7PZ3JEfUsVHxkOO
T4D5igf0Krsl1eAbiwEUQzy7vFZ8PlRHqrHgK+fkyotzHu1BJR7OQkYygEfGFOB/
EfMxplGDpmibYGuWCwDX2bPAmLV3SPUQENReHrfPJRDt5TD1UkFpVGv/PLLhbr0p
cLYI78DKpDSigBpVMmwq5nTYpnex33eyDTTA8C0sakcsdzdmU5qv30y3wm4nTiep
f6gZo6IMXwRg/rCgVVrd9SKQAr/8wEzVlsDW3qyi2pVT8sHIgm0tFv7paihXGdDV
xsKgmTrQQQ==
=Qt+h
-----END PGP SIGNATURE-----
Merge tag 'for-5.4/block-2019-09-16' of git://git.kernel.dk/linux-block
Pull block updates from Jens Axboe:
- Two NVMe pull requests:
- ana log parse fix from Anton
- nvme quirks support for Apple devices from Ben
- fix missing bio completion tracing for multipath stack devices
from Hannes and Mikhail
- IP TOS settings for nvme rdma and tcp transports from Israel
- rq_dma_dir cleanups from Israel
- tracing for Get LBA Status command from Minwoo
- Some nvme-tcp cleanups from Minwoo, Potnuri and Myself
- Some consolidation between the fabrics transports for handling
the CAP register
- reset race with ns scanning fix for fabrics (move fabrics
commands to a dedicated request queue with a different lifetime
from the admin request queue)."
- controller reset and namespace scan races fixes
- nvme discovery log change uevent support
- naming improvements from Keith
- multiple discovery controllers reject fix from James
- some regular cleanups from various people
- Series fixing (and re-fixing) null_blk debug printing and nr_devices
checks (André)
- A few pull requests from Song, with fixes from Andy, Guoqing,
Guilherme, Neil, Nigel, and Yufen.
- REQ_OP_ZONE_RESET_ALL support (Chaitanya)
- Bio merge handling unification (Christoph)
- Pick default elevator correctly for devices with special needs
(Damien)
- Block stats fixes (Hou)
- Timeout and support devices nbd fixes (Mike)
- Series fixing races around elevator switching and device add/remove
(Ming)
- sed-opal cleanups (Revanth)
- Per device weight support for BFQ (Fam)
- Support for blk-iocost, a new model that can properly account cost of
IO workloads. (Tejun)
- blk-cgroup writeback fixes (Tejun)
- paride queue init fixes (zhengbin)
- blk_set_runtime_active() cleanup (Stanley)
- Block segment mapping optimizations (Bart)
- lightnvm fixes (Hans/Minwoo/YueHaibing)
- Various little fixes and cleanups
* tag 'for-5.4/block-2019-09-16' of git://git.kernel.dk/linux-block: (186 commits)
null_blk: format pr_* logs with pr_fmt
null_blk: match the type of parameter nr_devices
null_blk: do not fail the module load with zero devices
block: also check RQF_STATS in blk_mq_need_time_stamp()
block: make rq sector size accessible for block stats
bfq: Fix bfq linkage error
raid5: use bio_end_sector in r5_next_bio
raid5: remove STRIPE_OPS_REQ_PENDING
md: add feature flag MD_FEATURE_RAID0_LAYOUT
md/raid0: avoid RAID0 data corruption due to layout confusion.
raid5: don't set STRIPE_HANDLE to stripe which is in batch list
raid5: don't increment read_errors on EILSEQ return
nvmet: fix a wrong error status returned in error log page
nvme: send discovery log page change events to userspace
nvme: add uevent variables for controller devices
nvme: enable aen regardless of the presence of I/O queues
nvme-fabrics: allow discovery subsystems accept a kato
nvmet: Use PTR_ERR_OR_ZERO() in nvmet_init_discovery()
nvme: Remove redundant assignment of cq vector
nvme: Assign subsys instance from first ctrl
...
This commit is contained in:
commit
7ad67ca553
107 changed files with 5895 additions and 1283 deletions
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>
|
||||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in a new issue