Message ID | 1465388441-23085-4-git-send-email-ankitprasad.r.sharma@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi,
[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on next-20160608]
[cannot apply to v4.7-rc2]
[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/ankitprasad-r-sharma-intel-com/Support-for-creating-using-Stolen-memory-backed-objects/20160608-205058
base: git://anongit.freedesktop.org/drm-intel for-linux-next
reproduce: make htmldocs
All warnings (new ones prefixed by >>):
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'prop_crtc_h'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'prop_fb_id'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'prop_crtc_id'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'prop_active'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'prop_mode_id'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'dvi_i_subconnector_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'dvi_i_select_subconnector_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_subconnector_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_select_subconnector_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_mode_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_left_margin_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_right_margin_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_top_margin_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_bottom_margin_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_brightness_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_contrast_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_flicker_reduction_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_overscan_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_saturation_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'tv_hue_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'scaling_mode_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'aspect_ratio_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'dirty_info_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'suggested_x_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'suggested_y_property'
include/drm/drm_crtc.h:2185: warning: No description found for parameter 'allow_fb_modifiers'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: No description found for parameter 'nonblock'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: Excess function parameter 'nonblocking' description in 'drm_atomic_helper_commit'
drivers/gpu/drm/drm_atomic_helper.c:2946: warning: No description found for parameter 'start'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: No description found for parameter 'nonblock'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: Excess function parameter 'nonblocking' description in 'drm_atomic_helper_commit'
drivers/gpu/drm/drm_atomic_helper.c:2946: warning: No description found for parameter 'start'
drivers/gpu/drm/drm_atomic_helper.c:1: warning: no structured comments found
Was looking for 'implementing async commit'.
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: No description found for parameter 'nonblock'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: Excess function parameter 'nonblocking' description in 'drm_atomic_helper_commit'
drivers/gpu/drm/drm_atomic_helper.c:2946: warning: No description found for parameter 'start'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: No description found for parameter 'nonblock'
drivers/gpu/drm/drm_atomic_helper.c:1150: warning: Excess function parameter 'nonblocking' description in 'drm_atomic_helper_commit'
drivers/gpu/drm/drm_atomic_helper.c:2946: warning: No description found for parameter 'start'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'dev'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'file_priv'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'mode_cmd'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'funcs'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'dev'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'file_priv'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'mode_cmd'
drivers/gpu/drm/drm_fb_cma_helper.c:285: warning: No description found for parameter 'm'
drivers/gpu/drm/drm_fb_cma_helper.c:285: warning: No description found for parameter 'arg'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'dev'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'file_priv'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'mode_cmd'
drivers/gpu/drm/drm_fb_cma_helper.c:173: warning: No description found for parameter 'funcs'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'dev'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'file_priv'
drivers/gpu/drm/drm_fb_cma_helper.c:233: warning: No description found for parameter 'mode_cmd'
drivers/gpu/drm/drm_fb_cma_helper.c:285: warning: No description found for parameter 'm'
drivers/gpu/drm/drm_fb_cma_helper.c:285: warning: No description found for parameter 'arg'
include/drm/drm_dp_helper.h:751: warning: No description found for parameter 'i2c_nack_count'
include/drm/drm_dp_helper.h:751: warning: No description found for parameter 'i2c_defer_count'
drivers/gpu/drm/drm_dp_mst_topology.c:2383: warning: No description found for parameter 'connector'
include/drm/drm_dp_mst_helper.h:92: warning: No description found for parameter 'cached_edid'
include/drm/drm_dp_mst_helper.h:92: warning: No description found for parameter 'has_audio'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'max_dpcd_transaction_bytes'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'sink_count'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'total_slots'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'avail_slots'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'total_pbn'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'qlock'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'tx_msg_downq'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'tx_down_in_progress'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'payload_lock'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'proposed_vcpis'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'payloads'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'payload_mask'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'vcpi_mask'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'tx_waitq'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'work'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'tx_work'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'destroy_connector_list'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'destroy_connector_lock'
include/drm/drm_dp_mst_helper.h:466: warning: No description found for parameter 'destroy_connector_work'
drivers/gpu/drm/drm_dp_mst_topology.c:2383: warning: No description found for parameter 'connector'
drivers/gpu/drm/drm_irq.c:158: warning: No description found for parameter 'flags'
include/drm/drmP.h:169: warning: No description found for parameter 'fmt'
include/drm/drmP.h:185: warning: No description found for parameter 'fmt'
include/drm/drmP.h:203: warning: No description found for parameter 'fmt'
include/drm/drmP.h:248: warning: No description found for parameter 'dev'
include/drm/drmP.h:248: warning: No description found for parameter 'data'
include/drm/drmP.h:248: warning: No description found for parameter 'file_priv'
include/drm/drmP.h:281: warning: No description found for parameter 'ioctl'
include/drm/drmP.h:281: warning: No description found for parameter '_func'
include/drm/drmP.h:281: warning: No description found for parameter '_flags'
include/drm/drmP.h:363: warning: cannot understand function prototype: 'struct drm_lock_data '
include/drm/drmP.h:411: warning: cannot understand function prototype: 'struct drm_driver '
include/drm/drmP.h:677: warning: cannot understand function prototype: 'struct drm_info_list '
include/drm/drmP.h:687: warning: cannot understand function prototype: 'struct drm_info_node '
include/drm/drmP.h:697: warning: cannot understand function prototype: 'struct drm_minor '
include/drm/drmP.h:745: warning: cannot understand function prototype: 'struct drm_device '
drivers/gpu/drm/i915/i915_gem.c:790: warning: No description found for parameter 'i915'
>> drivers/gpu/drm/i915/i915_gem.c:790: warning: Excess function parameter 'dev' description in 'i915_gem_gtt_pwrite_fast'
Warning: didn't use docs for i915_hotplug_interrupt_update
Warning: didn't use docs for ilk_update_display_irq
Warning: didn't use docs for ilk_update_gt_irq
Warning: didn't use docs for snb_update_pm_irq
Warning: didn't use docs for bdw_update_port_irq
Warning: didn't use docs for bdw_update_pipe_irq
Warning: didn't use docs for ibx_display_interrupt_update
Warning: didn't use docs for i915_enable_asle_pipestat
Warning: didn't use docs for ivybridge_parity_work
Warning: didn't use docs for i915_reset_and_wakeup
Warning: didn't use docs for i915_handle_error
Warning: didn't use docs for intel_irq_install
Warning: didn't use docs for intel_irq_uninstall
vim +790 drivers/gpu/drm/i915/i915_gem.c
fbd5a26d Chris Wilson 2010-10-14 774 return unwritten;
0839ccb8 Keith Packard 2008-10-30 775 }
0839ccb8 Keith Packard 2008-10-30 776
3de09aa3 Eric Anholt 2009-03-09 777 /**
3de09aa3 Eric Anholt 2009-03-09 778 * This is the fast pwrite path, where we copy the data directly from the
3de09aa3 Eric Anholt 2009-03-09 779 * user into the GTT, uncached.
14bb2c11 Tvrtko Ursulin 2016-06-03 780 * @dev: drm device pointer
14bb2c11 Tvrtko Ursulin 2016-06-03 781 * @obj: i915 gem object
14bb2c11 Tvrtko Ursulin 2016-06-03 782 * @args: pwrite arguments structure
14bb2c11 Tvrtko Ursulin 2016-06-03 783 * @file: drm file pointer
3de09aa3 Eric Anholt 2009-03-09 784 */
673a394b Eric Anholt 2008-07-30 785 static int
bac362ee Ankitprasad Sharma 2016-06-08 786 i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915,
05394f39 Chris Wilson 2010-11-08 787 struct drm_i915_gem_object *obj,
673a394b Eric Anholt 2008-07-30 788 struct drm_i915_gem_pwrite *args,
05394f39 Chris Wilson 2010-11-08 789 struct drm_file *file)
673a394b Eric Anholt 2008-07-30 @790 {
bac362ee Ankitprasad Sharma 2016-06-08 791 struct i915_ggtt *ggtt = &i915->ggtt;
bac362ee Ankitprasad Sharma 2016-06-08 792 struct drm_mm_node node;
bac362ee Ankitprasad Sharma 2016-06-08 793 uint64_t remain, offset;
673a394b Eric Anholt 2008-07-30 794 char __user *user_data;
bac362ee Ankitprasad Sharma 2016-06-08 795 int ret;
935aaa69 Daniel Vetter 2012-03-25 796
1ec9e26d Daniel Vetter 2014-02-14 797 ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE | PIN_NONBLOCK);
bac362ee Ankitprasad Sharma 2016-06-08 798 if (ret) {
:::::: The code at line 790 was first introduced by commit
:::::: 673a394b1e3b69be886ff24abfd6df97c52e8d08 drm: Add GEM ("graphics execution manager") to i915 driver.
:::::: TO: Eric Anholt <eric@anholt.net>
:::::: CC: Dave Airlie <airlied@linux.ie>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
On 08/06/16 13:20, ankitprasad.r.sharma@intel.com wrote: > From: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com> > > In pwrite_fast, map an object page by page if obj_ggtt_pin fails. First, > we try a nonblocking pin for the whole object (since that is fastest if > reused), then failing that we try to grab one page in the mappable > aperture. It also allows us to handle objects larger than the mappable > aperture (e.g. if we need to pwrite with vGPU restricting the aperture > to a measely 8MiB or something like that). > > v2: Pin pages before starting pwrite, Combined duplicate loops (Chris) > > v3: Combined loops based on local patch by Chris (Chris) > > v4: Added i915 wrapper function for drm_mm_insert_node_in_range (Chris) > > v5: Renamed wrapper function for drm_mm_insert_node_in_range (Chris) > > v5: Added wrapper for drm_mm_remove_node() (Chris) > > v6: Added get_pages call before pinning the pages (Tvrtko) > Added remove_mappable_node() wrapper for drm_mm_remove_node() (Chris) > > v7: Added size argument for insert_mappable_node (Tvrtko) > > v8: Do not put_pages after pwrite, do memset of node in the wrapper > function (insert_mappable_node) (Chris) > > v9: Rebase (Ankit) > > Signed-off-by: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > drivers/gpu/drm/i915/i915_gem.c | 90 +++++++++++++++++++++++++++++++---------- > 1 file changed, 68 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index eae8d7a..452178c 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -60,6 +60,24 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj) > return obj->pin_display; > } > > +static int > +insert_mappable_node(struct drm_i915_private *i915, > + struct drm_mm_node *node, u32 size) > +{ > + memset(node, 0, sizeof(*node)); > + return drm_mm_insert_node_in_range_generic(&i915->ggtt.base.mm, node, > + size, 0, 0, 0, > + i915->ggtt.mappable_end, > + DRM_MM_SEARCH_DEFAULT, > + DRM_MM_CREATE_DEFAULT); > +} > + > +static void > +remove_mappable_node(struct drm_mm_node *node) > +{ > + drm_mm_remove_node(node); > +} > + > /* some bookkeeping */ > static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv, > size_t size) > @@ -765,21 +783,34 @@ fast_user_write(struct io_mapping *mapping, > * @file: drm file pointer > */ > static int > -i915_gem_gtt_pwrite_fast(struct drm_device *dev, > +i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915, Please follow-up with a patch fixing kernel doc for this function as kbuild robot noticed yesterday. Regards, Tvrtko
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index eae8d7a..452178c 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -60,6 +60,24 @@ static bool cpu_write_needs_clflush(struct drm_i915_gem_object *obj) return obj->pin_display; } +static int +insert_mappable_node(struct drm_i915_private *i915, + struct drm_mm_node *node, u32 size) +{ + memset(node, 0, sizeof(*node)); + return drm_mm_insert_node_in_range_generic(&i915->ggtt.base.mm, node, + size, 0, 0, 0, + i915->ggtt.mappable_end, + DRM_MM_SEARCH_DEFAULT, + DRM_MM_CREATE_DEFAULT); +} + +static void +remove_mappable_node(struct drm_mm_node *node) +{ + drm_mm_remove_node(node); +} + /* some bookkeeping */ static void i915_gem_info_add_obj(struct drm_i915_private *dev_priv, size_t size) @@ -765,21 +783,34 @@ fast_user_write(struct io_mapping *mapping, * @file: drm file pointer */ static int -i915_gem_gtt_pwrite_fast(struct drm_device *dev, +i915_gem_gtt_pwrite_fast(struct drm_i915_private *i915, struct drm_i915_gem_object *obj, struct drm_i915_gem_pwrite *args, struct drm_file *file) { - struct drm_i915_private *dev_priv = to_i915(dev); - struct i915_ggtt *ggtt = &dev_priv->ggtt; - ssize_t remain; - loff_t offset, page_base; + struct i915_ggtt *ggtt = &i915->ggtt; + struct drm_mm_node node; + uint64_t remain, offset; char __user *user_data; - int page_offset, page_length, ret; + int ret; ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_MAPPABLE | PIN_NONBLOCK); - if (ret) - goto out; + if (ret) { + ret = insert_mappable_node(i915, &node, PAGE_SIZE); + if (ret) + goto out; + + ret = i915_gem_object_get_pages(obj); + if (ret) { + remove_mappable_node(&node); + goto out; + } + + i915_gem_object_pin_pages(obj); + } else { + node.start = i915_gem_obj_ggtt_offset(obj); + node.allocated = false; + } ret = i915_gem_object_set_to_gtt_domain(obj, true); if (ret) @@ -789,26 +820,32 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, if (ret) goto out_unpin; - user_data = u64_to_user_ptr(args->data_ptr); - remain = args->size; - - offset = i915_gem_obj_ggtt_offset(obj) + args->offset; - intel_fb_obj_invalidate(obj, ORIGIN_GTT); + obj->dirty = true; - while (remain > 0) { + user_data = u64_to_user_ptr(args->data_ptr); + offset = args->offset; + remain = args->size; + while (remain) { /* Operation in this page * * page_base = page offset within aperture * page_offset = offset within page * page_length = bytes to copy for this page */ - page_base = offset & PAGE_MASK; - page_offset = offset_in_page(offset); - page_length = remain; - if ((page_offset + remain) > PAGE_SIZE) - page_length = PAGE_SIZE - page_offset; - + u32 page_base = node.start; + unsigned page_offset = offset_in_page(offset); + unsigned page_length = PAGE_SIZE - page_offset; + page_length = remain < page_length ? remain : page_length; + if (node.allocated) { + wmb(); /* flush the write before we modify the GGTT */ + ggtt->base.insert_page(&ggtt->base, + i915_gem_object_get_dma_address(obj, offset >> PAGE_SHIFT), + node.start, I915_CACHE_NONE, 0); + wmb(); /* flush modifications to the GGTT (insert_page) */ + } else { + page_base += offset & PAGE_MASK; + } /* If we get a fault while copying data, then (presumably) our * source page isn't available. Return the error and we'll * retry in the slow path. @@ -827,7 +864,16 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, out_flush: intel_fb_obj_flush(obj, false, ORIGIN_GTT); out_unpin: - i915_gem_object_ggtt_unpin(obj); + if (node.allocated) { + wmb(); + ggtt->base.clear_range(&ggtt->base, + node.start, node.size, + true); + i915_gem_object_unpin_pages(obj); + remove_mappable_node(&node); + } else { + i915_gem_object_ggtt_unpin(obj); + } out: return ret; } @@ -1095,7 +1141,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, if (obj->tiling_mode == I915_TILING_NONE && obj->base.write_domain != I915_GEM_DOMAIN_CPU && cpu_write_needs_clflush(obj)) { - ret = i915_gem_gtt_pwrite_fast(dev, obj, args, file); + ret = i915_gem_gtt_pwrite_fast(dev_priv, obj, args, file); /* Note that the gtt paths might fail with non-page-backed user * pointers (e.g. gtt mappings when moving data between * textures). Fallback to the shmem path in that case. */