Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afe722be authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915: io unmap functions want __iomem



Don't cast away the __iomem from the io_mapping functions so that
sparse won't be so unhappy when we pass the pointer to the unmap
functions. Instead let's move the cast to where we actually use the
pointer.

Fixes the following sparse warnings:
i915_gem.c:1022:33: warning: incorrect type in argument 1 (different address spaces)
i915_gem.c:1022:33:    expected void [noderef] <asn:2>*vaddr
i915_gem.c:1022:33:    got void *[assigned] vaddr
i915_gem.c:1027:34: warning: incorrect type in argument 1 (different address spaces)
i915_gem.c:1027:34:    expected void [noderef] <asn:2>*vaddr
i915_gem.c:1027:34:    got void *[assigned] vaddr
i915_gem.c:1199:33: warning: incorrect type in argument 1 (different address spaces)
i915_gem.c:1199:33:    expected void [noderef] <asn:2>*vaddr
i915_gem.c:1199:33:    got void *[assigned] vaddr
i915_gem.c:1204:34: warning: incorrect type in argument 1 (different address spaces)
i915_gem.c:1204:34:    expected void [noderef] <asn:2>*vaddr
i915_gem.c:1204:34:    got void *[assigned] vaddr

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20170901171252.31025-2-ville.syrjala@linux.intel.com


Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent c23aa71b
Loading
Loading
Loading
Loading
+15 −12
Original line number Original line Diff line number Diff line
@@ -1013,17 +1013,20 @@ gtt_user_read(struct io_mapping *mapping,
	      loff_t base, int offset,
	      loff_t base, int offset,
	      char __user *user_data, int length)
	      char __user *user_data, int length)
{
{
	void *vaddr;
	void __iomem *vaddr;
	unsigned long unwritten;
	unsigned long unwritten;


	/* We can use the cpu mem copy function because this is X86. */
	/* We can use the cpu mem copy function because this is X86. */
	vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base);
	vaddr = io_mapping_map_atomic_wc(mapping, base);
	unwritten = __copy_to_user_inatomic(user_data, vaddr + offset, length);
	unwritten = __copy_to_user_inatomic(user_data,
					    (void __force *)vaddr + offset,
					    length);
	io_mapping_unmap_atomic(vaddr);
	io_mapping_unmap_atomic(vaddr);
	if (unwritten) {
	if (unwritten) {
		vaddr = (void __force *)
		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
			io_mapping_map_wc(mapping, base, PAGE_SIZE);
		unwritten = copy_to_user(user_data,
		unwritten = copy_to_user(user_data, vaddr + offset, length);
					 (void __force *)vaddr + offset,
					 length);
		io_mapping_unmap(vaddr);
		io_mapping_unmap(vaddr);
	}
	}
	return unwritten;
	return unwritten;
@@ -1189,18 +1192,18 @@ ggtt_write(struct io_mapping *mapping,
	   loff_t base, int offset,
	   loff_t base, int offset,
	   char __user *user_data, int length)
	   char __user *user_data, int length)
{
{
	void *vaddr;
	void __iomem *vaddr;
	unsigned long unwritten;
	unsigned long unwritten;


	/* We can use the cpu mem copy function because this is X86. */
	/* We can use the cpu mem copy function because this is X86. */
	vaddr = (void __force *)io_mapping_map_atomic_wc(mapping, base);
	vaddr = io_mapping_map_atomic_wc(mapping, base);
	unwritten = __copy_from_user_inatomic_nocache(vaddr + offset,
	unwritten = __copy_from_user_inatomic_nocache((void __force *)vaddr + offset,
						      user_data, length);
						      user_data, length);
	io_mapping_unmap_atomic(vaddr);
	io_mapping_unmap_atomic(vaddr);
	if (unwritten) {
	if (unwritten) {
		vaddr = (void __force *)
		vaddr = io_mapping_map_wc(mapping, base, PAGE_SIZE);
			io_mapping_map_wc(mapping, base, PAGE_SIZE);
		unwritten = copy_from_user((void __force *)vaddr + offset,
		unwritten = copy_from_user(vaddr + offset, user_data, length);
					   user_data, length);
		io_mapping_unmap(vaddr);
		io_mapping_unmap(vaddr);
	}
	}