[Intel-gfx] [PATCH 3/7] drm/i915/perf: only append status when data is available
kbuild test robot
lkp at intel.com
Wed Jan 16 22:40:28 UTC 2019
Hi Lionel,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on v5.0-rc2 next-20190116]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Lionel-Landwerlin/drm-i915-perf-rework-aging-tail-workaround/20190117-000149
base: git://anongit.freedesktop.org/drm-intel for-linux-next
reproduce: make htmldocs
All warnings (new ones prefixed by >>):
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.cb' not described in 'dma_buf'
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.poll' not described in 'dma_buf'
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_excl.active' not described in 'dma_buf'
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.cb' not described in 'dma_buf'
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.poll' not described in 'dma_buf'
include/linux/dma-buf.h:304: warning: Function parameter or member 'cb_shared.active' not described in 'dma_buf'
include/linux/dma-fence-array.h:54: warning: Function parameter or member 'work' not described in 'dma_fence_array'
include/linux/firmware/intel/stratix10-svc-client.h:1: warning: no structured comments found
include/linux/gpio/driver.h:371: warning: Function parameter or member 'init_valid_mask' not described in 'gpio_chip'
include/linux/iio/hw-consumer.h:1: warning: no structured comments found
include/linux/input/sparse-keymap.h:46: warning: Function parameter or member 'sw' not described in 'key_entry'
drivers/mtd/nand/raw/nand_base.c:420: warning: Function parameter or member 'chip' not described in 'nand_fill_oob'
drivers/mtd/nand/raw/nand_bbt.c:173: warning: Function parameter or member 'this' not described in 'read_bbt'
drivers/mtd/nand/raw/nand_bbt.c:173: warning: Excess function parameter 'chip' description in 'read_bbt'
include/linux/regulator/machine.h:199: warning: Function parameter or member 'max_uV_step' not described in 'regulation_constraints'
include/linux/regulator/driver.h:228: warning: Function parameter or member 'resume' not described in 'regulator_ops'
arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw0' not described in 'irb'
arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw1' not described in 'irb'
arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw2' not described in 'irb'
arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.esw3' not described in 'irb'
arch/s390/include/asm/cio.h:245: warning: Function parameter or member 'esw.eadm' not described in 'irb'
drivers/slimbus/stream.c:1: warning: no structured comments found
include/linux/spi/spi.h:180: warning: Function parameter or member 'driver_override' not described in 'spi_device'
drivers/target/target_core_device.c:1: warning: no structured comments found
drivers/usb/typec/bus.c:1: warning: no structured comments found
drivers/usb/typec/class.c:1: warning: no structured comments found
include/linux/w1.h:281: warning: Function parameter or member 'of_match_table' not described in 'w1_family'
fs/direct-io.c:257: warning: Excess function parameter 'offset' description in 'dio_complete'
fs/file_table.c:1: warning: no structured comments found
fs/libfs.c:477: warning: Excess function parameter 'available' description in 'simple_write_end'
fs/posix_acl.c:646: warning: Function parameter or member 'inode' not described in 'posix_acl_update_mode'
fs/posix_acl.c:646: warning: Function parameter or member 'mode_p' not described in 'posix_acl_update_mode'
fs/posix_acl.c:646: warning: Function parameter or member 'acl' not described in 'posix_acl_update_mode'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:294: warning: Excess function parameter 'mm' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:294: warning: Excess function parameter 'start' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:294: warning: Excess function parameter 'end' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:343: warning: Excess function parameter 'mm' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:343: warning: Excess function parameter 'start' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:343: warning: Excess function parameter 'end' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:183: warning: Function parameter or member 'blockable' not described in 'amdgpu_mn_read_lock'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:295: warning: Function parameter or member 'range' not described in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:295: warning: Excess function parameter 'mm' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:295: warning: Excess function parameter 'start' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:295: warning: Excess function parameter 'end' description in 'amdgpu_mn_invalidate_range_start_hsa'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:344: warning: Function parameter or member 'range' not described in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:344: warning: Excess function parameter 'mm' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:344: warning: Excess function parameter 'start' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c:344: warning: Excess function parameter 'end' description in 'amdgpu_mn_invalidate_range_end'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:382: warning: cannot understand function prototype: 'struct amdgpu_vm_pt_cursor '
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:383: warning: cannot understand function prototype: 'struct amdgpu_vm_pt_cursor '
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:555: warning: Function parameter or member 'adev' not described in 'for_each_amdgpu_vm_pt_leaf'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:555: warning: Function parameter or member 'vm' not described in 'for_each_amdgpu_vm_pt_leaf'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:555: warning: Function parameter or member 'start' not described in 'for_each_amdgpu_vm_pt_leaf'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:555: warning: Function parameter or member 'end' not described in 'for_each_amdgpu_vm_pt_leaf'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:555: warning: Function parameter or member 'cursor' not described in 'for_each_amdgpu_vm_pt_leaf'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:603: warning: Function parameter or member 'adev' not described in 'for_each_amdgpu_vm_pt_dfs_safe'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:603: warning: Function parameter or member 'vm' not described in 'for_each_amdgpu_vm_pt_dfs_safe'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:603: warning: Function parameter or member 'cursor' not described in 'for_each_amdgpu_vm_pt_dfs_safe'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:603: warning: Function parameter or member 'entry' not described in 'for_each_amdgpu_vm_pt_dfs_safe'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:845: warning: Function parameter or member 'level' not described in 'amdgpu_vm_bo_param'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'params' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'bo' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'pe' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'addr' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'count' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'incr' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1353: warning: Function parameter or member 'flags' not described in 'amdgpu_vm_update_func'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'params' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'bo' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'level' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'pe' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'addr' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'count' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'incr' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1520: warning: Function parameter or member 'flags' not described in 'amdgpu_vm_update_huge'
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:3096: warning: Function parameter or member 'pasid' not described in 'amdgpu_vm_make_compute'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:128: warning: Incorrect use of kernel-doc format: Documentation Makefile include scripts source @atomic_obj
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'atomic_obj' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'atomic_obj_lock' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'backlight_link' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'backlight_caps' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'freesync_module' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'fw_dmcu' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:203: warning: Function parameter or member 'dmcu_fw_version' not described in 'amdgpu_display_manager'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:1: warning: no structured comments found
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_pin' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_unpin' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_res_obj' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_get_sg_table' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_import_sg_table' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_vmap' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_vunmap' not described in 'drm_driver'
include/drm/drm_drv.h:618: warning: Function parameter or member 'gem_prime_mmap' not described in 'drm_driver'
include/drm/drm_atomic_state_helper.h:1: warning: no structured comments found
drivers/gpu/drm/drm_dp_helper.c:1364: warning: Function parameter or member 'dsc_dpcd' not described in 'drm_dp_dsc_sink_max_slice_count'
drivers/gpu/drm/drm_dp_helper.c:1364: warning: Function parameter or member 'is_edp' not described in 'drm_dp_dsc_sink_max_slice_count'
drivers/gpu/drm/i915/i915_vma.h:49: warning: cannot understand function prototype: 'struct i915_vma '
drivers/gpu/drm/i915/i915_vma.h:1: warning: no structured comments found
drivers/gpu/drm/i915/intel_guc_fwif.h:536: warning: cannot understand function prototype: 'struct guc_log_buffer_state '
drivers/gpu/drm/i915/i915_trace.h:1: warning: no structured comments found
>> drivers/gpu/drm/i915/i915_perf.c:644: warning: Function parameter or member 'oastatus' not described in 'gen8_append_oa_reports'
>> drivers/gpu/drm/i915/i915_perf.c:928: warning: Function parameter or member 'oastatus1' not described in 'gen7_append_oa_reports'
include/linux/skbuff.h:876: warning: Function parameter or member 'dev_scratch' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'list' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'ip_defrag_offset' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'skb_mstamp_ns' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member '__cloned_offset' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'head_frag' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member '__pkt_type_offset' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'encapsulation' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'encap_hdr_csum' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'csum_valid' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member '__pkt_vlan_present_offset' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'vlan_present' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'csum_complete_sw' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'csum_level' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'inner_protocol_type' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'remcsum_offload' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'sender_cpu' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'reserved_tailroom' not described in 'sk_buff'
include/linux/skbuff.h:876: warning: Function parameter or member 'inner_ipproto' not described in 'sk_buff'
include/net/sock.h:238: warning: Function parameter or member 'skc_addrpair' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_portpair' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_ipv6only' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_net_refcnt' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_v6_daddr' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_v6_rcv_saddr' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_cookie' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_listener' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_tw_dr' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_rcv_wnd' not described in 'sock_common'
include/net/sock.h:238: warning: Function parameter or member 'skc_tw_rcv_nxt' not described in 'sock_common'
include/net/sock.h:513: warning: Function parameter or member 'sk_backlog.rmem_alloc' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_backlog.len' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_backlog.head' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_backlog.tail' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_wq_raw' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'tcp_rtx_queue' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_route_forced_caps' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_txtime_report_errors' not described in 'sock'
include/net/sock.h:513: warning: Function parameter or member 'sk_validate_xmit_skb' not described in 'sock'
include/linux/netdevice.h:2048: warning: Function parameter or member 'adj_list.upper' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'adj_list.lower' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'gso_partial_features' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'switchdev_ops' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'l3mdev_ops' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'xfrmdev_ops' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'tlsdev_ops' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'name_assign_type' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'ieee802154_ptr' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'mpls_ptr' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'xdp_prog' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'gro_flush_timeout' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'nf_hooks_ingress' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member '____cacheline_aligned_in_smp' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'qdisc_hash' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'xps_cpus_map' not described in 'net_device'
include/linux/netdevice.h:2048: warning: Function parameter or member 'xps_rxqs_map' not described in 'net_device'
include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 'phylink_link_state'
include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising' not described in 'phylink_link_state'
Documentation/admin-guide/cgroup-v2.rst:1509: WARNING: Block quote ends without a blank line; unexpected unindent.
Documentation/admin-guide/cgroup-v2.rst:1511: WARNING: Block quote ends without a blank line; unexpected unindent.
Documentation/admin-guide/cgroup-v2.rst:1512: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/interrupt.h:252: WARNING: Inline emphasis start-string without end-string.
include/net/mac80211.h:1214: ERROR: Unexpected indentation.
include/net/mac80211.h:1221: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/wait.h:110: WARNING: Block quote ends without a blank line; unexpected unindent.
include/linux/wait.h:113: ERROR: Unexpected indentation.
include/linux/wait.h:115: WARNING: Block quote ends without a blank line; unexpected unindent.
kernel/time/hrtimer.c:1120: WARNING: Block quote ends without a blank line; unexpected unindent.
kernel/signal.c:344: WARNING: Inline literal start-string without end-string.
include/linux/kernel.h:137: WARNING: Inline interpreted text or phrase reference start-string without end-string.
Documentation/driver-api/dmaengine/dmatest.rst:63: ERROR: Unexpected indentation.
include/uapi/linux/firewire-cdev.h:312: WARNING: Inline literal start-string without end-string.
Documentation/driver-api/gpio/board.rst:209: ERROR: Unexpected indentation.
drivers/ata/libata-core.c:5959: ERROR: Unknown target name: "hw".
drivers/message/fusion/mptbase.c:5057: WARNING: Definition list ends without a blank line; unexpected unindent.
drivers/tty/serial/serial_core.c:1948: WARNING: Definition list ends without a blank line; unexpected unindent.
include/linux/mtd/rawnand.h:1192: WARNING: Inline strong start-string without end-string.
include/linux/mtd/rawnand.h:1194: WARNING: Inline strong start-string without end-string.
include/linux/regulator/driver.h:287: ERROR: Unknown target name: "regulator_regmap_x_voltage".
Documentation/driver-api/soundwire/locking.rst:50: ERROR: Inconsistent literal block quoting.
Documentation/driver-api/soundwire/locking.rst:51: WARNING: Line block ends without a blank line.
Documentation/driver-api/soundwire/locking.rst:55: WARNING: Inline substitution_reference start-string without end-string.
Documentation/driver-api/soundwire/locking.rst:56: WARNING: Line block ends without a blank line.
include/linux/spi/spi.h:368: ERROR: Unexpected indentation.
fs/posix_acl.c:635: WARNING: Inline emphasis start-string without end-string.
Documentation/filesystems/path-lookup.rst:347: WARNING: Title underline too short.
vim +644 drivers/gpu/drm/i915/i915_perf.c
d79651522 Robert Bragg 2016-11-07 617
d79651522 Robert Bragg 2016-11-07 618 /**
d79651522 Robert Bragg 2016-11-07 619 * Copies all buffered OA reports into userspace read() buffer.
d79651522 Robert Bragg 2016-11-07 620 * @stream: An i915-perf stream opened for OA metrics
d79651522 Robert Bragg 2016-11-07 621 * @buf: destination buffer given by userspace
d79651522 Robert Bragg 2016-11-07 622 * @count: the number of bytes userspace wants to read
d79651522 Robert Bragg 2016-11-07 623 * @offset: (inout): the current position for writing into @buf
d79651522 Robert Bragg 2016-11-07 624 *
16d98b31f Robert Bragg 2016-12-07 625 * Notably any error condition resulting in a short read (-%ENOSPC or
16d98b31f Robert Bragg 2016-12-07 626 * -%EFAULT) will be returned even though one or more records may
d79651522 Robert Bragg 2016-11-07 627 * have been successfully copied. In this case it's up to the caller
d79651522 Robert Bragg 2016-11-07 628 * to decide if the error should be squashed before returning to
d79651522 Robert Bragg 2016-11-07 629 * userspace.
d79651522 Robert Bragg 2016-11-07 630 *
d79651522 Robert Bragg 2016-11-07 631 * Note: reports are consumed from the head, and appended to the
e81b3a555 Robert Bragg 2017-05-11 632 * tail, so the tail chases the head?... If you think that's mad
d79651522 Robert Bragg 2016-11-07 633 * and back-to-front you're not alone, but this follows the
d79651522 Robert Bragg 2016-11-07 634 * Gen PRM naming convention.
16d98b31f Robert Bragg 2016-12-07 635 *
16d98b31f Robert Bragg 2016-12-07 636 * Returns: 0 on success, negative error code on failure.
d79651522 Robert Bragg 2016-11-07 637 */
19f81df28 Robert Bragg 2017-06-13 638 static int gen8_append_oa_reports(struct i915_perf_stream *stream,
6e39236ad Lionel Landwerlin 2019-01-16 639 u32 oastatus,
19f81df28 Robert Bragg 2017-06-13 640 char __user *buf,
19f81df28 Robert Bragg 2017-06-13 641 size_t count,
19f81df28 Robert Bragg 2017-06-13 642 size_t *offset)
19f81df28 Robert Bragg 2017-06-13 643 {
19f81df28 Robert Bragg 2017-06-13 @644 struct drm_i915_private *dev_priv = stream->dev_priv;
19f81df28 Robert Bragg 2017-06-13 645 int report_size = dev_priv->perf.oa.oa_buffer.format_size;
19f81df28 Robert Bragg 2017-06-13 646 u8 *oa_buf_base = dev_priv->perf.oa.oa_buffer.vaddr;
19f81df28 Robert Bragg 2017-06-13 647 u32 gtt_offset = i915_ggtt_offset(dev_priv->perf.oa.oa_buffer.vma);
fe8416864 Joonas Lahtinen 2018-11-16 648 u32 mask = (OA_BUFFER_SIZE - 1);
19f81df28 Robert Bragg 2017-06-13 649 size_t start_offset = *offset;
19f81df28 Robert Bragg 2017-06-13 650 unsigned long flags;
19f81df28 Robert Bragg 2017-06-13 651 u32 head, tail;
19f81df28 Robert Bragg 2017-06-13 652 u32 taken;
19f81df28 Robert Bragg 2017-06-13 653 int ret = 0;
19f81df28 Robert Bragg 2017-06-13 654
19f81df28 Robert Bragg 2017-06-13 655 if (WARN_ON(!stream->enabled))
19f81df28 Robert Bragg 2017-06-13 656 return -EIO;
19f81df28 Robert Bragg 2017-06-13 657
19f81df28 Robert Bragg 2017-06-13 658 spin_lock_irqsave(&dev_priv->perf.oa.oa_buffer.ptr_lock, flags);
19f81df28 Robert Bragg 2017-06-13 659
19f81df28 Robert Bragg 2017-06-13 660 head = dev_priv->perf.oa.oa_buffer.head;
b667af43d Lionel Landwerlin 2019-01-16 661 tail = dev_priv->perf.oa.oa_buffer.tail;
19f81df28 Robert Bragg 2017-06-13 662
19f81df28 Robert Bragg 2017-06-13 663 spin_unlock_irqrestore(&dev_priv->perf.oa.oa_buffer.ptr_lock, flags);
19f81df28 Robert Bragg 2017-06-13 664
19f81df28 Robert Bragg 2017-06-13 665 /*
19f81df28 Robert Bragg 2017-06-13 666 * NB: oa_buffer.head/tail include the gtt_offset which we don't want
19f81df28 Robert Bragg 2017-06-13 667 * while indexing relative to oa_buf_base.
19f81df28 Robert Bragg 2017-06-13 668 */
19f81df28 Robert Bragg 2017-06-13 669 head -= gtt_offset;
19f81df28 Robert Bragg 2017-06-13 670 tail -= gtt_offset;
19f81df28 Robert Bragg 2017-06-13 671
19f81df28 Robert Bragg 2017-06-13 672 /*
19f81df28 Robert Bragg 2017-06-13 673 * An out of bounds or misaligned head or tail pointer implies a driver
19f81df28 Robert Bragg 2017-06-13 674 * bug since we validate + align the tail pointers we read from the
19f81df28 Robert Bragg 2017-06-13 675 * hardware and we are in full control of the head pointer which should
19f81df28 Robert Bragg 2017-06-13 676 * only be incremented by multiples of the report size (notably also
19f81df28 Robert Bragg 2017-06-13 677 * all a power of two).
19f81df28 Robert Bragg 2017-06-13 678 */
fe8416864 Joonas Lahtinen 2018-11-16 679 if (WARN_ONCE(head > OA_BUFFER_SIZE || head % report_size ||
fe8416864 Joonas Lahtinen 2018-11-16 680 tail > OA_BUFFER_SIZE || tail % report_size,
19f81df28 Robert Bragg 2017-06-13 681 "Inconsistent OA buffer pointers: head = %u, tail = %u\n",
19f81df28 Robert Bragg 2017-06-13 682 head, tail))
19f81df28 Robert Bragg 2017-06-13 683 return -EIO;
19f81df28 Robert Bragg 2017-06-13 684
6e39236ad Lionel Landwerlin 2019-01-16 685 /*
6e39236ad Lionel Landwerlin 2019-01-16 686 * If there is nothing to read, don't append the status report yet,
6e39236ad Lionel Landwerlin 2019-01-16 687 * wait until we have some data available.
6e39236ad Lionel Landwerlin 2019-01-16 688 */
6e39236ad Lionel Landwerlin 2019-01-16 689 if (!OA_TAKEN(tail, head))
6e39236ad Lionel Landwerlin 2019-01-16 690 return 0;
6e39236ad Lionel Landwerlin 2019-01-16 691
6e39236ad Lionel Landwerlin 2019-01-16 692 if (oastatus & GEN8_OASTATUS_REPORT_LOST) {
6e39236ad Lionel Landwerlin 2019-01-16 693 ret = append_oa_status(stream, buf, count, offset,
6e39236ad Lionel Landwerlin 2019-01-16 694 DRM_I915_PERF_RECORD_OA_REPORT_LOST);
6e39236ad Lionel Landwerlin 2019-01-16 695 if (ret)
6e39236ad Lionel Landwerlin 2019-01-16 696 return ret;
6e39236ad Lionel Landwerlin 2019-01-16 697 I915_WRITE(GEN8_OASTATUS,
6e39236ad Lionel Landwerlin 2019-01-16 698 oastatus & ~GEN8_OASTATUS_REPORT_LOST);
6e39236ad Lionel Landwerlin 2019-01-16 699 }
19f81df28 Robert Bragg 2017-06-13 700
19f81df28 Robert Bragg 2017-06-13 701 for (/* none */;
19f81df28 Robert Bragg 2017-06-13 702 (taken = OA_TAKEN(tail, head));
19f81df28 Robert Bragg 2017-06-13 703 head = (head + report_size) & mask) {
19f81df28 Robert Bragg 2017-06-13 704 u8 *report = oa_buf_base + head;
19f81df28 Robert Bragg 2017-06-13 705 u32 *report32 = (void *)report;
19f81df28 Robert Bragg 2017-06-13 706 u32 ctx_id;
19f81df28 Robert Bragg 2017-06-13 707 u32 reason;
19f81df28 Robert Bragg 2017-06-13 708
19f81df28 Robert Bragg 2017-06-13 709 /*
19f81df28 Robert Bragg 2017-06-13 710 * All the report sizes factor neatly into the buffer
19f81df28 Robert Bragg 2017-06-13 711 * size so we never expect to see a report split
19f81df28 Robert Bragg 2017-06-13 712 * between the beginning and end of the buffer.
19f81df28 Robert Bragg 2017-06-13 713 *
19f81df28 Robert Bragg 2017-06-13 714 * Given the initial alignment check a misalignment
19f81df28 Robert Bragg 2017-06-13 715 * here would imply a driver bug that would result
19f81df28 Robert Bragg 2017-06-13 716 * in an overrun.
19f81df28 Robert Bragg 2017-06-13 717 */
fe8416864 Joonas Lahtinen 2018-11-16 718 if (WARN_ON((OA_BUFFER_SIZE - head) < report_size)) {
19f81df28 Robert Bragg 2017-06-13 719 DRM_ERROR("Spurious OA head ptr: non-integral report offset\n");
19f81df28 Robert Bragg 2017-06-13 720 break;
19f81df28 Robert Bragg 2017-06-13 721 }
19f81df28 Robert Bragg 2017-06-13 722
19f81df28 Robert Bragg 2017-06-13 723 /*
19f81df28 Robert Bragg 2017-06-13 724 * The reason field includes flags identifying what
19f81df28 Robert Bragg 2017-06-13 725 * triggered this specific report (mostly timer
19f81df28 Robert Bragg 2017-06-13 726 * triggered or e.g. due to a context switch).
19f81df28 Robert Bragg 2017-06-13 727 *
19f81df28 Robert Bragg 2017-06-13 728 * This field is never expected to be zero so we can
19f81df28 Robert Bragg 2017-06-13 729 * check that the report isn't invalid before copying
19f81df28 Robert Bragg 2017-06-13 730 * it to userspace...
19f81df28 Robert Bragg 2017-06-13 731 */
19f81df28 Robert Bragg 2017-06-13 732 reason = ((report32[0] >> OAREPORT_REASON_SHIFT) &
19f81df28 Robert Bragg 2017-06-13 733 OAREPORT_REASON_MASK);
19f81df28 Robert Bragg 2017-06-13 734 if (reason == 0) {
19f81df28 Robert Bragg 2017-06-13 735 if (__ratelimit(&dev_priv->perf.oa.spurious_report_rs))
19f81df28 Robert Bragg 2017-06-13 736 DRM_NOTE("Skipping spurious, invalid OA report\n");
19f81df28 Robert Bragg 2017-06-13 737 continue;
19f81df28 Robert Bragg 2017-06-13 738 }
19f81df28 Robert Bragg 2017-06-13 739
61d5676b5 Lionel Landwerlin 2018-06-02 740 ctx_id = report32[2] & dev_priv->perf.oa.specific_ctx_id_mask;
19f81df28 Robert Bragg 2017-06-13 741
19f81df28 Robert Bragg 2017-06-13 742 /*
19f81df28 Robert Bragg 2017-06-13 743 * Squash whatever is in the CTX_ID field if it's marked as
19f81df28 Robert Bragg 2017-06-13 744 * invalid to be sure we avoid false-positive, single-context
19f81df28 Robert Bragg 2017-06-13 745 * filtering below...
19f81df28 Robert Bragg 2017-06-13 746 *
19f81df28 Robert Bragg 2017-06-13 747 * Note: that we don't clear the valid_ctx_bit so userspace can
19f81df28 Robert Bragg 2017-06-13 748 * understand that the ID has been squashed by the kernel.
19f81df28 Robert Bragg 2017-06-13 749 */
19f81df28 Robert Bragg 2017-06-13 750 if (!(report32[0] & dev_priv->perf.oa.gen8_valid_ctx_bit))
19f81df28 Robert Bragg 2017-06-13 751 ctx_id = report32[2] = INVALID_CTX_ID;
19f81df28 Robert Bragg 2017-06-13 752
19f81df28 Robert Bragg 2017-06-13 753 /*
19f81df28 Robert Bragg 2017-06-13 754 * NB: For Gen 8 the OA unit no longer supports clock gating
19f81df28 Robert Bragg 2017-06-13 755 * off for a specific context and the kernel can't securely
19f81df28 Robert Bragg 2017-06-13 756 * stop the counters from updating as system-wide / global
19f81df28 Robert Bragg 2017-06-13 757 * values.
19f81df28 Robert Bragg 2017-06-13 758 *
19f81df28 Robert Bragg 2017-06-13 759 * Automatic reports now include a context ID so reports can be
19f81df28 Robert Bragg 2017-06-13 760 * filtered on the cpu but it's not worth trying to
19f81df28 Robert Bragg 2017-06-13 761 * automatically subtract/hide counter progress for other
19f81df28 Robert Bragg 2017-06-13 762 * contexts while filtering since we can't stop userspace
19f81df28 Robert Bragg 2017-06-13 763 * issuing MI_REPORT_PERF_COUNT commands which would still
19f81df28 Robert Bragg 2017-06-13 764 * provide a side-band view of the real values.
19f81df28 Robert Bragg 2017-06-13 765 *
19f81df28 Robert Bragg 2017-06-13 766 * To allow userspace (such as Mesa/GL_INTEL_performance_query)
19f81df28 Robert Bragg 2017-06-13 767 * to normalize counters for a single filtered context then it
19f81df28 Robert Bragg 2017-06-13 768 * needs be forwarded bookend context-switch reports so that it
19f81df28 Robert Bragg 2017-06-13 769 * can track switches in between MI_REPORT_PERF_COUNT commands
19f81df28 Robert Bragg 2017-06-13 770 * and can itself subtract/ignore the progress of counters
19f81df28 Robert Bragg 2017-06-13 771 * associated with other contexts. Note that the hardware
19f81df28 Robert Bragg 2017-06-13 772 * automatically triggers reports when switching to a new
19f81df28 Robert Bragg 2017-06-13 773 * context which are tagged with the ID of the newly active
19f81df28 Robert Bragg 2017-06-13 774 * context. To avoid the complexity (and likely fragility) of
19f81df28 Robert Bragg 2017-06-13 775 * reading ahead while parsing reports to try and minimize
19f81df28 Robert Bragg 2017-06-13 776 * forwarding redundant context switch reports (i.e. between
19f81df28 Robert Bragg 2017-06-13 777 * other, unrelated contexts) we simply elect to forward them
19f81df28 Robert Bragg 2017-06-13 778 * all.
19f81df28 Robert Bragg 2017-06-13 779 *
19f81df28 Robert Bragg 2017-06-13 780 * We don't rely solely on the reason field to identify context
19f81df28 Robert Bragg 2017-06-13 781 * switches since it's not-uncommon for periodic samples to
19f81df28 Robert Bragg 2017-06-13 782 * identify a switch before any 'context switch' report.
19f81df28 Robert Bragg 2017-06-13 783 */
19f81df28 Robert Bragg 2017-06-13 784 if (!dev_priv->perf.oa.exclusive_stream->ctx ||
19f81df28 Robert Bragg 2017-06-13 785 dev_priv->perf.oa.specific_ctx_id == ctx_id ||
19f81df28 Robert Bragg 2017-06-13 786 (dev_priv->perf.oa.oa_buffer.last_ctx_id ==
19f81df28 Robert Bragg 2017-06-13 787 dev_priv->perf.oa.specific_ctx_id) ||
19f81df28 Robert Bragg 2017-06-13 788 reason & OAREPORT_REASON_CTX_SWITCH) {
19f81df28 Robert Bragg 2017-06-13 789
19f81df28 Robert Bragg 2017-06-13 790 /*
19f81df28 Robert Bragg 2017-06-13 791 * While filtering for a single context we avoid
19f81df28 Robert Bragg 2017-06-13 792 * leaking the IDs of other contexts.
19f81df28 Robert Bragg 2017-06-13 793 */
19f81df28 Robert Bragg 2017-06-13 794 if (dev_priv->perf.oa.exclusive_stream->ctx &&
19f81df28 Robert Bragg 2017-06-13 795 dev_priv->perf.oa.specific_ctx_id != ctx_id) {
19f81df28 Robert Bragg 2017-06-13 796 report32[2] = INVALID_CTX_ID;
19f81df28 Robert Bragg 2017-06-13 797 }
19f81df28 Robert Bragg 2017-06-13 798
19f81df28 Robert Bragg 2017-06-13 799 ret = append_oa_sample(stream, buf, count, offset,
19f81df28 Robert Bragg 2017-06-13 800 report);
19f81df28 Robert Bragg 2017-06-13 801 if (ret)
19f81df28 Robert Bragg 2017-06-13 802 break;
19f81df28 Robert Bragg 2017-06-13 803
19f81df28 Robert Bragg 2017-06-13 804 dev_priv->perf.oa.oa_buffer.last_ctx_id = ctx_id;
19f81df28 Robert Bragg 2017-06-13 805 }
19f81df28 Robert Bragg 2017-06-13 806
19f81df28 Robert Bragg 2017-06-13 807 /*
b667af43d Lionel Landwerlin 2019-01-16 808 * Clear out the first 2 dword as a mean to detect unlanded
b667af43d Lionel Landwerlin 2019-01-16 809 * reports.
19f81df28 Robert Bragg 2017-06-13 810 */
b667af43d Lionel Landwerlin 2019-01-16 811 report32[0] = report32[1] = 0;
19f81df28 Robert Bragg 2017-06-13 812 }
19f81df28 Robert Bragg 2017-06-13 813
19f81df28 Robert Bragg 2017-06-13 814 if (start_offset != *offset) {
19f81df28 Robert Bragg 2017-06-13 815 spin_lock_irqsave(&dev_priv->perf.oa.oa_buffer.ptr_lock, flags);
19f81df28 Robert Bragg 2017-06-13 816
19f81df28 Robert Bragg 2017-06-13 817 /*
19f81df28 Robert Bragg 2017-06-13 818 * We removed the gtt_offset for the copy loop above, indexing
19f81df28 Robert Bragg 2017-06-13 819 * relative to oa_buf_base so put back here...
19f81df28 Robert Bragg 2017-06-13 820 */
19f81df28 Robert Bragg 2017-06-13 821 head += gtt_offset;
19f81df28 Robert Bragg 2017-06-13 822
19f81df28 Robert Bragg 2017-06-13 823 I915_WRITE(GEN8_OAHEADPTR, head & GEN8_OAHEADPTR_MASK);
19f81df28 Robert Bragg 2017-06-13 824 dev_priv->perf.oa.oa_buffer.head = head;
19f81df28 Robert Bragg 2017-06-13 825
19f81df28 Robert Bragg 2017-06-13 826 spin_unlock_irqrestore(&dev_priv->perf.oa.oa_buffer.ptr_lock, flags);
19f81df28 Robert Bragg 2017-06-13 827 }
19f81df28 Robert Bragg 2017-06-13 828
19f81df28 Robert Bragg 2017-06-13 829 return ret;
19f81df28 Robert Bragg 2017-06-13 830 }
19f81df28 Robert Bragg 2017-06-13 831
:::::: The code at line 644 was first introduced by commit
:::::: 19f81df2859eb10e92d68991cefa39f826dea013 drm/i915/perf: Add OA unit support for Gen 8+
:::::: TO: Robert Bragg <robert at sixbynine.org>
:::::: CC: Ben Widawsky <ben at bwidawsk.net>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 6630 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20190117/231fab4e/attachment-0001.gz>
More information about the Intel-gfx
mailing list