#undef TRACE_SYSTEM #define TRACE_SYSTEM wbt #if !defined(_TRACE_WBT_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_WBT_H #include #include "../../../block/blk-wbt.h" /** * wbt_stat - trace stats for blk_wb * @stat: array of read/write stats */ TRACE_EVENT(wbt_stat, TP_PROTO(struct backing_dev_info *bdi, struct blk_rq_stat *stat), TP_ARGS(bdi, stat), TP_STRUCT__entry( __array(char, name, 32) __field(s64, rmean) __field(u64, rmin) __field(u64, rmax) __field(s64, rnr_samples) __field(s64, rtime) __field(s64, wmean) __field(u64, wmin) __field(u64, wmax) __field(s64, wnr_samples) __field(s64, wtime) ), TP_fast_assign( strncpy(__entry->name, dev_name(bdi->dev), 32); __entry->rmean = stat[0].mean; __entry->rmin = stat[0].min; __entry->rmax = stat[0].max; __entry->rnr_samples = stat[0].nr_samples; __entry->wmean = stat[1].mean; __entry->wmin = stat[1].min; __entry->wmax = stat[1].max; __entry->wnr_samples = stat[1].nr_samples; ), TP_printk("%s: rmean=%llu, rmin=%llu, rmax=%llu, rsamples=%llu, " "wmean=%llu, wmin=%llu, wmax=%llu, wsamples=%llu\n", __entry->name, __entry->rmean, __entry->rmin, __entry->rmax, __entry->rnr_samples, __entry->wmean, __entry->wmin, __entry->wmax, __entry->wnr_samples) ); /** * wbt_lat - trace latency event * @lat: latency trigger */ TRACE_EVENT(wbt_lat, TP_PROTO(struct backing_dev_info *bdi, unsigned long lat), TP_ARGS(bdi, lat), TP_STRUCT__entry( __array(char, name, 32) __field(unsigned long, lat) ), TP_fast_assign( strncpy(__entry->name, dev_name(bdi->dev), 32); __entry->lat = div_u64(lat, 1000); ), TP_printk("%s: latency %lluus\n", __entry->name, (unsigned long long) __entry->lat) ); /** * wbt_step - trace wb event step * @msg: context message * @step: the current scale step count * @window: the current monitoring window * @bg: the current background queue limit * @normal: the current normal writeback limit * @max: the current max throughput writeback limit */ TRACE_EVENT(wbt_step, TP_PROTO(struct backing_dev_info *bdi, const char *msg, int step, unsigned long window, unsigned int bg, unsigned int normal, unsigned int max), TP_ARGS(bdi, msg, step, window, bg, normal, max), TP_STRUCT__entry( __array(char, name, 32) __field(const char *, msg) __field(int, step) __field(unsigned long, window) __field(unsigned int, bg) __field(unsigned int, normal) __field(unsigned int, max) ), TP_fast_assign( strncpy(__entry->name, dev_name(bdi->dev), 32); __entry->msg = msg; __entry->step = step; __entry->window = div_u64(window, 1000); __entry->bg = bg; __entry->normal = normal; __entry->max = max; ), TP_printk("%s: %s: step=%d, window=%luus, background=%u, normal=%u, max=%u\n", __entry->name, __entry->msg, __entry->step, __entry->window, __entry->bg, __entry->normal, __entry->max) ); /** * wbt_timer - trace wb timer event * @status: timer state status * @step: the current scale step count * @inflight: tracked writes inflight */ TRACE_EVENT(wbt_timer, TP_PROTO(struct backing_dev_info *bdi, unsigned int status, int step, unsigned int inflight), TP_ARGS(bdi, status, step, inflight), TP_STRUCT__entry( __array(char, name, 32) __field(unsigned int, status) __field(int, step) __field(unsigned int, inflight) ), TP_fast_assign( strncpy(__entry->name, dev_name(bdi->dev), 32); __entry->status = status; __entry->step = step; __entry->inflight = inflight; ), TP_printk("%s: status=%u, step=%d, inflight=%u\n", __entry->name, __entry->status, __entry->step, __entry->inflight) ); #endif /* _TRACE_WBT_H */ /* This part must be outside protection */ #include n>space:mode:
authorTejun Heo <tj@kernel.org>2017-01-26 16:47:28 -0500
committerTejun Heo <tj@kernel.org>2017-01-26 16:47:28 -0500
commit07cd12945551b63ecb1a349d50a6d69d1d6feb4a (patch)
tree75f65eba7eac9277971082a2d5a4cf1370562c0c /drivers/usb/renesas_usbhs/fifo.c
parent7ce7d89f48834cefece7804d38fc5d85382edf77 (diff)
cgroup: don't online subsystems before cgroup_name/path() are operational
While refactoring cgroup creation, a5bca2152036 ("cgroup: factor out cgroup_create() out of cgroup_mkdir()") incorrectly onlined subsystems before the new cgroup is associated with it kernfs_node. This is fine for cgroup proper but cgroup_name/path() depend on the associated kernfs_node and if a subsystem makes the new cgroup_subsys_state visible, which they're allowed to after onlining, it can lead to NULL dereference. The current code performs cgroup creation and subsystem onlining in cgroup_create() and cgroup_mkdir() makes the cgroup and subsystems visible afterwards. There's no reason to online the subsystems early and we can simply drop cgroup_apply_control_enable() call from cgroup_create() so that the subsystems are onlined and made visible at the same time. Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru> Fixes: a5bca2152036 ("cgroup: factor out cgroup_create() out of cgroup_mkdir()") Cc: stable@vger.kernel.org # v4.6+
Diffstat (limited to 'drivers/usb/renesas_usbhs/fifo.c')