[Intel-gfx] [PATCH v15 10/13] drm/i915/perf: execute OA configuration from command stream
kbuild test robot
lkp at intel.com
Mon Sep 9 08:17:28 UTC 2019
Hi Lionel,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on drm-intel/for-linux-next]
[cannot apply to v5.3-rc8 next-20190904]
[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-Vulkan-performance-query-support/20190907-052009
base: git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-f004-201936 (attached as .config)
compiler: gcc-7 (Debian 7.4.0-11) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/i915/i915_perf.c: In function 'i915_oa_stream_init':
>> drivers/gpu/drm/i915/i915_perf.c:2697:3: error: ignoring return value of 'i915_active_request_retire', declared with attribute warn_unused_result [-Werror=unused-result]
i915_active_request_retire(&stream->active_config_rq, 0,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&stream->config_mutex);
~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
vim +/i915_active_request_retire +2697 drivers/gpu/drm/i915/i915_perf.c
2556
2557 /**
2558 * i915_oa_stream_init - validate combined props for OA stream and init
2559 * @stream: An i915 perf stream
2560 * @param: The open parameters passed to `DRM_I915_PERF_OPEN`
2561 * @props: The property state that configures stream (individually validated)
2562 *
2563 * While read_properties_unlocked() validates properties in isolation it
2564 * doesn't ensure that the combination necessarily makes sense.
2565 *
2566 * At this point it has been determined that userspace wants a stream of
2567 * OA metrics, but still we need to further validate the combined
2568 * properties are OK.
2569 *
2570 * If the configuration makes sense then we can allocate memory for
2571 * a circular OA buffer and apply the requested metric set configuration.
2572 *
2573 * Returns: zero on success or a negative error code.
2574 */
2575 static int i915_oa_stream_init(struct i915_perf_stream *stream,
2576 struct drm_i915_perf_open_param *param,
2577 struct perf_open_properties *props)
2578 {
2579 struct drm_i915_private *dev_priv = stream->dev_priv;
2580 int format_size;
2581 int ret;
2582
2583 /* If the sysfs metrics/ directory wasn't registered for some
2584 * reason then don't let userspace try their luck with config
2585 * IDs
2586 */
2587 if (!dev_priv->perf.metrics_kobj) {
2588 DRM_DEBUG("OA metrics weren't advertised via sysfs\n");
2589 return -EINVAL;
2590 }
2591
2592 if (!(props->sample_flags & SAMPLE_OA_REPORT)) {
2593 DRM_DEBUG("Only OA report sampling supported\n");
2594 return -EINVAL;
2595 }
2596
2597 if (!dev_priv->perf.ops.enable_metric_set) {
2598 DRM_DEBUG("OA unit not supported\n");
2599 return -ENODEV;
2600 }
2601
2602 /* To avoid the complexity of having to accurately filter
2603 * counter reports and marshal to the appropriate client
2604 * we currently only allow exclusive access
2605 */
2606 if (dev_priv->perf.exclusive_stream) {
2607 DRM_DEBUG("OA unit already in use\n");
2608 return -EBUSY;
2609 }
2610
2611 if (!props->oa_format) {
2612 DRM_DEBUG("OA report format not specified\n");
2613 return -EINVAL;
2614 }
2615
2616 mutex_init(&stream->config_mutex);
2617
2618 stream->sample_size = sizeof(struct drm_i915_perf_record_header);
2619
2620 format_size = dev_priv->perf.oa_formats[props->oa_format].size;
2621
2622 stream->engine = props->engine;
2623
2624 INIT_ACTIVE_REQUEST(&stream->active_config_rq,
2625 &stream->config_mutex);
2626
2627 stream->sample_flags |= SAMPLE_OA_REPORT;
2628 stream->sample_size += format_size;
2629
2630 stream->oa_buffer.format_size = format_size;
2631 if (WARN_ON(stream->oa_buffer.format_size == 0))
2632 return -EINVAL;
2633
2634 stream->oa_buffer.format =
2635 dev_priv->perf.oa_formats[props->oa_format].format;
2636
2637 stream->periodic = props->oa_periodic;
2638 if (stream->periodic)
2639 stream->period_exponent = props->oa_period_exponent;
2640
2641 if (stream->ctx) {
2642 ret = oa_get_render_ctx_id(stream);
2643 if (ret) {
2644 DRM_DEBUG("Invalid context id to filter with\n");
2645 return ret;
2646 }
2647 }
2648
2649 ret = alloc_noa_wait(stream);
2650 if (ret) {
2651 DRM_DEBUG("Unable to allocate NOA wait batch buffer\n");
2652 goto err_noa_wait_alloc;
2653 }
2654
2655 ret = i915_perf_get_oa_config_and_bo(stream, props->metrics_set,
2656 &stream->oa_config,
2657 &stream->initial_oa_config_bo);
2658 if (ret) {
2659 DRM_DEBUG("Invalid OA config id=%i\n", props->metrics_set);
2660 goto err_config;
2661 }
2662
2663 /* PRM - observability performance counters:
2664 *
2665 * OACONTROL, performance counter enable, note:
2666 *
2667 * "When this bit is set, in order to have coherent counts,
2668 * RC6 power state and trunk clock gating must be disabled.
2669 * This can be achieved by programming MMIO registers as
2670 * 0xA094=0 and 0xA090[31]=1"
2671 *
2672 * In our case we are expecting that taking pm + FORCEWAKE
2673 * references will effectively disable RC6.
2674 */
2675 stream->wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2676 intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
2677
2678 ret = alloc_oa_buffer(stream);
2679 if (ret)
2680 goto err_oa_buf_alloc;
2681
2682 ret = i915_mutex_lock_interruptible(&dev_priv->drm);
2683 if (ret)
2684 goto err_lock;
2685
2686 stream->ops = &i915_oa_stream_ops;
2687 dev_priv->perf.exclusive_stream = stream;
2688
2689 mutex_lock(&stream->config_mutex);
2690 ret = dev_priv->perf.ops.enable_metric_set(stream);
2691 if (ret) {
2692 DRM_DEBUG("Unable to enable metric set\n");
2693 /*
2694 * Ignore the return value since we already have an error from
2695 * the enable vfunc.
2696 */
> 2697 i915_active_request_retire(&stream->active_config_rq, 0,
2698 &stream->config_mutex);
2699 } else {
2700 ret = i915_active_request_retire(&stream->active_config_rq, 0,
2701 &stream->config_mutex);
2702 }
2703
2704 mutex_unlock(&stream->config_mutex);
2705 mutex_unlock(&dev_priv->drm.struct_mutex);
2706
2707 i915_gem_object_put(stream->initial_oa_config_bo);
2708 stream->initial_oa_config_bo = NULL;
2709 if (ret)
2710 goto err_enable;
2711
2712 DRM_DEBUG("opening stream oa config uuid=%s\n", stream->oa_config->uuid);
2713
2714 hrtimer_init(&stream->poll_check_timer,
2715 CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2716 stream->poll_check_timer.function = oa_poll_check_timer_cb;
2717 init_waitqueue_head(&stream->poll_wq);
2718 spin_lock_init(&stream->oa_buffer.ptr_lock);
2719
2720 return 0;
2721
2722 err_enable:
2723 mutex_lock(&dev_priv->drm.struct_mutex);
2724 mutex_lock(&stream->config_mutex);
2725 dev_priv->perf.ops.disable_metric_set(stream);
2726 mutex_unlock(&stream->config_mutex);
2727 dev_priv->perf.exclusive_stream = NULL;
2728 mutex_unlock(&dev_priv->drm.struct_mutex);
2729
2730 err_lock:
2731 free_oa_buffer(stream);
2732
2733 err_oa_buf_alloc:
2734 intel_uncore_forcewake_put(&dev_priv->uncore, FORCEWAKE_ALL);
2735 intel_runtime_pm_put(&dev_priv->runtime_pm, stream->wakeref);
2736
2737 free_oa_configs(stream);
2738
2739 if (stream->initial_oa_config_bo)
2740 i915_gem_object_put(stream->initial_oa_config_bo);
2741
2742 err_config:
2743 free_noa_wait(stream);
2744
2745 err_noa_wait_alloc:
2746 if (stream->ctx)
2747 oa_put_render_ctx_id(stream);
2748
2749 return ret;
2750 }
2751
---
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: 34827 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20190909/42e04d16/attachment-0001.gz>
More information about the Intel-gfx
mailing list