All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Airlie <airlied@gmail.com>
To: dri-devel@lists.freedesktop.org, tzimmermann@suse.de
Cc: intel-xe@lists.freedesktop.org
Subject: [PATCH 9/9] iosys_map: embed the is_iomem bit into the pointer.
Date: Thu, 22 May 2025 16:52:18 +1000	[thread overview]
Message-ID: <20250522065519.318013-10-airlied@gmail.com> (raw)
In-Reply-To: <20250522065519.318013-1-airlied@gmail.com>

From: Dave Airlie <airlied@redhat.com>

This reduces this struct from 16 to 8 bytes, and it gets embedded
into a lot of things.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 include/linux/iosys-map.h | 30 ++++++++----------------------
 1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/include/linux/iosys-map.h b/include/linux/iosys-map.h
index a6c2cc9ca756..44479966ce24 100644
--- a/include/linux/iosys-map.h
+++ b/include/linux/iosys-map.h
@@ -99,29 +99,27 @@
  *	iosys_map_incr(&map, len); // go to first byte after the memcpy
  */
 
+#define _IOSYS_MAP_IS_IOMEM 1
 /**
  * struct iosys_map - Pointer to IO/system memory
  * @vaddr_iomem:	The buffer's address if in I/O memory
  * @vaddr:		The buffer's address if in system memory
- * @is_iomem:		True if the buffer is located in I/O memory, or false
- *			otherwise.
  */
 struct iosys_map {
 	union {
 		void __iomem *_vaddr_iomem;
 		void *_vaddr;
 	};
-	bool _is_iomem;
 };
 
 static inline bool iosys_map_is_iomem(const struct iosys_map *map)
 {
-	return map->_is_iomem;
+	return ((unsigned long)map->_vaddr) & _IOSYS_MAP_IS_IOMEM;
 }
 
 static inline void __iomem *iosys_map_ioptr(const struct iosys_map *map)
 {
-	return map->_vaddr_iomem;
+	return (void __iomem *)((unsigned long)map->_vaddr_iomem & ~_IOSYS_MAP_IS_IOMEM);
 }
 
 static inline void *iosys_map_ptr(const struct iosys_map *map)
@@ -136,7 +134,6 @@ static inline void *iosys_map_ptr(const struct iosys_map *map)
 #define IOSYS_MAP_INIT_VADDR(vaddr_)	\
 	{				\
 		._vaddr = (vaddr_),	\
-		._is_iomem = false,	\
 	}
 
 /**
@@ -145,8 +142,7 @@ static inline void *iosys_map_ptr(const struct iosys_map *map)
  */
 #define IOSYS_MAP_INIT_VADDR_IOMEM(vaddr_iomem_)	\
 	{						\
-		._vaddr_iomem = (vaddr_iomem_),		\
-		._is_iomem = true,			\
+		._vaddr_iomem = (void __iomem *)(((unsigned long)(vaddr_iomem_) | _IOSYS_MAP_IS_IOMEM)), \
 	}
 
 /**
@@ -198,7 +194,6 @@ static inline void *iosys_map_ptr(const struct iosys_map *map)
 static inline void iosys_map_set_vaddr(struct iosys_map *map, void *vaddr)
 {
 	map->_vaddr = vaddr;
-	map->_is_iomem = false;
 }
 
 /**
@@ -211,8 +206,7 @@ static inline void iosys_map_set_vaddr(struct iosys_map *map, void *vaddr)
 static inline void iosys_map_set_vaddr_iomem(struct iosys_map *map,
 					     void __iomem *vaddr_iomem)
 {
-	map->_vaddr_iomem = vaddr_iomem;
-	map->_is_iomem = true;
+	map->_vaddr_iomem = (void __iomem *)((unsigned long)vaddr_iomem | _IOSYS_MAP_IS_IOMEM);
 }
 
 /**
@@ -229,12 +223,9 @@ static inline void iosys_map_set_vaddr_iomem(struct iosys_map *map,
 static inline bool iosys_map_is_equal(const struct iosys_map *lhs,
 				      const struct iosys_map *rhs)
 {
-	if (lhs->_is_iomem != rhs->_is_iomem)
+	if (lhs->_vaddr != rhs->_vaddr)
 		return false;
-	else if (lhs->_is_iomem)
-		return lhs->_vaddr_iomem == rhs->_vaddr_iomem;
-	else
-		return lhs->_vaddr == rhs->_vaddr;
+	return true;
 }
 
 /**
@@ -279,12 +270,7 @@ static inline bool iosys_map_is_set(const struct iosys_map *map)
  */
 static inline void iosys_map_clear(struct iosys_map *map)
 {
-	if (map->_is_iomem) {
-		map->_vaddr_iomem = NULL;
-		map->_is_iomem = false;
-	} else {
-		map->_vaddr = NULL;
-	}
+	map->_vaddr = NULL;
 }
 
 /**
-- 
2.49.0


  parent reply	other threads:[~2025-05-22  6:57 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-22  6:52 iosys-map: refactor to reduce struct size Dave Airlie
2025-05-22  6:52 ` [PATCH 1/9] iosys-map: add new accessor interfaces and use them internally Dave Airlie
2025-05-22 11:58   ` Thomas Zimmermann
2025-05-22 13:34     ` Lucas De Marchi
2025-05-22 14:00       ` Thomas Zimmermann
2025-05-22  6:52 ` [PATCH 2/9] udmabuf: use new iosys_map accessors Dave Airlie
2025-05-22  6:52 ` [PATCH 3/9] firmware/tegra: avoid accessing iosys_map internals Dave Airlie
2025-05-23  0:32   ` kernel test robot
2025-05-22  6:52 ` [PATCH 4/9] drm/xe: avoid accessing internals of iosys_map Dave Airlie
2025-05-22 13:56   ` Lucas De Marchi
2025-05-22  6:52 ` [PATCH 5/9] drm/qxl: avoid accessing iosys_map internals Dave Airlie
2025-05-22 13:39   ` Lucas De Marchi
2025-05-22  6:52 ` [PATCH 6/9] drm/ttm: " Dave Airlie
2025-05-22  6:52 ` [PATCH 7/9] drm: " Dave Airlie
2025-05-22  6:52 ` [PATCH 8/9] iosys: hide internal details of implementation Dave Airlie
2025-05-22 12:05   ` Thomas Zimmermann
2025-05-22 23:30   ` kernel test robot
2025-05-22  6:52 ` Dave Airlie [this message]
2025-05-22  8:48   ` [PATCH 9/9] iosys_map: embed the is_iomem bit into the pointer Jani Nikula
2025-05-22 12:10   ` Thomas Zimmermann
2025-05-22 15:09   ` Lucas De Marchi
2025-05-22 20:32     ` Dave Airlie
2025-05-22 21:05       ` Lucas De Marchi
2025-05-23 12:31         ` Jocelyn Falempe
2025-05-26  6:39     ` Thomas Zimmermann
2025-05-26  7:58       ` Dave Airlie
2025-05-26  8:14         ` Thomas Zimmermann
2025-05-22  7:13 ` iosys-map: refactor to reduce struct size Dave Airlie
2025-05-22  7:20 ` ✓ CI.Patch_applied: success for series starting with [1/9] iosys-map: add new accessor interfaces and use them internally Patchwork
2025-05-22  7:20 ` ✗ CI.checkpatch: warning " Patchwork
2025-05-22  7:21 ` ✗ CI.KUnit: failure " Patchwork
2025-05-22 12:00 ` iosys-map: refactor to reduce struct size Thomas Zimmermann
2025-05-22 13:59 ` Lucas De Marchi
2025-06-27 17:31 ` Lucas De Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250522065519.318013-10-airlied@gmail.com \
    --to=airlied@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.