Claw back optimised IS_PLATFORM checks
Subsystems (2)
Tvrtko Ursulin
maintainercover Claw back optimised IS_PLATFORM checks
From: Tvrtko Ursulin <[email protected]>
Some time ago we stopped letting the compiler merge code like IS_SKYLAKE || IS_KABYLAKE || IS_... into a single conditional in all cases. This series quickly restores that for a nice overall saving and hopefully with a bearable impact on the code base.
text data bss dec hex filename
-1460454 60014 3656 1524124 17419c drivers/gpu/drm/i915/i915.ko +1459260 60026 3656 1522942 173cfe drivers/gpu/drm/i915/i915.ko
Tvrtko Ursulin (3):
drm/i915: Add IS_PLATFORM macro
drm/i915: Compact device info access by a small re-ordering drm/i915: Allow optimized platform checks
drivers/gpu/drm/i915/i915_drv.c | 6 ++++ drivers/gpu/drm/i915/i915_drv.h | 73 +++++++++++++++++++++++------------------ 2 files changed, 47 insertions(+), 32 deletions(-)
Signature · 6 lines
2.9.5 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Tvrtko Ursulin
maintainerPATCH 1/3 drm/i915: Add IS_PLATFORM macro
From: Tvrtko Ursulin <[email protected]>
This will allow some code re-organization in a following patch.
--- drivers/gpu/drm/i915/i915_drv.h | 52 +++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-)
drivers/gpu/drm/i915/i915_drv.h +27 -25
@@ -2978,37 +2978,39 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_I830 (dev_priv) ((dev_priv)->info.platform == INTEL_I830) -#define IS_I845G (dev_priv) ((dev_priv)->info.platform == INTEL_I845G) -#define IS_I85X (dev_priv) ((dev_priv)->info.platform == INTEL_I85X) -#define IS_I865G (dev_priv) ((dev_priv)->info.platform == INTEL_I865G) -#define IS_I915G (dev_priv) ((dev_priv)->info.platform == INTEL_I915G) -#define IS_I915GM (dev_priv) ((dev_priv)->info.platform == INTEL_I915GM) -#define IS_I945G (dev_priv) ((dev_priv)->info.platform == INTEL_I945G) -#define IS_I945GM (dev_priv) ((dev_priv)->info.platform == INTEL_I945GM) -#define IS_I965G (dev_priv) ((dev_priv)->info.platform == INTEL_I965G) -#define IS_I965GM (dev_priv) ((dev_priv)->info.platform == INTEL_I965GM) -#define IS_G45 (dev_priv) ((dev_priv)->info.platform == INTEL_G45) -#define IS_GM45 (dev_priv) ((dev_priv)->info.platform == INTEL_GM45) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) + +#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830) +#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G) +#define IS_I85X (dev_priv) IS_PLATFORM(dev_priv, INTEL_I85X) +#define IS_I865G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G) +#define IS_I915G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G) +#define IS_I915GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I915GM) +#define IS_I945G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I945G) +#define IS_I945GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I945GM) +#define IS_I965G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I965G) +#define IS_I965GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I965GM) +#define IS_G45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G45) +#define IS_GM45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_GM45)#define IS_G4X (dev_priv) (IS_G45(dev_priv) || IS_GM45(dev_priv))#define IS_PINEVIEW_G (dev_priv) (INTEL_DEVID(dev_priv) == 0xa001)#define IS_PINEVIEW_M (dev_priv) (INTEL_DEVID(dev_priv) == 0xa011) -#define IS_PINEVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_PINEVIEW) -#define IS_G33 (dev_priv) ((dev_priv)->info.platform == INTEL_G33) +#define IS_PINEVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_PINEVIEW) +#define IS_G33 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G33)#define IS_IRONLAKE_M (dev_priv) (INTEL_DEVID(dev_priv) == 0x0046) -#define IS_IVYBRIDGE (dev_priv) ((dev_priv)->info.platform == INTEL_IVYBRIDGE) +#define IS_IVYBRIDGE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)#define IS_IVB_GT1 (dev_priv) (IS_IVYBRIDGE(dev_priv) && \ (dev_priv)->info.gt == 1) -#define IS_VALLEYVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_VALLEYVIEW) -#define IS_CHERRYVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_CHERRYVIEW) -#define IS_HASWELL (dev_priv) ((dev_priv)->info.platform == INTEL_HASWELL) -#define IS_BROADWELL (dev_priv) ((dev_priv)->info.platform == INTEL_BROADWELL) -#define IS_SKYLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_SKYLAKE) -#define IS_BROXTON (dev_priv) ((dev_priv)->info.platform == INTEL_BROXTON) -#define IS_KABYLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_KABYLAKE) -#define IS_GEMINILAKE (dev_priv) ((dev_priv)->info.platform == INTEL_GEMINILAKE) -#define IS_COFFEELAKE (dev_priv) ((dev_priv)->info.platform == INTEL_COFFEELAKE) -#define IS_CANNONLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_CANNONLAKE) +#define IS_VALLEYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW) +#define IS_CHERRYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW) +#define IS_HASWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_HASWELL) +#define IS_BROADWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_BROADWELL) +#define IS_SKYLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_SKYLAKE) +#define IS_BROXTON (dev_priv) IS_PLATFORM(dev_priv, INTEL_BROXTON) +#define IS_KABYLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_KABYLAKE) +#define IS_GEMINILAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_GEMINILAKE) +#define IS_COFFEELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_COFFEELAKE) +#define IS_CANNONLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)#define IS_MOBILE (dev_priv) ((dev_priv)->info.is_mobile)#define IS_HSW_EARLY_SDV (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
Signature · 6 lines
2.9.5 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 1/3] drm/i915: Add IS_PLATFORM macro
Quoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
This will allow some code re-organization in a following patch.
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>
Quoted 73 lines
--- drivers/gpu/drm/i915/i915_drv.h | 52 +++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-)drivers/gpu/drm/i915/i915_drv.h +27
-25@@ -2978,37 +2978,39 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_I830 (dev_priv) ((dev_priv)->info.platform == INTEL_I830) -#define IS_I845G (dev_priv) ((dev_priv)->info.platform == INTEL_I845G) -#define IS_I85X (dev_priv) ((dev_priv)->info.platform == INTEL_I85X) -#define IS_I865G (dev_priv) ((dev_priv)->info.platform == INTEL_I865G) -#define IS_I915G (dev_priv) ((dev_priv)->info.platform == INTEL_I915G) -#define IS_I915GM (dev_priv) ((dev_priv)->info.platform == INTEL_I915GM) -#define IS_I945G (dev_priv) ((dev_priv)->info.platform == INTEL_I945G) -#define IS_I945GM (dev_priv) ((dev_priv)->info.platform == INTEL_I945GM) -#define IS_I965G (dev_priv) ((dev_priv)->info.platform == INTEL_I965G) -#define IS_I965GM (dev_priv) ((dev_priv)->info.platform == INTEL_I965GM) -#define IS_G45 (dev_priv) ((dev_priv)->info.platform == INTEL_G45) -#define IS_GM45 (dev_priv) ((dev_priv)->info.platform == INTEL_GM45) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) + +#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830) +#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G) +#define IS_I85X (dev_priv) IS_PLATFORM(dev_priv, INTEL_I85X) +#define IS_I865G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G) +#define IS_I915G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G) +#define IS_I915GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I915GM) +#define IS_I945G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I945G) +#define IS_I945GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I945GM) +#define IS_I965G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I965G) +#define IS_I965GM (dev_priv) IS_PLATFORM(dev_priv, INTEL_I965GM) +#define IS_G45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G45) +#define IS_GM45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_GM45)#define IS_G4X (dev_priv) (IS_G45(dev_priv) || IS_GM45(dev_priv))#define IS_PINEVIEW_G (dev_priv) (INTEL_DEVID(dev_priv) == 0xa001)#define IS_PINEVIEW_M (dev_priv) (INTEL_DEVID(dev_priv) == 0xa011) -#define IS_PINEVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_PINEVIEW) -#define IS_G33 (dev_priv) ((dev_priv)->info.platform == INTEL_G33) +#define IS_PINEVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_PINEVIEW) +#define IS_G33 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G33)#define IS_IRONLAKE_M (dev_priv) (INTEL_DEVID(dev_priv) == 0x0046) -#define IS_IVYBRIDGE (dev_priv) ((dev_priv)->info.platform == INTEL_IVYBRIDGE) +#define IS_IVYBRIDGE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)#define IS_IVB_GT1 (dev_priv) (IS_IVYBRIDGE(dev_priv) && \ (dev_priv)->info.gt == 1) -#define IS_VALLEYVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_VALLEYVIEW) -#define IS_CHERRYVIEW (dev_priv) ((dev_priv)->info.platform == INTEL_CHERRYVIEW) -#define IS_HASWELL (dev_priv) ((dev_priv)->info.platform == INTEL_HASWELL) -#define IS_BROADWELL (dev_priv) ((dev_priv)->info.platform == INTEL_BROADWELL) -#define IS_SKYLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_SKYLAKE) -#define IS_BROXTON (dev_priv) ((dev_priv)->info.platform == INTEL_BROXTON) -#define IS_KABYLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_KABYLAKE) -#define IS_GEMINILAKE (dev_priv) ((dev_priv)->info.platform == INTEL_GEMINILAKE) -#define IS_COFFEELAKE (dev_priv) ((dev_priv)->info.platform == INTEL_COFFEELAKE) -#define IS_CANNONLAKE (dev_priv) ((dev_priv)->info.platform == INTEL_CANNONLAKE) +#define IS_VALLEYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW) +#define IS_CHERRYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW) +#define IS_HASWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_HASWELL) +#define IS_BROADWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_BROADWELL) +#define IS_SKYLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_SKYLAKE) +#define IS_BROXTON (dev_priv) IS_PLATFORM(dev_priv, INTEL_BROXTON) +#define IS_KABYLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_KABYLAKE) +#define IS_GEMINILAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_GEMINILAKE) +#define IS_COFFEELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_COFFEELAKE) +#define IS_CANNONLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)#define IS_MOBILE (dev_priv) ((dev_priv)->info.is_mobile)#define IS_HSW_EARLY_SDV (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
Signature · 5 lines
Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Tvrtko Ursulin
maintainerPATCH 2/3 drm/i915: Compact device info access by a small re-ordering
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
More effort to align members on 4-byte boundary helps with code size a tiny bit:
text data bss dec hex filename
-1460454 60014 3656 1524124 17419c drivers/gpu/drm/i915/i915.ko +1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.ko
--- drivers/gpu/drm/i915/i915_drv.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
drivers/gpu/drm/i915/i915_drv.h +13 -7
@@ -852,21 +852,27 @@ enum intel_platform { };struct intel_device_info { -u32 display_mmio_offset;u16 device_id; -u8 num_pipes; -u8 num_sprites[I915_MAX_PIPES ]; -u8 num_scalers[I915_MAX_PIPES ]; -u8 gen;u16 gen_mask; -enum intel_platform platform; + +u8 gen;u8 gt;/* GT number, 0 if undefined */ -u8 ring_mask;/* Rings supported by the HW */ u8 num_rings; +u8 ring_mask;/* Rings supported by the HW */ + +enum intel_platform platform; + +u32 display_mmio_offset; + +u8 num_pipes; +u8 num_sprites[I915_MAX_PIPES ]; +u8 num_scalers[I915_MAX_PIPES ]; +#define DEFINE_FLAG (name) u8 name:1DEV_INFO_FOR_EACH_FLAG (DEFINE_FLAG);#undef DEFINE_FLAGu16 ddb_size;/* in blocks */ +/* Register offsets for the various display pipes and transcoders */ int pipe_offsets[I915_MAX_TRANSCODERS ];int trans_offsets[I915_MAX_TRANSCODERS ];
Signature · 6 lines
2.9.5 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 2/3] drm/i915: Compact device info access by a small re-ordering
Quoted 11 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
More effort to align members on 4-byte boundary helps with code size a tiny bit:
text data bss dec hex filename
-1460454 60014 3656 1524124 17419c drivers/gpu/drm/i915/i915.ko +1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.koSigned-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>
Quoted 43 lines
--- drivers/gpu/drm/i915/i915_drv.h | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)drivers/gpu/drm/i915/i915_drv.h +13
-7@@ -852,21 +852,27 @@ enum intel_platform { };struct intel_device_info { -u32 display_mmio_offset;u16 device_id; -u8 num_pipes; -u8 num_sprites[I915_MAX_PIPES ]; -u8 num_scalers[I915_MAX_PIPES ]; -u8 gen;u16 gen_mask; -enum intel_platform platform; + +u8 gen;u8 gt;/* GT number, 0 if undefined */ -u8 ring_mask;/* Rings supported by the HW */ u8 num_rings; +u8 ring_mask;/* Rings supported by the HW */ + +enum intel_platform platform; + +u32 display_mmio_offset; + +u8 num_pipes; +u8 num_sprites[I915_MAX_PIPES ]; +u8 num_scalers[I915_MAX_PIPES ]; +#define DEFINE_FLAG (name) u8 name:1DEV_INFO_FOR_EACH_FLAG (DEFINE_FLAG);#undef DEFINE_FLAGu16 ddb_size;/* in blocks */ +/* Register offsets for the various display pipes and transcoders */ int pipe_offsets[I915_MAX_TRANSCODERS ];int trans_offsets[I915_MAX_TRANSCODERS ];
Signature · 5 lines
Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Tvrtko Ursulin
maintainerPATCH 3/3 drm/i915: Allow optimized platform checks
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
If we store the platform as a bitmask, and convert the IS_PLATFORM macro to use it, we allow the compiler to merge the IS_PLATFORM(a) || IS_PLATFORM(b) || ... checks into a single conditional.
Even with the added BUG_ON this saves almost 1k of text:
text data bss dec hex filename
-1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.ko +1459260 60026 3656 1522942 173cfe drivers/gpu/drm/i915/i915.ko
--- drivers/gpu/drm/i915/i915_drv.c | 6 ++++++ drivers/gpu/drm/i915/i915_drv.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-)
drivers/gpu/drm/i915/i915_drv.c +6 -0
@@ -869,6 +869,12 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,memcpy (device_info, match_info,sizeof (*device_info)); device_info->device_id = dev_priv->drm.pdev->device; +BUILD_BUG_ON (sizeof (device_info->platform_mask) *BITS_PER_BYTE < + (INTEL_MAX_PLATFORMS -1 )); +BUG_ON (device_info->platform ==0 || + device_info->platform >=INTEL_MAX_PLATFORMS ); + device_info->platform_mask =BIT (device_info->platform -1 ); +BUG_ON (device_info->gen >sizeof (device_info->gen_mask) *BITS_PER_BYTE ); device_info->gen_mask =BIT (device_info->gen -1 );
drivers/gpu/drm/i915/i915_drv.h +2 -1
@@ -861,6 +861,7 @@ struct intel_device_info {u8 ring_mask;/* Rings supported by the HW */ enum intel_platform platform; +u32 platform_mask;u32 display_mmio_offset;
@@ -2984,7 +2985,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT((p) - 1))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
Signature · 6 lines
2.9.5 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 3/3] drm/i915: Allow optimized platform checks
Quoted 7 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
If we store the platform as a bitmask, and convert the
IS_PLATFORMmacro to use it, we allow the compiler to merge theIS_PLATFORM(a)||IS_PLATFORM(b)|| ... checks into a single conditional.
Quoted 5 lines
Even with the added
BUG_ONthis saves almost 1k of text:text data bss dec hex filename
-1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.ko +1459260 60026 3656 1522942 173cfe drivers/gpu/drm/i915/i915.ko
Forgot to say, this patch could also be called "32 platforms should be enough for everyone". :) Once we go over it (at 27 at the moment) we'd have to bump the platform_mask to u64 and the overall effect might be negative then. I better check that..
Regards,
Tvrtko
Quoted 38 lines
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 6 ++++++ drivers/gpu/drm/i915/i915_drv.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-)drivers/gpu/drm/i915/i915_drv.c +6
-0@@ -869,6 +869,12 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,memcpy (device_info, match_info,sizeof (*device_info)); device_info->device_id = dev_priv->drm.pdev->device; +BUILD_BUG_ON (sizeof (device_info->platform_mask) *BITS_PER_BYTE < + (INTEL_MAX_PLATFORMS -1 )); +BUG_ON (device_info->platform ==0 || + device_info->platform >=INTEL_MAX_PLATFORMS ); + device_info->platform_mask =BIT (device_info->platform -1 ); +BUG_ON (device_info->gen >sizeof (device_info->gen_mask) *BITS_PER_BYTE ); device_info->gen_mask =BIT (device_info->gen -1 );drivers/gpu/drm/i915/i915_drv.h +1
-0@@ -861,6 +861,7 @@ struct intel_device_info {u8 ring_mask;/* Rings supported by the HW */ enum intel_platform platform; +u32 platform_mask;u32 display_mmio_offset;
drivers/gpu/drm/i915/i915_drv.h intel_info(const struct drm_i915_private *dev_priv) · line 2991
Quoted 8 lines
drivers/gpu/drm/i915/i915_drv.h +1
-1@@ -2984,7 +2985,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT((p) - 1))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 3/3] drm/i915: Allow optimized platform checks
In reply to Tvrtko UrsulinQuoted 25 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
If we store the platform as a bitmask, and convert the
IS_PLATFORMmacro to use it, we allow the compiler to merge theIS_PLATFORM(a)||IS_PLATFORM(b)|| ... checks into a single conditional.Even with the added
BUG_ONthis saves almost 1k of text:text data bss dec hex filename
-1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.ko +1459260 60026 3656 1522942 173cfe drivers/gpu/drm/i915/i915.koSigned-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 6 ++++++ drivers/gpu/drm/i915/i915_drv.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-)drivers/gpu/drm/i915/i915_drv.c +0
-0
drivers/gpu/drm/i915/i915_drv.c static int i915_driver_init_early(struct drm_i915_private *dev_priv, · line 876
Quoted 8 lines
drivers/gpu/drm/i915/i915_drv.c +5
-0@@ -869,6 +869,12 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,memcpy (device_info, match_info,sizeof (*device_info)); device_info->device_id = dev_priv->drm.pdev->device; +BUILD_BUG_ON (sizeof (device_info->platform_mask) *BITS_PER_BYTE < + (INTEL_MAX_PLATFORMS -1 )); +BUG_ON (device_info->platform ==0 || + device_info->platform >=INTEL_MAX_PLATFORMS ); + device_info->platform_mask =BIT (device_info->platform -1 );
Please just lose the -1, pretty please?
Quoted 17 lines
drivers/gpu/drm/i915/i915_drv.c +1
-0+BUG_ON (device_info->gen >sizeof (device_info->gen_mask) *BITS_PER_BYTE ); device_info->gen_mask =BIT (device_info->gen -1 );drivers/gpu/drm/i915/i915_drv.h +1
-0@@ -861,6 +861,7 @@ struct intel_device_info {u8 ring_mask;/* Rings supported by the HW */ enum intel_platform platform; +u32 platform_mask;u32 display_mmio_offset;
drivers/gpu/drm/i915/i915_drv.h intel_info(const struct drm_i915_private *dev_priv) · line 2988
Quoted 5 lines
drivers/gpu/drm/i915/i915_drv.h +1
-1@@ -2984,7 +2985,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT((p) - 1))
What would the result be without platform_mask and just:
#define IS_PLATFORM(dev_priv, p) (BIT((dev_priv)->info.platform) & BIT(p))
BR,
Jani.
Quoted 3 lines
drivers/gpu/drm/i915/i915_drv.h +0
-0#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
Signature · 5 lines
Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 3/3] drm/i915: Allow optimized platform checks
Quoted 57 lines · Jani Nikula
Quoted 25 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
If we store the platform as a bitmask, and convert the
IS_PLATFORMmacro to use it, we allow the compiler to merge theIS_PLATFORM(a)||IS_PLATFORM(b)|| ... checks into a single conditional.Even with the added
BUG_ONthis saves almost 1k of text:text data bss dec hex filename
-1460254 60014 3656 1523924 1740d4 drivers/gpu/drm/i915/i915.ko +1459260 60026 3656 1522942 173cfe drivers/gpu/drm/i915/i915.koSigned-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 6 ++++++ drivers/gpu/drm/i915/i915_drv.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-)drivers/gpu/drm/i915/i915_drv.c +0
-0drivers/gpu/drm/i915/i915_drv.c static int i915_driver_init_early(struct drm_i915_private *dev_priv, · line 876
Quoted 8 lines
drivers/gpu/drm/i915/i915_drv.c +5
-0@@ -869,6 +869,12 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,memcpy (device_info, match_info,sizeof (*device_info)); device_info->device_id = dev_priv->drm.pdev->device; +BUILD_BUG_ON (sizeof (device_info->platform_mask) *BITS_PER_BYTE < + (INTEL_MAX_PLATFORMS -1 )); +BUG_ON (device_info->platform ==0 || + device_info->platform >=INTEL_MAX_PLATFORMS ); + device_info->platform_mask =BIT (device_info->platform -1 );Please just lose the -1, pretty please?
Quoted 20 lines
drivers/gpu/drm/i915/i915_drv.c +1
-0+BUG_ON (device_info->gen >sizeof (device_info->gen_mask) *BITS_PER_BYTE ); device_info->gen_mask =BIT (device_info->gen -1 );drivers/gpu/drm/i915/i915_drv.h +1
-0@@ -861,6 +861,7 @@ struct intel_device_info {u8 ring_mask;/* Rings supported by the HW */ enum intel_platform platform; +u32 platform_mask;u32 display_mmio_offset;@@ -2984,7 +2985,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until))
Quoted 6 lines
drivers/gpu/drm/i915/i915_drv.h intel_info(const struct drm_i915_private *dev_priv) · line 2988
Quoted 2 lines
drivers/gpu/drm/i915/i915_drv.h +1
-1-#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT((p) - 1))What would the result be without
platform_maskand just:#define
IS_PLATFORM(dev_priv, p)(BIT((dev_priv)->info.platform) & BIT(p))
More code I'm afraid. But the problem of 32 platforms limit makes it problematic for me. Because I checked, and going to u64 for the platform_mask grows the code 100-200 bytes over the starting point. We'd keep the single conditional advantage but I don't know, feels like not worth it in that case. It could only last for a couple years before we would need to go to u64.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [PATCH 3/3] drm/i915: Allow optimized platform checks
Quoted 61 lines · Tvrtko Ursulin
Quoted 60 lines · Jani Nikula
Quoted 27 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
If we store the platform as a bitmask, and convert the
IS_PLATFORMmacro to use it, we allow the compiler to merge theIS_PLATFORM(a)||IS_PLATFORM(b)|| ... checks into a single conditional.Even with the added
BUG_ONthis saves almost 1k of text:text data bss dec hex filename -1460254 60014 3656 1523924 1740d4
drivers/gpu/drm/i915/i915.ko
+1459260 60026 3656 1522942 173cfedrivers/gpu/drm/i915/i915.koSigned-off-by Tvrtko Ursulin <[email protected]>Cc Jani Nikula <[email protected]>---
drivers/gpu/drm/i915/i915_drv.c| 6 ++++++drivers/gpu/drm/i915/i915_drv.h| 3 ++-2 files changed, 8 insertions(+), 1 deletion(-)drivers/gpu/drm/i915/i915_drv.c +0
-0drivers/gpu/drm/i915/i915_drv.c static int i915_driver_init_early(struct · line 875
Quoted 7 lines
drivers/gpu/drm/i915/i915_drv.c +4
-0@@ -869,6 +869,12 @@ static int i915_driver_init_early(structdrm_i915_private *dev_priv, memcpy(device_info, match_info, sizeof(*device_info)); device_info->device_id = dev_priv->drm.pdev->device; + BUILD_BUG_ON(sizeof(device_info->platform_mask) * BITS_PER_BYTE < + (INTEL_MAX_PLATFORMS - 1)); + BUG_ON(device_info->platform == 0 >>> + device_info->platform >= INTEL_MAX_PLATFORMS); + device_info->platform_mask = BIT(device_info->platform - 1);Please just lose the -1, pretty please?
Quoted 13 lines
drivers/gpu/drm/i915/i915_drv.c +1
-0+ BUG_ON(device_info->gen > sizeof(device_info->gen_mask) * BITS_PER_BYTE); device_info->gen_mask = BIT(device_info->gen - 1);drivers/gpu/drm/i915/i915_drv.h +0
-0@@ -861,6 +861,7 @@ struct intel_device_info {u8
ring_mask; /* Rings supported by the HW */ enumintel_platformplatform;
+ u32platform_mask;
u32display_mmio_offset;drivers/gpu/drm/i915/i915_drv.h intel_info(const struct drm_i915_private · line 2989
Quoted 6 lines
drivers/gpu/drm/i915/i915_drv.h +1
-1@@ -2984,7 +2985,7 @@ intel_info(const struct drm_i915_private *dev_priv) #define IS_REVID(p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform == (p)) +#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT((p) - 1))What would the result be without
platform_maskand just:
Quoted 3 lines
Quoted 1 line
#define
IS_PLATFORM(dev_priv, p)(BIT((dev_priv)->info.platform) & BIT(p))More code I'm afraid. But the problem of 32 platforms limit makes it problematic for me. Because I checked, and going to u64 for the
platform_maskgrows the code 100-200 bytes over the starting point. We'd keep the single conditional advantage but I don't know, feels like not worth it in that case. It could only last for a couple years before we would need to go to u64.
On the other hand we could take this, and by the time would need to grown the mask field, we can a) enjoy the size saving, b) by that time new platform code will dwarf the 100-200 bytes going to u64 will add, and c) 100-200 bytes might even turn to a gain again, since new or-ed IS_platform checks will appear. Thoughts?
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI✓ Fi.CI.BAT: success for Claw back optimised IS_PLATFORM checks
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Claw back optimised IS_PLATFORM checks
URL : https://patchwork.freedesktop.org/series/30647/
State : success
== Summary ==
Series 30647v1 Claw back optimised IS_PLATFORM checks
https://patchwork.freedesktop.org/api/1.0/series/30647/revisions/1/mbox/
Test chamelium:
Subgroup dp-edid-read:
pass -> FAIL (fi-kbl-7500u) fdo#102672 +1
Subgroup dp-crc-fast:
pass -> DMESG-FAIL (fi-kbl-7500u) fdo#102514
Test kms_cursor_legacy:
Subgroup basic-busy-flip-before-cursor-atomic:
pass -> FAIL (fi-snb-2600) fdo#100215 +1
Test pm_rpm:
Subgroup basic-rte:
pass -> DMESG-WARN (fi-cfl-s) fdo#102294
Test drv_module_reload:
Subgroup basic-reload:
dmesg-warn -> PASS (fi-glk-1) fdo#102777fdo#102672 https://bugs.freedesktop.org/show_bug.cgi?id=102672
fdo#102514 https://bugs.freedesktop.org/show_bug.cgi?id=102514
fdo#100215 https://bugs.freedesktop.org/show_bug.cgi?id=100215
fdo#102294 https://bugs.freedesktop.org/show_bug.cgi?id=102294
fdo#102777 https://bugs.freedesktop.org/show_bug.cgi?id=102777
fi-bdw-5557u total:289 pass:268 dwarn:0 dfail:0 fail:0 skip:21 time:452s fi-bdw-gvtdvm total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:466s fi-blb-e6850 total:289 pass:224 dwarn:1 dfail:0 fail:0 skip:64 time:419s fi-bsw-n3050 total:289 pass:243 dwarn:0 dfail:0 fail:0 skip:46 time:507s fi-bwr-2160 total:289 pass:184 dwarn:0 dfail:0 fail:0 skip:105 time:276s fi-bxt-j4205 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:508s fi-byt-j1900 total:289 pass:254 dwarn:1 dfail:0 fail:0 skip:34 time:491s fi-byt-n2820 total:289 pass:250 dwarn:1 dfail:0 fail:0 skip:38 time:494s fi-cfl-s total:289 pass:222 dwarn:35 dfail:0 fail:0 skip:32 time:535s fi-elk-e7500 total:289 pass:230 dwarn:0 dfail:0 fail:0 skip:59 time:419s fi-glk-1 total:289 pass:260 dwarn:0 dfail:0 fail:0 skip:29 time:561s fi-hsw-4770 total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:426s fi-hsw-4770r total:289 pass:263 dwarn:0 dfail:0 fail:0 skip:26 time:403s fi-ilk-650 total:289 pass:229 dwarn:0 dfail:0 fail:0 skip:60 time:426s fi-ivb-3520m total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:489s fi-ivb-3770 total:289 pass:261 dwarn:0 dfail:0 fail:0 skip:28 time:463s fi-kbl-7500u total:289 pass:262 dwarn:1 dfail:1 fail:1 skip:24 time:473s fi-kbl-7560u total:289 pass:270 dwarn:0 dfail:0 fail:0 skip:19 time:573s fi-kbl-r total:289 pass:262 dwarn:0 dfail:0 fail:0 skip:27 time:588s fi-skl-6260u total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:451s fi-skl-6700k total:289 pass:265 dwarn:0 dfail:0 fail:0 skip:24 time:746s fi-skl-6770hq total:289 pass:269 dwarn:0 dfail:0 fail:0 skip:20 time:494s fi-skl-gvtdvm total:289 pass:266 dwarn:0 dfail:0 fail:0 skip:23 time:469s fi-snb-2520m total:289 pass:251 dwarn:0 dfail:0 fail:0 skip:38 time:567s fi-snb-2600 total:289 pass:249 dwarn:0 dfail:0 fail:1 skip:39 time:417s
85e28edde5bfb81a40cc95ce27cd84230114d6f0 drm-tip: 2017y-09m-19d-23h-07m-57s UTC integration manifest 2d28cb18ba11 drm/i915: Allow optimized platform checks33348eb5a828 drm/i915: Compact device info access by a small re-ordering 1e6aa77c6f95 drm/i915: Add IS_PLATFORM macro
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_5763/
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI✗ Fi.CI.IGT: failure for Claw back optimised IS_PLATFORM checks
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: Claw back optimised IS_PLATFORM checks
URL : https://patchwork.freedesktop.org/series/30647/
State : failure
== Summary ==
Test kms_cursor_legacy:
Subgroup cursor-vs-flip-toggle:
pass -> FAIL (shard-hsw)
Test kms_setmode:
Subgroup basic:
fail -> PASS (shard-hsw) fdo#99912
Test kms_frontbuffer_tracking:
Subgroup fbc-1p-primscrn-pri-indfb-draw-pwrite:
pass -> SKIP (shard-hsw)
Test perf:
Subgroup blocking:
fail -> PASS (shard-hsw) fdo#102252fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
shard-hsw total:2317 pass:1243 dwarn:3 dfail:0 fail:13 skip:1058 time:9555s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_5763/shards.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx