* [PATCH] drm: Promote drm_mm alignment to u64
@ 2016-11-27 19:05 Chris Wilson
2016-11-27 19:52 ` ✗ Fi.CI.BAT: failure for " Patchwork
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Chris Wilson @ 2016-11-27 19:05 UTC (permalink / raw)
To: dri-devel; +Cc: intel-gfx, Joonas Lahtinen
In places (e.g. i915.ko), the alignment is exported to userspace as u64
and there now exists hardware for which we can indeed utilize a u64
alignment. As such, we need to keep 64bit integers throughout when
handling alignment.
Testcase: igt/drm_mm/align64
Testcase: igt/gem_exec_alignment
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
---
drivers/gpu/drm/drm_mm.c | 37 +++++++++++++++++--------------------
include/drm/drm_mm.h | 16 ++++++++--------
2 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 025dcd8cadcb..b5b0b667677d 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -93,12 +93,12 @@
static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags flags);
static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -227,7 +227,7 @@ static void drm_mm_interval_tree_add_node(struct drm_mm_node *hole_node,
static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
enum drm_mm_allocator_flags flags)
{
@@ -246,10 +246,9 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
adj_start = adj_end - size;
if (alignment) {
- u64 tmp = adj_start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(adj_start, alignment, &rem);
if (rem) {
if (flags & DRM_MM_CREATE_TOP)
adj_start -= rem;
@@ -377,7 +376,7 @@ EXPORT_SYMBOL(drm_mm_reserve_node);
* 0 on success, -ENOSPC if there's no suitable hole.
*/
int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
enum drm_mm_search_flags sflags,
enum drm_mm_allocator_flags aflags)
@@ -399,7 +398,7 @@ EXPORT_SYMBOL(drm_mm_insert_node_generic);
static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
u64 start, u64 end,
enum drm_mm_allocator_flags flags)
@@ -424,10 +423,9 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
adj_start = adj_end - size;
if (alignment) {
- u64 tmp = adj_start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(adj_start, alignment, &rem);
if (rem) {
if (flags & DRM_MM_CREATE_TOP)
adj_start -= rem;
@@ -483,7 +481,7 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
* 0 on success, -ENOSPC if there's no suitable hole.
*/
int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
u64 start, u64 end,
enum drm_mm_search_flags sflags,
@@ -550,16 +548,15 @@ void drm_mm_remove_node(struct drm_mm_node *node)
}
EXPORT_SYMBOL(drm_mm_remove_node);
-static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
+static int check_free_hole(u64 start, u64 end, u64 size, u64 alignment)
{
if (end - start < size)
return 0;
if (alignment) {
- u64 tmp = start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(start, alignment, &rem);
if (rem)
start += alignment - rem;
}
@@ -569,7 +566,7 @@ static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags flags)
{
@@ -611,7 +608,7 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -729,7 +726,7 @@ EXPORT_SYMBOL(drm_mm_replace_node);
*/
void drm_mm_init_scan(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color)
{
mm->scan_color = color;
@@ -762,7 +759,7 @@ EXPORT_SYMBOL(drm_mm_init_scan);
*/
void drm_mm_init_scan_with_range(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end)
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
index dff4c507d2c2..dc9710c31a45 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
@@ -92,12 +92,12 @@ struct drm_mm {
struct rb_root interval_tree;
unsigned int scan_check_range : 1;
- unsigned scan_alignment;
+ unsigned int scanned_blocks;
unsigned long scan_color;
+ u64 scan_alignment;
u64 scan_size;
u64 scan_hit_start;
u64 scan_hit_end;
- unsigned scanned_blocks;
u64 scan_start;
u64 scan_end;
struct drm_mm_node *prev_scanned_node;
@@ -229,7 +229,7 @@ int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
int drm_mm_insert_node_generic(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags sflags,
enum drm_mm_allocator_flags aflags);
@@ -252,7 +252,7 @@ int drm_mm_insert_node_generic(struct drm_mm *mm,
static inline int drm_mm_insert_node(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
enum drm_mm_search_flags flags)
{
return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags,
@@ -262,7 +262,7 @@ static inline int drm_mm_insert_node(struct drm_mm *mm,
int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -289,7 +289,7 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
static inline int drm_mm_insert_node_in_range(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
u64 start,
u64 end,
enum drm_mm_search_flags flags)
@@ -331,11 +331,11 @@ __drm_mm_interval_first(struct drm_mm *mm, u64 start, u64 last);
void drm_mm_init_scan(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color);
void drm_mm_init_scan_with_range(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end);
--
2.10.2
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 5+ messages in thread
* ✗ Fi.CI.BAT: failure for drm: Promote drm_mm alignment to u64
2016-11-27 19:05 [PATCH] drm: Promote drm_mm alignment to u64 Chris Wilson
@ 2016-11-27 19:52 ` Patchwork
2016-11-28 9:32 ` [PATCH] " Joonas Lahtinen
2016-11-28 10:37 ` Christian König
2 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2016-11-27 19:52 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Series Details ==
Series: drm: Promote drm_mm alignment to u64
URL : https://patchwork.freedesktop.org/series/16002/
State : failure
== Summary ==
Series 16002v1 drm: Promote drm_mm alignment to u64
https://patchwork.freedesktop.org/api/1.0/series/16002/revisions/1/mbox/
Test gem_close_race:
Subgroup basic-threads:
pass -> INCOMPLETE (fi-skl-6700hq)
Test kms_flip:
Subgroup basic-flip-vs-wf_vblank:
pass -> FAIL (fi-ivb-3770)
Test kms_force_connector_basic:
Subgroup force-load-detect:
dmesg-warn -> PASS (fi-snb-2520m)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-a:
pass -> DMESG-WARN (fi-ilk-650)
fi-bdw-5557u total:245 pass:230 dwarn:0 dfail:0 fail:0 skip:15
fi-bsw-n3050 total:245 pass:205 dwarn:0 dfail:0 fail:0 skip:40
fi-bxt-t5700 total:245 pass:217 dwarn:0 dfail:0 fail:0 skip:28
fi-byt-j1900 total:245 pass:217 dwarn:0 dfail:0 fail:0 skip:28
fi-byt-n2820 total:245 pass:213 dwarn:0 dfail:0 fail:0 skip:32
fi-hsw-4770 total:245 pass:225 dwarn:0 dfail:0 fail:0 skip:20
fi-hsw-4770r total:245 pass:225 dwarn:0 dfail:0 fail:0 skip:20
fi-ilk-650 total:245 pass:191 dwarn:1 dfail:0 fail:0 skip:53
fi-ivb-3520m total:245 pass:223 dwarn:0 dfail:0 fail:0 skip:22
fi-ivb-3770 total:245 pass:222 dwarn:0 dfail:0 fail:1 skip:22
fi-kbl-7500u total:245 pass:223 dwarn:0 dfail:0 fail:0 skip:22
fi-skl-6260u total:245 pass:231 dwarn:0 dfail:0 fail:0 skip:14
fi-skl-6700hq total:13 pass:12 dwarn:0 dfail:0 fail:0 skip:0
fi-skl-6700k total:245 pass:223 dwarn:1 dfail:0 fail:0 skip:21
fi-skl-6770hq total:245 pass:231 dwarn:0 dfail:0 fail:0 skip:14
fi-snb-2520m total:245 pass:213 dwarn:0 dfail:0 fail:0 skip:32
fi-snb-2600 total:245 pass:212 dwarn:0 dfail:0 fail:0 skip:33
c744533b1d54437a7986108711de03523d591b27 drm-tip: 2016y-11m-25d-15h-02m-01s UTC integration manifest
56b6d9f drm: Promote drm_mm alignment to u64
== Logs ==
For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_3119/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm: Promote drm_mm alignment to u64
2016-11-27 19:05 [PATCH] drm: Promote drm_mm alignment to u64 Chris Wilson
2016-11-27 19:52 ` ✗ Fi.CI.BAT: failure for " Patchwork
@ 2016-11-28 9:32 ` Joonas Lahtinen
2016-11-28 10:37 ` Christian König
2 siblings, 0 replies; 5+ messages in thread
From: Joonas Lahtinen @ 2016-11-28 9:32 UTC (permalink / raw)
To: Chris Wilson, dri-devel; +Cc: intel-gfx
On su, 2016-11-27 at 19:05 +0000, Chris Wilson wrote:
> In places (e.g. i915.ko), the alignment is exported to userspace as u64
> and there now exists hardware for which we can indeed utilize a u64
> alignment. As such, we need to keep 64bit integers throughout when
> handling alignment.
>
> Testcase: igt/drm_mm/align64
> Testcase: igt/gem_exec_alignment
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Regards, Joonas
--
Joonas Lahtinen
Open Source Technology Center
Intel Corporation
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm: Promote drm_mm alignment to u64
2016-11-27 19:05 [PATCH] drm: Promote drm_mm alignment to u64 Chris Wilson
2016-11-27 19:52 ` ✗ Fi.CI.BAT: failure for " Patchwork
2016-11-28 9:32 ` [PATCH] " Joonas Lahtinen
@ 2016-11-28 10:37 ` Christian König
2 siblings, 0 replies; 5+ messages in thread
From: Christian König @ 2016-11-28 10:37 UTC (permalink / raw)
To: Chris Wilson, dri-devel; +Cc: intel-gfx
Am 27.11.2016 um 20:05 schrieb Chris Wilson:
> In places (e.g. i915.ko), the alignment is exported to userspace as u64
> and there now exists hardware for which we can indeed utilize a u64
> alignment. As such, we need to keep 64bit integers throughout when
> handling alignment.
>
> Testcase: igt/drm_mm/align64
> Testcase: igt/gem_exec_alignment
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>.
And yeah, we have a couple of use cases aligning something to a 4GB
boundary in a large address space as well.
Regards,
Christian.
> ---
> drivers/gpu/drm/drm_mm.c | 37 +++++++++++++++++--------------------
> include/drm/drm_mm.h | 16 ++++++++--------
> 2 files changed, 25 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
> index 025dcd8cadcb..b5b0b667677d 100644
> --- a/drivers/gpu/drm/drm_mm.c
> +++ b/drivers/gpu/drm/drm_mm.c
> @@ -93,12 +93,12 @@
>
> static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> enum drm_mm_search_flags flags);
> static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> u64 start,
> u64 end,
> @@ -227,7 +227,7 @@ static void drm_mm_interval_tree_add_node(struct drm_mm_node *hole_node,
>
> static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
> struct drm_mm_node *node,
> - u64 size, unsigned alignment,
> + u64 size, u64 alignment,
> unsigned long color,
> enum drm_mm_allocator_flags flags)
> {
> @@ -246,10 +246,9 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
> adj_start = adj_end - size;
>
> if (alignment) {
> - u64 tmp = adj_start;
> - unsigned rem;
> + u64 rem;
>
> - rem = do_div(tmp, alignment);
> + div64_u64_rem(adj_start, alignment, &rem);
> if (rem) {
> if (flags & DRM_MM_CREATE_TOP)
> adj_start -= rem;
> @@ -377,7 +376,7 @@ EXPORT_SYMBOL(drm_mm_reserve_node);
> * 0 on success, -ENOSPC if there's no suitable hole.
> */
> int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node,
> - u64 size, unsigned alignment,
> + u64 size, u64 alignment,
> unsigned long color,
> enum drm_mm_search_flags sflags,
> enum drm_mm_allocator_flags aflags)
> @@ -399,7 +398,7 @@ EXPORT_SYMBOL(drm_mm_insert_node_generic);
>
> static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
> struct drm_mm_node *node,
> - u64 size, unsigned alignment,
> + u64 size, u64 alignment,
> unsigned long color,
> u64 start, u64 end,
> enum drm_mm_allocator_flags flags)
> @@ -424,10 +423,9 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
> adj_start = adj_end - size;
>
> if (alignment) {
> - u64 tmp = adj_start;
> - unsigned rem;
> + u64 rem;
>
> - rem = do_div(tmp, alignment);
> + div64_u64_rem(adj_start, alignment, &rem);
> if (rem) {
> if (flags & DRM_MM_CREATE_TOP)
> adj_start -= rem;
> @@ -483,7 +481,7 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
> * 0 on success, -ENOSPC if there's no suitable hole.
> */
> int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node,
> - u64 size, unsigned alignment,
> + u64 size, u64 alignment,
> unsigned long color,
> u64 start, u64 end,
> enum drm_mm_search_flags sflags,
> @@ -550,16 +548,15 @@ void drm_mm_remove_node(struct drm_mm_node *node)
> }
> EXPORT_SYMBOL(drm_mm_remove_node);
>
> -static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
> +static int check_free_hole(u64 start, u64 end, u64 size, u64 alignment)
> {
> if (end - start < size)
> return 0;
>
> if (alignment) {
> - u64 tmp = start;
> - unsigned rem;
> + u64 rem;
>
> - rem = do_div(tmp, alignment);
> + div64_u64_rem(start, alignment, &rem);
> if (rem)
> start += alignment - rem;
> }
> @@ -569,7 +566,7 @@ static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
>
> static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> enum drm_mm_search_flags flags)
> {
> @@ -611,7 +608,7 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
>
> static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> u64 start,
> u64 end,
> @@ -729,7 +726,7 @@ EXPORT_SYMBOL(drm_mm_replace_node);
> */
> void drm_mm_init_scan(struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color)
> {
> mm->scan_color = color;
> @@ -762,7 +759,7 @@ EXPORT_SYMBOL(drm_mm_init_scan);
> */
> void drm_mm_init_scan_with_range(struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> u64 start,
> u64 end)
> diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
> index dff4c507d2c2..dc9710c31a45 100644
> --- a/include/drm/drm_mm.h
> +++ b/include/drm/drm_mm.h
> @@ -92,12 +92,12 @@ struct drm_mm {
> struct rb_root interval_tree;
>
> unsigned int scan_check_range : 1;
> - unsigned scan_alignment;
> + unsigned int scanned_blocks;
> unsigned long scan_color;
> + u64 scan_alignment;
> u64 scan_size;
> u64 scan_hit_start;
> u64 scan_hit_end;
> - unsigned scanned_blocks;
> u64 scan_start;
> u64 scan_end;
> struct drm_mm_node *prev_scanned_node;
> @@ -229,7 +229,7 @@ int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
> int drm_mm_insert_node_generic(struct drm_mm *mm,
> struct drm_mm_node *node,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> enum drm_mm_search_flags sflags,
> enum drm_mm_allocator_flags aflags);
> @@ -252,7 +252,7 @@ int drm_mm_insert_node_generic(struct drm_mm *mm,
> static inline int drm_mm_insert_node(struct drm_mm *mm,
> struct drm_mm_node *node,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> enum drm_mm_search_flags flags)
> {
> return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags,
> @@ -262,7 +262,7 @@ static inline int drm_mm_insert_node(struct drm_mm *mm,
> int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
> struct drm_mm_node *node,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> u64 start,
> u64 end,
> @@ -289,7 +289,7 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
> static inline int drm_mm_insert_node_in_range(struct drm_mm *mm,
> struct drm_mm_node *node,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> u64 start,
> u64 end,
> enum drm_mm_search_flags flags)
> @@ -331,11 +331,11 @@ __drm_mm_interval_first(struct drm_mm *mm, u64 start, u64 last);
>
> void drm_mm_init_scan(struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color);
> void drm_mm_init_scan_with_range(struct drm_mm *mm,
> u64 size,
> - unsigned alignment,
> + u64 alignment,
> unsigned long color,
> u64 start,
> u64 end);
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] drm: Promote drm_mm alignment to u64
@ 2016-01-19 14:35 Chris Wilson
0 siblings, 0 replies; 5+ messages in thread
From: Chris Wilson @ 2016-01-19 14:35 UTC (permalink / raw)
To: dri-devel
In places (e.g. i915.ko), the alignment is exported to userspace as u64
and there now exists hardware for which we can indeed utilize a u64
alignment. As such, we need to keep 64bit integers throughout when
handling alignment.
Testcase: igt/gem_exec_alignment
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/drm_mm.c | 37 +++++++++++++++++--------------------
include/drm/drm_mm.h | 16 ++++++++--------
2 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
index 66c993840f47..1095084947fa 100644
--- a/drivers/gpu/drm/drm_mm.c
+++ b/drivers/gpu/drm/drm_mm.c
@@ -93,12 +93,12 @@
static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags flags);
static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -172,7 +172,7 @@ static void drm_mm_interval_tree_add_node(struct drm_mm_node *hole_node,
static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
enum drm_mm_allocator_flags flags)
{
@@ -191,10 +191,9 @@ static void drm_mm_insert_helper(struct drm_mm_node *hole_node,
adj_start = adj_end - size;
if (alignment) {
- u64 tmp = adj_start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(adj_start, alignment, &rem);
if (rem) {
if (flags & DRM_MM_CREATE_TOP)
adj_start -= rem;
@@ -308,7 +307,7 @@ EXPORT_SYMBOL(drm_mm_reserve_node);
* 0 on success, -ENOSPC if there's no suitable hole.
*/
int drm_mm_insert_node_generic(struct drm_mm *mm, struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
enum drm_mm_search_flags sflags,
enum drm_mm_allocator_flags aflags)
@@ -327,7 +326,7 @@ EXPORT_SYMBOL(drm_mm_insert_node_generic);
static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
u64 start, u64 end,
enum drm_mm_allocator_flags flags)
@@ -352,10 +351,9 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
adj_start = adj_end - size;
if (alignment) {
- u64 tmp = adj_start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(adj_start, alignment, &rem);
if (rem) {
if (flags & DRM_MM_CREATE_TOP)
adj_start -= rem;
@@ -409,7 +407,7 @@ static void drm_mm_insert_helper_range(struct drm_mm_node *hole_node,
* 0 on success, -ENOSPC if there's no suitable hole.
*/
int drm_mm_insert_node_in_range_generic(struct drm_mm *mm, struct drm_mm_node *node,
- u64 size, unsigned alignment,
+ u64 size, u64 alignment,
unsigned long color,
u64 start, u64 end,
enum drm_mm_search_flags sflags,
@@ -473,16 +471,15 @@ void drm_mm_remove_node(struct drm_mm_node *node)
}
EXPORT_SYMBOL(drm_mm_remove_node);
-static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
+static int check_free_hole(u64 start, u64 end, u64 size, u64 alignment)
{
if (end - start < size)
return 0;
if (alignment) {
- u64 tmp = start;
- unsigned rem;
+ u64 rem;
- rem = do_div(tmp, alignment);
+ div64_u64_rem(start, alignment, &rem);
if (rem)
start += alignment - rem;
}
@@ -492,7 +489,7 @@ static int check_free_hole(u64 start, u64 end, u64 size, unsigned alignment)
static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags flags)
{
@@ -534,7 +531,7 @@ static struct drm_mm_node *drm_mm_search_free_generic(const struct drm_mm *mm,
static struct drm_mm_node *drm_mm_search_free_in_range_generic(const struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -652,7 +649,7 @@ EXPORT_SYMBOL(drm_mm_replace_node);
*/
void drm_mm_init_scan(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color)
{
mm->scan_color = color;
@@ -685,7 +682,7 @@ EXPORT_SYMBOL(drm_mm_init_scan);
*/
void drm_mm_init_scan_with_range(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end)
diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
index 205ddcf6d55d..8fb659ff654f 100644
--- a/include/drm/drm_mm.h
+++ b/include/drm/drm_mm.h
@@ -86,12 +86,12 @@ struct drm_mm {
struct rb_root interval_tree;
unsigned int scan_check_range : 1;
- unsigned scan_alignment;
+ unsigned scanned_blocks;
unsigned long scan_color;
+ u64 scan_alignment;
u64 scan_size;
u64 scan_hit_start;
u64 scan_hit_end;
- unsigned scanned_blocks;
u64 scan_start;
u64 scan_end;
struct drm_mm_node *prev_scanned_node;
@@ -223,7 +223,7 @@ int drm_mm_reserve_node(struct drm_mm *mm, struct drm_mm_node *node);
int drm_mm_insert_node_generic(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
enum drm_mm_search_flags sflags,
enum drm_mm_allocator_flags aflags);
@@ -246,7 +246,7 @@ int drm_mm_insert_node_generic(struct drm_mm *mm,
static inline int drm_mm_insert_node(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
enum drm_mm_search_flags flags)
{
return drm_mm_insert_node_generic(mm, node, size, alignment, 0, flags,
@@ -256,7 +256,7 @@ static inline int drm_mm_insert_node(struct drm_mm *mm,
int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end,
@@ -283,7 +283,7 @@ int drm_mm_insert_node_in_range_generic(struct drm_mm *mm,
static inline int drm_mm_insert_node_in_range(struct drm_mm *mm,
struct drm_mm_node *node,
u64 size,
- unsigned alignment,
+ u64 alignment,
u64 start,
u64 end,
enum drm_mm_search_flags flags)
@@ -309,11 +309,11 @@ drm_mm_interval_next(struct drm_mm_node *node, u64 start, u64 last);
void drm_mm_init_scan(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color);
void drm_mm_init_scan_with_range(struct drm_mm *mm,
u64 size,
- unsigned alignment,
+ u64 alignment,
unsigned long color,
u64 start,
u64 end);
--
2.7.0.rc3
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-11-28 10:37 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-27 19:05 [PATCH] drm: Promote drm_mm alignment to u64 Chris Wilson
2016-11-27 19:52 ` ✗ Fi.CI.BAT: failure for " Patchwork
2016-11-28 9:32 ` [PATCH] " Joonas Lahtinen
2016-11-28 10:37 ` Christian König
-- strict thread matches above, loose matches on Subject: below --
2016-01-19 14:35 Chris Wilson
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.