* [PATCH 0/3] Fixed-width mask/bit helpers
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Andy Shevchenko, Thomas Gleixner, linux-kernel, Masahiro Yamada,
Andrew Morton, Kevin Brodsky, Alex Deucher, Christian König,
Jani Nikula, Lucas De Marchi
Generalize the REG_GENMASK*() and REG_BIT*() macros so they can be used
by other drivers. The intention is to migrate i915 to the generic
helpers and also make use of them on the upcoming xe driver. There are
possibly other users in the kernel that need u32/u16/u8 bit handling.
First patch is one of the possible alternatives in radeon/amdgpu drivers
so they use the U32() that is planned to be used here. Other
alternatives would be to use a amd/radeon prefix or use a _Generic().
Last patch is a temporary one to demonstrate what would be changed on
the i915 side. However instead of replacing the implementation of the
REG_* macros, the goal is to replace the callers as well.
Patches here are currently based on drm-tip branch.
Lucas De Marchi (3):
drm/amd: Remove wrapper macros over get_u{32,16,8}
linux/bits.h: Add fixed-width GENMASK and BIT macros
drm/i915: Temporary conversion to new GENMASK/BIT macros
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +---
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
include/linux/bits.h | 22 +++
include/uapi/linux/const.h | 2 +
include/vdso/const.h | 1 +
8 files changed, 249 insertions(+), 243 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 114+ messages in thread
* [PATCH 0/3] Fixed-width mask/bit helpers
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Generalize the REG_GENMASK*() and REG_BIT*() macros so they can be used
by other drivers. The intention is to migrate i915 to the generic
helpers and also make use of them on the upcoming xe driver. There are
possibly other users in the kernel that need u32/u16/u8 bit handling.
First patch is one of the possible alternatives in radeon/amdgpu drivers
so they use the U32() that is planned to be used here. Other
alternatives would be to use a amd/radeon prefix or use a _Generic().
Last patch is a temporary one to demonstrate what would be changed on
the i915 side. However instead of replacing the implementation of the
REG_* macros, the goal is to replace the callers as well.
Patches here are currently based on drm-tip branch.
Lucas De Marchi (3):
drm/amd: Remove wrapper macros over get_u{32,16,8}
linux/bits.h: Add fixed-width GENMASK and BIT macros
drm/i915: Temporary conversion to new GENMASK/BIT macros
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +---
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
include/linux/bits.h | 22 +++
include/uapi/linux/const.h | 2 +
include/vdso/const.h | 1 +
8 files changed, 249 insertions(+), 243 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-gfx] [PATCH 0/3] Fixed-width mask/bit helpers
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Generalize the REG_GENMASK*() and REG_BIT*() macros so they can be used
by other drivers. The intention is to migrate i915 to the generic
helpers and also make use of them on the upcoming xe driver. There are
possibly other users in the kernel that need u32/u16/u8 bit handling.
First patch is one of the possible alternatives in radeon/amdgpu drivers
so they use the U32() that is planned to be used here. Other
alternatives would be to use a amd/radeon prefix or use a _Generic().
Last patch is a temporary one to demonstrate what would be changed on
the i915 side. However instead of replacing the implementation of the
REG_* macros, the goal is to replace the callers as well.
Patches here are currently based on drm-tip branch.
Lucas De Marchi (3):
drm/amd: Remove wrapper macros over get_u{32,16,8}
linux/bits.h: Add fixed-width GENMASK and BIT macros
drm/i915: Temporary conversion to new GENMASK/BIT macros
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +---
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
include/linux/bits.h | 22 +++
include/uapi/linux/const.h | 2 +
include/vdso/const.h | 1 +
8 files changed, 249 insertions(+), 243 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-xe] [PATCH 0/3] Fixed-width mask/bit helpers
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Generalize the REG_GENMASK*() and REG_BIT*() macros so they can be used
by other drivers. The intention is to migrate i915 to the generic
helpers and also make use of them on the upcoming xe driver. There are
possibly other users in the kernel that need u32/u16/u8 bit handling.
First patch is one of the possible alternatives in radeon/amdgpu drivers
so they use the U32() that is planned to be used here. Other
alternatives would be to use a amd/radeon prefix or use a _Generic().
Last patch is a temporary one to demonstrate what would be changed on
the i915 side. However instead of replacing the implementation of the
REG_* macros, the goal is to replace the callers as well.
Patches here are currently based on drm-tip branch.
Lucas De Marchi (3):
drm/amd: Remove wrapper macros over get_u{32,16,8}
linux/bits.h: Add fixed-width GENMASK and BIT macros
drm/i915: Temporary conversion to new GENMASK/BIT macros
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +---
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
include/linux/bits.h | 22 +++
include/uapi/linux/const.h | 2 +
include/vdso/const.h | 1 +
8 files changed, 249 insertions(+), 243 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 114+ messages in thread
* [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32,16,8}
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-09 5:14 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Andy Shevchenko, Thomas Gleixner, linux-kernel, Masahiro Yamada,
Andrew Morton, Kevin Brodsky, Alex Deucher, Christian König,
Jani Nikula, Lucas De Marchi
Both amdgpu and radeon use some wrapper macros over get_u{32,16,8}()
functions which end up adding an implicit argument. Instead of using
the macros, just call the functions directly without hiding the context
that is being passed. This will allow the macros to be used in a more
global context like ULL() and UL() currently are.
Callers are automatically converted with the following coccinelle
script:
$ cat utype.cocci
virtual patch
@@
expression e;
@@
(
- U32(e)
+ get_u32(ctx->ctx->bios, e)
|
- U16(e)
+ get_u16(ctx->ctx->bios, e)
|
- U8(e)
+ get_u8(ctx->ctx->bios, e)
|
- CU32(e)
+ get_u32(ctx->bios, e)
|
- CU16(e)
+ get_u16(ctx->bios, e)
|
- CU8(e)
+ get_u8(ctx->bios, e)
)
$ coccicheck SPFLAGS=--in-place MODE=patch \
COCCI=utype.cocci \
M=./drivers/gpu/drm/
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
4 files changed, 219 insertions(+), 220 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
index 1c5d9388ad0b..eea49bfb403f 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->reg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->reg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
- ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
+ ctx->card->reg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("DEBUG output: 0x%02X\n", val);
}
static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
{
- uint16_t val = U16(*ptr);
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += val + 2;
SDEBUG("PROCESSDS output: 0x%02X\n", val);
}
@@ -1206,7 +1207,7 @@ static struct {
static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t *params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
amdgpu_atom_destroy(ctx);
return NULL;
}
- idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
+ idx = get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR);
if (idx == 0)
idx = 0x80;
@@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
int amdgpu_atom_asic_init(struct atom_context *ctx)
{
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t *data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *
uint8_t *crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
diff --git a/drivers/gpu/drm/amd/include/atom-bits.h b/drivers/gpu/drm/amd/include/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/amd/include/atom-bits.h
+++ b/drivers/gpu/drm/amd/include/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom-bits.h b/drivers/gpu/drm/radeon/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/radeon/atom-bits.h
+++ b/drivers/gpu/drm/radeon/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index c1bbfbe28bda..1c54d52c4cb0 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
if (rdev->family == CHIP_RV515)
- (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1));
- ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp);
+ (void)ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
+ ctx->card->ioreg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1158,7 +1160,7 @@ atom_op_debug, 0},};
static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
atom_destroy(ctx);
return NULL;
}
- str = CSTR(CU16(base + ATOM_ROM_MSG_PTR));
+ str = CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR));
while (*str && ((*str == '\n') || (*str == '\r')))
str++;
/* name string isn't always 0 terminated */
@@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
struct radeon_device *rdev = ctx->card->dev->dev_private;
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx)
memset(ps, 0, 64);
if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
+ if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
}
return ret;
@@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t * data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev,
uint8_t * crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32,16,8}
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Both amdgpu and radeon use some wrapper macros over get_u{32,16,8}()
functions which end up adding an implicit argument. Instead of using
the macros, just call the functions directly without hiding the context
that is being passed. This will allow the macros to be used in a more
global context like ULL() and UL() currently are.
Callers are automatically converted with the following coccinelle
script:
$ cat utype.cocci
virtual patch
@@
expression e;
@@
(
- U32(e)
+ get_u32(ctx->ctx->bios, e)
|
- U16(e)
+ get_u16(ctx->ctx->bios, e)
|
- U8(e)
+ get_u8(ctx->ctx->bios, e)
|
- CU32(e)
+ get_u32(ctx->bios, e)
|
- CU16(e)
+ get_u16(ctx->bios, e)
|
- CU8(e)
+ get_u8(ctx->bios, e)
)
$ coccicheck SPFLAGS=--in-place MODE=patch \
COCCI=utype.cocci \
M=./drivers/gpu/drm/
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
4 files changed, 219 insertions(+), 220 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
index 1c5d9388ad0b..eea49bfb403f 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->reg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->reg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
- ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
+ ctx->card->reg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("DEBUG output: 0x%02X\n", val);
}
static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
{
- uint16_t val = U16(*ptr);
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += val + 2;
SDEBUG("PROCESSDS output: 0x%02X\n", val);
}
@@ -1206,7 +1207,7 @@ static struct {
static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t *params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
amdgpu_atom_destroy(ctx);
return NULL;
}
- idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
+ idx = get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR);
if (idx == 0)
idx = 0x80;
@@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
int amdgpu_atom_asic_init(struct atom_context *ctx)
{
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t *data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *
uint8_t *crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
diff --git a/drivers/gpu/drm/amd/include/atom-bits.h b/drivers/gpu/drm/amd/include/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/amd/include/atom-bits.h
+++ b/drivers/gpu/drm/amd/include/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom-bits.h b/drivers/gpu/drm/radeon/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/radeon/atom-bits.h
+++ b/drivers/gpu/drm/radeon/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index c1bbfbe28bda..1c54d52c4cb0 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
if (rdev->family == CHIP_RV515)
- (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1));
- ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp);
+ (void)ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
+ ctx->card->ioreg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1158,7 +1160,7 @@ atom_op_debug, 0},};
static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
atom_destroy(ctx);
return NULL;
}
- str = CSTR(CU16(base + ATOM_ROM_MSG_PTR));
+ str = CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR));
while (*str && ((*str == '\n') || (*str == '\r')))
str++;
/* name string isn't always 0 terminated */
@@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
struct radeon_device *rdev = ctx->card->dev->dev_private;
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx)
memset(ps, 0, 64);
if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
+ if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
}
return ret;
@@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t * data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev,
uint8_t * crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-gfx] [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32, 16, 8}
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Both amdgpu and radeon use some wrapper macros over get_u{32,16,8}()
functions which end up adding an implicit argument. Instead of using
the macros, just call the functions directly without hiding the context
that is being passed. This will allow the macros to be used in a more
global context like ULL() and UL() currently are.
Callers are automatically converted with the following coccinelle
script:
$ cat utype.cocci
virtual patch
@@
expression e;
@@
(
- U32(e)
+ get_u32(ctx->ctx->bios, e)
|
- U16(e)
+ get_u16(ctx->ctx->bios, e)
|
- U8(e)
+ get_u8(ctx->ctx->bios, e)
|
- CU32(e)
+ get_u32(ctx->bios, e)
|
- CU16(e)
+ get_u16(ctx->bios, e)
|
- CU8(e)
+ get_u8(ctx->bios, e)
)
$ coccicheck SPFLAGS=--in-place MODE=patch \
COCCI=utype.cocci \
M=./drivers/gpu/drm/
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
4 files changed, 219 insertions(+), 220 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
index 1c5d9388ad0b..eea49bfb403f 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->reg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->reg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
- ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
+ ctx->card->reg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("DEBUG output: 0x%02X\n", val);
}
static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
{
- uint16_t val = U16(*ptr);
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += val + 2;
SDEBUG("PROCESSDS output: 0x%02X\n", val);
}
@@ -1206,7 +1207,7 @@ static struct {
static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t *params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
amdgpu_atom_destroy(ctx);
return NULL;
}
- idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
+ idx = get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR);
if (idx == 0)
idx = 0x80;
@@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
int amdgpu_atom_asic_init(struct atom_context *ctx)
{
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t *data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *
uint8_t *crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
diff --git a/drivers/gpu/drm/amd/include/atom-bits.h b/drivers/gpu/drm/amd/include/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/amd/include/atom-bits.h
+++ b/drivers/gpu/drm/amd/include/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom-bits.h b/drivers/gpu/drm/radeon/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/radeon/atom-bits.h
+++ b/drivers/gpu/drm/radeon/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index c1bbfbe28bda..1c54d52c4cb0 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
if (rdev->family == CHIP_RV515)
- (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1));
- ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp);
+ (void)ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
+ ctx->card->ioreg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1158,7 +1160,7 @@ atom_op_debug, 0},};
static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
atom_destroy(ctx);
return NULL;
}
- str = CSTR(CU16(base + ATOM_ROM_MSG_PTR));
+ str = CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR));
while (*str && ((*str == '\n') || (*str == '\r')))
str++;
/* name string isn't always 0 terminated */
@@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
struct radeon_device *rdev = ctx->card->dev->dev_private;
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx)
memset(ps, 0, 64);
if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
+ if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
}
return ret;
@@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t * data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev,
uint8_t * crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-xe] [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32, 16, 8}
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Both amdgpu and radeon use some wrapper macros over get_u{32,16,8}()
functions which end up adding an implicit argument. Instead of using
the macros, just call the functions directly without hiding the context
that is being passed. This will allow the macros to be used in a more
global context like ULL() and UL() currently are.
Callers are automatically converted with the following coccinelle
script:
$ cat utype.cocci
virtual patch
@@
expression e;
@@
(
- U32(e)
+ get_u32(ctx->ctx->bios, e)
|
- U16(e)
+ get_u16(ctx->ctx->bios, e)
|
- U8(e)
+ get_u8(ctx->ctx->bios, e)
|
- CU32(e)
+ get_u32(ctx->bios, e)
|
- CU16(e)
+ get_u16(ctx->bios, e)
|
- CU8(e)
+ get_u8(ctx->bios, e)
)
$ coccicheck SPFLAGS=--in-place MODE=patch \
COCCI=utype.cocci \
M=./drivers/gpu/drm/
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------
drivers/gpu/drm/amd/include/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom-bits.h | 9 +-
drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------
4 files changed, 219 insertions(+), 220 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu/atom.c
index 1c5d9388ad0b..eea49bfb403f 100644
--- a/drivers/gpu/drm/amd/amdgpu/atom.c
+++ b/drivers/gpu/drm/amd/amdgpu/atom.c
@@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->reg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->reg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
- ctx->card->reg_write(ctx->card, CU16(base + 1), temp);
+ ctx->card->reg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg)
{
uint64_t val64;
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("DEBUG output: 0x%02X\n", val);
}
static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg)
{
- uint16_t val = U16(*ptr);
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += val + 2;
SDEBUG("PROCESSDS output: 0x%02X\n", val);
}
@@ -1206,7 +1207,7 @@ static struct {
static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t *params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index,
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
amdgpu_atom_destroy(ctx);
return NULL;
}
- idx = CU16(ATOM_ROM_PART_NUMBER_PTR);
+ idx = get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR);
if (idx == 0)
idx = 0x80;
@@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
int amdgpu_atom_asic_init(struct atom_context *ctx)
{
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t *data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t *
uint8_t *crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
diff --git a/drivers/gpu/drm/amd/include/atom-bits.h b/drivers/gpu/drm/amd/include/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/amd/include/atom-bits.h
+++ b/drivers/gpu/drm/amd/include/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom-bits.h b/drivers/gpu/drm/radeon/atom-bits.h
index e8fae5c77514..28c196a91221 100644
--- a/drivers/gpu/drm/radeon/atom-bits.h
+++ b/drivers/gpu/drm/radeon/atom-bits.h
@@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr)
{
return ((unsigned char *)bios)[ptr];
}
-#define U8(ptr) get_u8(ctx->ctx->bios, (ptr))
-#define CU8(ptr) get_u8(ctx->bios, (ptr))
+
static inline uint16_t get_u16(void *bios, int ptr)
{
return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8);
}
-#define U16(ptr) get_u16(ctx->ctx->bios, (ptr))
-#define CU16(ptr) get_u16(ctx->bios, (ptr))
+
static inline uint32_t get_u32(void *bios, int ptr)
{
return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16);
}
-#define U32(ptr) get_u32(ctx->ctx->bios, (ptr))
-#define CU32(ptr) get_u32(ctx->bios, (ptr))
+
#define CSTR(ptr) (((char *)(ctx->bios))+(ptr))
#endif
diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c
index c1bbfbe28bda..1c54d52c4cb0 100644
--- a/drivers/gpu/drm/radeon/atom.c
+++ b/drivers/gpu/drm/radeon/atom.c
@@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context *ctx, int base,
uint32_t temp = 0xCDCDCDCD;
while (1)
- switch (CU8(base)) {
+ switch (get_u8(ctx->bios, base)) {
case ATOM_IIO_NOP:
base++;
break;
case ATOM_IIO_READ:
- temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1));
+ temp = ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
base += 3;
break;
case ATOM_IIO_WRITE:
if (rdev->family == CHIP_RV515)
- (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1));
- ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp);
+ (void)ctx->card->ioreg_read(ctx->card,
+ get_u16(ctx->bios, base + 1));
+ ctx->card->ioreg_write(ctx->card,
+ get_u16(ctx->bios, base + 1),
+ temp);
base += 3;
break;
case ATOM_IIO_CLEAR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 2));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 2));
base += 3;
break;
case ATOM_IIO_SET:
temp |=
- (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base +
- 2);
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->bios,
+ base + 2);
base += 3;
break;
case ATOM_IIO_MOVE_INDEX:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((index >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((index >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_DATA:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
- ((data >> CU8(base + 2)) &
- (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base +
- 3);
+ ((data >> get_u8(ctx->bios, base + 2)) &
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
+ base + 3);
base += 4;
break;
case ATOM_IIO_MOVE_ATTR:
temp &=
- ~((0xFFFFFFFF >> (32 - CU8(base + 1))) <<
- CU8(base + 3));
+ ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) <<
+ get_u8(ctx->bios, base + 3));
temp |=
((ctx->
- io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 -
- CU8
- (base
- +
- 1))))
- << CU8(base + 3);
+ io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 -
+ get_u8(ctx->bios, base + 1))))
+ << get_u8(ctx->bios, base + 3);
base += 4;
break;
case ATOM_IIO_END:
@@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
align = (attr >> 3) & 7;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("REG[0x%04X]", idx);
@@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
/* get_unaligned_le32 avoids unaligned accesses from atombios
* tables, noticed on a DEC Alpha. */
@@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
DEBUG("PS[0x%02X,0x%04X]", idx, val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("WS[0x%02X]", idx);
@@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
break;
case ATOM_ARG_ID:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print) {
if (gctx->data_block)
@@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
else
DEBUG("ID[0x%04X]", idx);
}
- val = U32(idx + gctx->data_block);
+ val = get_u32(ctx->ctx->bios, idx + gctx->data_block);
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n",
@@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_ARG_IMM:
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
if (print)
DEBUG("IMM 0x%08X\n", val);
@@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
if (print)
DEBUG("IMM 0x%04X\n", val);
@@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("IMM 0x%02X\n", val);
@@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr,
}
return 0;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("PLL[0x%02X]", idx);
val = gctx->card->pll_read(gctx->card, idx);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if (print)
DEBUG("MC[0x%02X]", idx);
@@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *
switch (align) {
case ATOM_SRC_DWORD:
- val = U32(*ptr);
+ val = get_u32(ctx->ctx->bios, *ptr);
(*ptr) += 4;
break;
case ATOM_SRC_WORD0:
case ATOM_SRC_WORD8:
case ATOM_SRC_WORD16:
- val = U16(*ptr);
+ val = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
break;
case ATOM_SRC_BYTE0:
case ATOM_SRC_BYTE8:
case ATOM_SRC_BYTE16:
case ATOM_SRC_BYTE24:
- val = U8(*ptr);
+ val = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
break;
}
@@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
val |= saved;
switch (arg) {
case ATOM_ARG_REG:
- idx = U16(*ptr);
+ idx = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
DEBUG("REG[0x%04X]", idx);
idx += gctx->reg_block;
@@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_PS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PS[0x%02X]", idx);
ctx->ps[idx] = cpu_to_le32(val);
break;
case ATOM_ARG_WS:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("WS[0x%02X]", idx);
switch (idx) {
@@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
}
break;
case ATOM_ARG_FB:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) {
DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n",
@@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
DEBUG("FB[0x%02X]", idx);
break;
case ATOM_ARG_PLL:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("PLL[0x%02X]", idx);
gctx->card->pll_write(gctx->card, idx, val);
break;
case ATOM_ARG_MC:
- idx = U8(*ptr);
+ idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
DEBUG("MC[0x%02X]", idx);
gctx->card->mc_write(gctx->card, idx, val);
@@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr,
static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8((*ptr)++);
+ int idx = get_u8(ctx->ctx->bios, (*ptr)++);
int r = 0;
if (idx < ATOM_TABLE_NAMES_CNT)
SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]);
else
SDEBUG(" table: %d\n", idx);
- if (U16(ctx->ctx->cmd_table + 4 + 2 * idx))
+ if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx))
r = atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift);
if (r) {
ctx->abort = true;
@@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t saved;
int dptr = *ptr;
attr &= 0x38;
@@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
{
- unsigned count = U8((*ptr)++);
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" count: %d\n", count);
if (arg == ATOM_UNIT_MICROSEC)
udelay(count);
@@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
{
- int execute = 0, target = U16(*ptr);
+ int execute = 0, target = get_u16(ctx->ctx->bios, *ptr);
unsigned long cjiffies;
(*ptr) += 2;
@@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, mask, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, saved;
int dptr = *ptr;
if (((attr >> 3) & 7) != ATOM_SRC_DWORD)
@@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t val = U8((*ptr)++);
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG("POST card output: 0x%02X\n", val);
}
@@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
{
- int idx = U8(*ptr);
+ int idx = get_u8(ctx->ctx->bios, *ptr);
(*ptr)++;
SDEBUG(" block: %d\n", idx);
if (!idx)
@@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg)
else if (idx == 255)
ctx->ctx->data_block = ctx->start;
else
- ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx);
+ ctx->ctx->data_block = get_u16(ctx->ctx->bios,
+ ctx->ctx->data_table + 4 + 2 * idx);
SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block);
}
static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
SDEBUG(" fb_base: ");
ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr);
}
@@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
int port;
switch (arg) {
case ATOM_PORT_ATI:
- port = U16(*ptr);
+ port = get_u16(ctx->ctx->bios, *ptr);
if (port < ATOM_IO_NAMES_CNT)
SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]);
else
@@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg)
{
- ctx->ctx->reg_block = U16(*ptr);
+ ctx->ctx->reg_block = get_u16(ctx->ctx->bios, *ptr);
(*ptr) += 2;
SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block);
}
static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
attr &= 0x38;
@@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++), shift;
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
uint32_t saved, dst;
int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
@@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t src, val, target;
SDEBUG(" switch: ");
src = atom_get_src(ctx, attr, ptr);
- while (U16(*ptr) != ATOM_CASE_END)
- if (U8(*ptr) == ATOM_CASE_MAGIC) {
+ while (get_u16(ctx->ctx->bios, *ptr) != ATOM_CASE_END)
+ if (get_u8(ctx->ctx->bios, *ptr) == ATOM_CASE_MAGIC) {
(*ptr)++;
SDEBUG(" case: ");
val =
atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM,
ptr);
- target = U16(*ptr);
+ target = get_u16(ctx->ctx->bios, *ptr);
if (val == src) {
SDEBUG(" target: %04X\n", target);
*ptr = ctx->start + target;
@@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src;
SDEBUG(" src1: ");
dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1);
@@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg)
static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg)
{
- uint8_t attr = U8((*ptr)++);
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
uint32_t dst, src, saved;
int dptr = *ptr;
SDEBUG(" dst: ");
@@ -1158,7 +1160,7 @@ atom_op_debug, 0},};
static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params)
{
- int base = CU16(ctx->cmd_table + 4 + 2 * index);
+ int base = get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index);
int len, ws, ps, ptr;
unsigned char op;
atom_exec_context ectx;
@@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
if (!base)
return -EINVAL;
- len = CU16(base + ATOM_CT_SIZE_PTR);
- ws = CU8(base + ATOM_CT_WS_PTR);
- ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
+ len = get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR);
+ ws = get_u8(ctx->bios, base + ATOM_CT_WS_PTR);
+ ps = get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK;
ptr = base + ATOM_CT_CODE_PTR;
SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps);
@@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_context *ctx, int index, uint32
debug_depth++;
while (1) {
- op = CU8(ptr++);
+ op = get_u8(ctx->bios, ptr++);
if (op < ATOM_OP_NAMES_CNT)
SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1);
else
@@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx, int base)
ctx->iio = kzalloc(2 * 256, GFP_KERNEL);
if (!ctx->iio)
return;
- while (CU8(base) == ATOM_IIO_START) {
- ctx->iio[CU8(base + 1)] = base + 2;
+ while (get_u8(ctx->bios, base) == ATOM_IIO_START) {
+ ctx->iio[get_u8(ctx->bios, base + 1)] = base + 2;
base += 2;
- while (CU8(base) != ATOM_IIO_END)
- base += atom_iio_len[CU8(base)];
+ while (get_u8(ctx->bios, base) != ATOM_IIO_END)
+ base += atom_iio_len[get_u8(ctx->bios, base)];
base += 3;
}
}
@@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
ctx->card = card;
ctx->bios = bios;
- if (CU16(0) != ATOM_BIOS_MAGIC) {
+ if (get_u16(ctx->bios, 0) != ATOM_BIOS_MAGIC) {
pr_info("Invalid BIOS magic\n");
kfree(ctx);
return NULL;
@@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- base = CU16(ATOM_ROM_TABLE_PTR);
+ base = get_u16(ctx->bios, ATOM_ROM_TABLE_PTR);
if (strncmp
(CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC,
strlen(ATOM_ROM_MAGIC))) {
@@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
return NULL;
}
- ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR);
- ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR);
- atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
+ ctx->cmd_table = get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR);
+ ctx->data_table = get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR);
+ atom_index_iio(ctx,
+ get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4);
if (!ctx->iio) {
atom_destroy(ctx);
return NULL;
}
- str = CSTR(CU16(base + ATOM_ROM_MSG_PTR));
+ str = CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR));
while (*str && ((*str == '\n') || (*str == '\r')))
str++;
/* name string isn't always 0 terminated */
@@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *card, void *bios)
int atom_asic_init(struct atom_context *ctx)
{
struct radeon_device *rdev = ctx->card->dev->dev_private;
- int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR);
+ int hwi = get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR);
uint32_t ps[16];
int ret;
memset(ps, 0, 64);
- ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR));
- ps[1] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR));
+ ps[0] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR));
+ ps[1] = cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR));
if (!ps[0] || !ps[1])
return 1;
- if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
+ if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT))
return 1;
ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps);
if (ret)
@@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx)
memset(ps, 0, 64);
if (rdev->family < CHIP_R600) {
- if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
+ if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL))
atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps);
}
return ret;
@@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ctx, int index,
uint16_t * data_start)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->data_table + offset);
+ int idx = get_u16(ctx->bios, ctx->data_table + offset);
u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4);
if (!mdt[index])
return false;
if (size)
- *size = CU16(idx);
+ *size = get_u16(ctx->bios, idx);
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
*data_start = idx;
return true;
}
@@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev,
uint8_t * crev)
{
int offset = index * 2 + 4;
- int idx = CU16(ctx->cmd_table + offset);
+ int idx = get_u16(ctx->bios, ctx->cmd_table + offset);
u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4);
if (!mct[index])
return false;
if (frev)
- *frev = CU8(idx + 2);
+ *frev = get_u8(ctx->bios, idx + 2);
if (crev)
- *crev = CU8(idx + 3);
+ *crev = get_u8(ctx->bios, idx + 3);
return true;
}
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-09 5:14 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Andy Shevchenko, Thomas Gleixner, linux-kernel, Masahiro Yamada,
Andrew Morton, Kevin Brodsky, Alex Deucher, Christian König,
Jani Nikula, Lucas De Marchi
Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
masks for fixed-width types and also the corresponding BIT_U32(),
BIT_U16() and BIT_U8().
All of those depend on a new "U" suffix added to the integer constant.
Due to naming clashes it's better to call the macro U32. Since C doesn't
have a proper suffix for short and char types, the U16 and U18 variants
just use U32 with one additional check in the BIT_* macros to make
sure the compiler gives an error when the those types overflow.
The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
as otherwise they would allow an invalid bit to be passed. Hence
implement them in include/linux/bits.h rather than together with
the other BIT* variants.
The following test file is is used to test this:
$ cat mask.c
#include <linux/types.h>
#include <linux/bits.h>
static const u32 a = GENMASK_U32(31, 0);
static const u16 b = GENMASK_U16(15, 0);
static const u8 c = GENMASK_U8(7, 0);
static const u32 x = BIT_U32(31);
static const u16 y = BIT_U16(15);
static const u8 z = BIT_U8(7);
#if FAIL
static const u32 a2 = GENMASK_U32(32, 0);
static const u16 b2 = GENMASK_U16(16, 0);
static const u8 c2 = GENMASK_U8(8, 0);
static const u32 x2 = BIT_U32(32);
static const u16 y2 = BIT_U16(16);
static const u8 z2 = BIT_U8(8);
#endif
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
include/linux/bits.h | 22 ++++++++++++++++++++++
include/uapi/linux/const.h | 2 ++
include/vdso/const.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..ff4786c99b8c 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -42,4 +42,26 @@
#define GENMASK_ULL(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define __GENMASK_U32(h, l) \
+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
+ (~U32(0) >> (32 - 1 - (h))))
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
+
+#define __GENMASK_U16(h, l) \
+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
+ (U32(0xffff) >> (16 - 1 - (h))))
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
+
+#define __GENMASK_U8(h, l) \
+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
+ (U32(0xff) >> (8 - 1 - (h))))
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
+
+#define BIT_U32(nr) _BITU32(nr)
+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
+
#endif /* __LINUX_BITS_H */
diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
index a429381e7ca5..3a4e152520f4 100644
--- a/include/uapi/linux/const.h
+++ b/include/uapi/linux/const.h
@@ -22,9 +22,11 @@
#define _AT(T,X) ((T)(X))
#endif
+#define _U32(x) (_AC(x, U))
#define _UL(x) (_AC(x, UL))
#define _ULL(x) (_AC(x, ULL))
+#define _BITU32(x) (_U32(1) << (x))
#define _BITUL(x) (_UL(1) << (x))
#define _BITULL(x) (_ULL(1) << (x))
diff --git a/include/vdso/const.h b/include/vdso/const.h
index 94b385ad438d..417384a9795b 100644
--- a/include/vdso/const.h
+++ b/include/vdso/const.h
@@ -4,6 +4,7 @@
#include <uapi/linux/const.h>
+#define U32(x) (_U32(x))
#define UL(x) (_UL(x))
#define ULL(x) (_ULL(x))
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
masks for fixed-width types and also the corresponding BIT_U32(),
BIT_U16() and BIT_U8().
All of those depend on a new "U" suffix added to the integer constant.
Due to naming clashes it's better to call the macro U32. Since C doesn't
have a proper suffix for short and char types, the U16 and U18 variants
just use U32 with one additional check in the BIT_* macros to make
sure the compiler gives an error when the those types overflow.
The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
as otherwise they would allow an invalid bit to be passed. Hence
implement them in include/linux/bits.h rather than together with
the other BIT* variants.
The following test file is is used to test this:
$ cat mask.c
#include <linux/types.h>
#include <linux/bits.h>
static const u32 a = GENMASK_U32(31, 0);
static const u16 b = GENMASK_U16(15, 0);
static const u8 c = GENMASK_U8(7, 0);
static const u32 x = BIT_U32(31);
static const u16 y = BIT_U16(15);
static const u8 z = BIT_U8(7);
#if FAIL
static const u32 a2 = GENMASK_U32(32, 0);
static const u16 b2 = GENMASK_U16(16, 0);
static const u8 c2 = GENMASK_U8(8, 0);
static const u32 x2 = BIT_U32(32);
static const u16 y2 = BIT_U16(16);
static const u8 z2 = BIT_U8(8);
#endif
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
include/linux/bits.h | 22 ++++++++++++++++++++++
include/uapi/linux/const.h | 2 ++
include/vdso/const.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..ff4786c99b8c 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -42,4 +42,26 @@
#define GENMASK_ULL(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define __GENMASK_U32(h, l) \
+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
+ (~U32(0) >> (32 - 1 - (h))))
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
+
+#define __GENMASK_U16(h, l) \
+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
+ (U32(0xffff) >> (16 - 1 - (h))))
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
+
+#define __GENMASK_U8(h, l) \
+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
+ (U32(0xff) >> (8 - 1 - (h))))
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
+
+#define BIT_U32(nr) _BITU32(nr)
+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
+
#endif /* __LINUX_BITS_H */
diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
index a429381e7ca5..3a4e152520f4 100644
--- a/include/uapi/linux/const.h
+++ b/include/uapi/linux/const.h
@@ -22,9 +22,11 @@
#define _AT(T,X) ((T)(X))
#endif
+#define _U32(x) (_AC(x, U))
#define _UL(x) (_AC(x, UL))
#define _ULL(x) (_AC(x, ULL))
+#define _BITU32(x) (_U32(1) << (x))
#define _BITUL(x) (_UL(1) << (x))
#define _BITULL(x) (_ULL(1) << (x))
diff --git a/include/vdso/const.h b/include/vdso/const.h
index 94b385ad438d..417384a9795b 100644
--- a/include/vdso/const.h
+++ b/include/vdso/const.h
@@ -4,6 +4,7 @@
#include <uapi/linux/const.h>
+#define U32(x) (_U32(x))
#define UL(x) (_UL(x))
#define ULL(x) (_ULL(x))
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
masks for fixed-width types and also the corresponding BIT_U32(),
BIT_U16() and BIT_U8().
All of those depend on a new "U" suffix added to the integer constant.
Due to naming clashes it's better to call the macro U32. Since C doesn't
have a proper suffix for short and char types, the U16 and U18 variants
just use U32 with one additional check in the BIT_* macros to make
sure the compiler gives an error when the those types overflow.
The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
as otherwise they would allow an invalid bit to be passed. Hence
implement them in include/linux/bits.h rather than together with
the other BIT* variants.
The following test file is is used to test this:
$ cat mask.c
#include <linux/types.h>
#include <linux/bits.h>
static const u32 a = GENMASK_U32(31, 0);
static const u16 b = GENMASK_U16(15, 0);
static const u8 c = GENMASK_U8(7, 0);
static const u32 x = BIT_U32(31);
static const u16 y = BIT_U16(15);
static const u8 z = BIT_U8(7);
#if FAIL
static const u32 a2 = GENMASK_U32(32, 0);
static const u16 b2 = GENMASK_U16(16, 0);
static const u8 c2 = GENMASK_U8(8, 0);
static const u32 x2 = BIT_U32(32);
static const u16 y2 = BIT_U16(16);
static const u8 z2 = BIT_U8(8);
#endif
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
include/linux/bits.h | 22 ++++++++++++++++++++++
include/uapi/linux/const.h | 2 ++
include/vdso/const.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..ff4786c99b8c 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -42,4 +42,26 @@
#define GENMASK_ULL(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define __GENMASK_U32(h, l) \
+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
+ (~U32(0) >> (32 - 1 - (h))))
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
+
+#define __GENMASK_U16(h, l) \
+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
+ (U32(0xffff) >> (16 - 1 - (h))))
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
+
+#define __GENMASK_U8(h, l) \
+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
+ (U32(0xff) >> (8 - 1 - (h))))
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
+
+#define BIT_U32(nr) _BITU32(nr)
+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
+
#endif /* __LINUX_BITS_H */
diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
index a429381e7ca5..3a4e152520f4 100644
--- a/include/uapi/linux/const.h
+++ b/include/uapi/linux/const.h
@@ -22,9 +22,11 @@
#define _AT(T,X) ((T)(X))
#endif
+#define _U32(x) (_AC(x, U))
#define _UL(x) (_AC(x, UL))
#define _ULL(x) (_AC(x, ULL))
+#define _BITU32(x) (_U32(1) << (x))
#define _BITUL(x) (_UL(1) << (x))
#define _BITULL(x) (_ULL(1) << (x))
diff --git a/include/vdso/const.h b/include/vdso/const.h
index 94b385ad438d..417384a9795b 100644
--- a/include/vdso/const.h
+++ b/include/vdso/const.h
@@ -4,6 +4,7 @@
#include <uapi/linux/const.h>
+#define U32(x) (_U32(x))
#define UL(x) (_UL(x))
#define ULL(x) (_ULL(x))
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
masks for fixed-width types and also the corresponding BIT_U32(),
BIT_U16() and BIT_U8().
All of those depend on a new "U" suffix added to the integer constant.
Due to naming clashes it's better to call the macro U32. Since C doesn't
have a proper suffix for short and char types, the U16 and U18 variants
just use U32 with one additional check in the BIT_* macros to make
sure the compiler gives an error when the those types overflow.
The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
as otherwise they would allow an invalid bit to be passed. Hence
implement them in include/linux/bits.h rather than together with
the other BIT* variants.
The following test file is is used to test this:
$ cat mask.c
#include <linux/types.h>
#include <linux/bits.h>
static const u32 a = GENMASK_U32(31, 0);
static const u16 b = GENMASK_U16(15, 0);
static const u8 c = GENMASK_U8(7, 0);
static const u32 x = BIT_U32(31);
static const u16 y = BIT_U16(15);
static const u8 z = BIT_U8(7);
#if FAIL
static const u32 a2 = GENMASK_U32(32, 0);
static const u16 b2 = GENMASK_U16(16, 0);
static const u8 c2 = GENMASK_U8(8, 0);
static const u32 x2 = BIT_U32(32);
static const u16 y2 = BIT_U16(16);
static const u8 z2 = BIT_U8(8);
#endif
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
include/linux/bits.h | 22 ++++++++++++++++++++++
include/uapi/linux/const.h | 2 ++
include/vdso/const.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..ff4786c99b8c 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -42,4 +42,26 @@
#define GENMASK_ULL(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define __GENMASK_U32(h, l) \
+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
+ (~U32(0) >> (32 - 1 - (h))))
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
+
+#define __GENMASK_U16(h, l) \
+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
+ (U32(0xffff) >> (16 - 1 - (h))))
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
+
+#define __GENMASK_U8(h, l) \
+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
+ (U32(0xff) >> (8 - 1 - (h))))
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
+
+#define BIT_U32(nr) _BITU32(nr)
+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
+
#endif /* __LINUX_BITS_H */
diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
index a429381e7ca5..3a4e152520f4 100644
--- a/include/uapi/linux/const.h
+++ b/include/uapi/linux/const.h
@@ -22,9 +22,11 @@
#define _AT(T,X) ((T)(X))
#endif
+#define _U32(x) (_AC(x, U))
#define _UL(x) (_AC(x, UL))
#define _ULL(x) (_AC(x, ULL))
+#define _BITU32(x) (_U32(1) << (x))
#define _BITUL(x) (_UL(1) << (x))
#define _BITULL(x) (_ULL(1) << (x))
diff --git a/include/vdso/const.h b/include/vdso/const.h
index 94b385ad438d..417384a9795b 100644
--- a/include/vdso/const.h
+++ b/include/vdso/const.h
@@ -4,6 +4,7 @@
#include <uapi/linux/const.h>
+#define U32(x) (_U32(x))
#define UL(x) (_UL(x))
#define ULL(x) (_ULL(x))
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-09 5:14 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Andy Shevchenko, Thomas Gleixner, linux-kernel, Masahiro Yamada,
Andrew Morton, Kevin Brodsky, Alex Deucher, Christian König,
Jani Nikula, Lucas De Marchi
Convert the REG_* macros from i915_reg_defs.h to use the new macros
defined in linux/bits.h. This is just to help on the implementation
of the new macros and not intended to be applied.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
index 622d603080f9..61fbb8d62b25 100644
--- a/drivers/gpu/drm/i915/i915_reg_defs.h
+++ b/drivers/gpu/drm/i915/i915_reg_defs.h
@@ -17,10 +17,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT(__n) \
- ((u32)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 31))))
+#define REG_BIT(__n) BIT_U32(__n)
/**
* REG_BIT8() - Prepare a u8 bit value
@@ -30,10 +27,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT8(__n) \
- ((u8)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 7))))
+#define REG_BIT8(__n) BIT_U8(__n)
/**
* REG_GENMASK() - Prepare a continuous u32 bitmask
@@ -44,11 +38,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK(__high, __low) \
- ((u32)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
+#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
/**
* REG_GENMASK64() - Prepare a continuous u64 bitmask
@@ -59,11 +49,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK64(__high, __low) \
- ((u64)(GENMASK_ULL(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
+#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
/**
* REG_GENMASK8() - Prepare a continuous u8 bitmask
@@ -74,11 +60,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK8(__high, __low) \
- ((u8)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
+#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
/*
* Local integer constant expression version of is_power_of_2().
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Convert the REG_* macros from i915_reg_defs.h to use the new macros
defined in linux/bits.h. This is just to help on the implementation
of the new macros and not intended to be applied.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
index 622d603080f9..61fbb8d62b25 100644
--- a/drivers/gpu/drm/i915/i915_reg_defs.h
+++ b/drivers/gpu/drm/i915/i915_reg_defs.h
@@ -17,10 +17,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT(__n) \
- ((u32)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 31))))
+#define REG_BIT(__n) BIT_U32(__n)
/**
* REG_BIT8() - Prepare a u8 bit value
@@ -30,10 +27,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT8(__n) \
- ((u8)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 7))))
+#define REG_BIT8(__n) BIT_U8(__n)
/**
* REG_GENMASK() - Prepare a continuous u32 bitmask
@@ -44,11 +38,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK(__high, __low) \
- ((u32)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
+#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
/**
* REG_GENMASK64() - Prepare a continuous u64 bitmask
@@ -59,11 +49,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK64(__high, __low) \
- ((u64)(GENMASK_ULL(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
+#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
/**
* REG_GENMASK8() - Prepare a continuous u8 bitmask
@@ -74,11 +60,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK8(__high, __low) \
- ((u8)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
+#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
/*
* Local integer constant expression version of is_power_of_2().
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-gfx] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Convert the REG_* macros from i915_reg_defs.h to use the new macros
defined in linux/bits.h. This is just to help on the implementation
of the new macros and not intended to be applied.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
index 622d603080f9..61fbb8d62b25 100644
--- a/drivers/gpu/drm/i915/i915_reg_defs.h
+++ b/drivers/gpu/drm/i915/i915_reg_defs.h
@@ -17,10 +17,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT(__n) \
- ((u32)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 31))))
+#define REG_BIT(__n) BIT_U32(__n)
/**
* REG_BIT8() - Prepare a u8 bit value
@@ -30,10 +27,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT8(__n) \
- ((u8)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 7))))
+#define REG_BIT8(__n) BIT_U8(__n)
/**
* REG_GENMASK() - Prepare a continuous u32 bitmask
@@ -44,11 +38,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK(__high, __low) \
- ((u32)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
+#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
/**
* REG_GENMASK64() - Prepare a continuous u64 bitmask
@@ -59,11 +49,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK64(__high, __low) \
- ((u64)(GENMASK_ULL(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
+#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
/**
* REG_GENMASK8() - Prepare a continuous u8 bitmask
@@ -74,11 +60,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK8(__high, __low) \
- ((u8)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
+#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
/*
* Local integer constant expression version of is_power_of_2().
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-xe] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 5:14 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 5:14 UTC (permalink / raw)
To: intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Convert the REG_* macros from i915_reg_defs.h to use the new macros
defined in linux/bits.h. This is just to help on the implementation
of the new macros and not intended to be applied.
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
1 file changed, 5 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
index 622d603080f9..61fbb8d62b25 100644
--- a/drivers/gpu/drm/i915/i915_reg_defs.h
+++ b/drivers/gpu/drm/i915/i915_reg_defs.h
@@ -17,10 +17,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT(__n) \
- ((u32)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 31))))
+#define REG_BIT(__n) BIT_U32(__n)
/**
* REG_BIT8() - Prepare a u8 bit value
@@ -30,10 +27,7 @@
*
* @return: Value with bit @__n set.
*/
-#define REG_BIT8(__n) \
- ((u8)(BIT(__n) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
- ((__n) < 0 || (__n) > 7))))
+#define REG_BIT8(__n) BIT_U8(__n)
/**
* REG_GENMASK() - Prepare a continuous u32 bitmask
@@ -44,11 +38,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK(__high, __low) \
- ((u32)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
+#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
/**
* REG_GENMASK64() - Prepare a continuous u64 bitmask
@@ -59,11 +49,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK64(__high, __low) \
- ((u64)(GENMASK_ULL(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
+#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
/**
* REG_GENMASK8() - Prepare a continuous u8 bitmask
@@ -74,11 +60,7 @@
*
* @return: Continuous bitmask from @__high to @__low, inclusive.
*/
-#define REG_GENMASK8(__high, __low) \
- ((u8)(GENMASK(__high, __low) + \
- BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
- __is_constexpr(__low) && \
- ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
+#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
/*
* Local integer constant expression version of is_power_of_2().
--
2.40.1
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-xe] ✓ CI.Patch_applied: success for Fixed-width mask/bit helpers
2023-05-09 5:14 ` Lucas De Marchi
` (5 preceding siblings ...)
(?)
@ 2023-05-09 5:17 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 5:17 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-xe
== Series Details ==
Series: Fixed-width mask/bit helpers
URL : https://patchwork.freedesktop.org/series/117489/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: 6d1561872 drm/xe: Print GT info on TLB inv failure
=== git am output follows ===
Applying: drm/amd: Remove wrapper macros over get_u{32, 16, 8}
Applying: linux/bits.h: Add fixed-width GENMASK and BIT macros
Applying: drm/i915: Temporary conversion to new GENMASK/BIT macros
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Fixed-width mask/bit helpers
2023-05-09 5:14 ` Lucas De Marchi
` (6 preceding siblings ...)
(?)
@ 2023-05-09 5:43 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 5:43 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
== Series Details ==
Series: Fixed-width mask/bit helpers
URL : https://patchwork.freedesktop.org/series/117490/
State : warning
== Summary ==
Error: dim checkpatch failed
ebd974edde6a drm/amd: Remove wrapper macros over get_u{32, 16, 8}
-:69: ERROR:CODE_INDENT: code indent should use tabs where possible
#69: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:126:
+^I^I^I^I get_u16(ctx->bios, base + 1),$
-:70: ERROR:CODE_INDENT: code indent should use tabs where possible
#70: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:127:
+^I^I^I^I temp);$
-:86: ERROR:CODE_INDENT: code indent should use tabs where possible
#86: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:139:
+^I^I^I^I^I^I^I^I^I^I base + 2);$
-:100: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#100: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:148:
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
-:101: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#101: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:149:
+ base + 3);
-:101: ERROR:CODE_INDENT: code indent should use tabs where possible
#101: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:149:
+^I^I^I^I^I^I^I^I^I^I base + 3);$
-:115: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#115: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:158:
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
-:116: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#116: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:159:
+ base + 3);
-:116: ERROR:CODE_INDENT: code indent should use tabs where possible
#116: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:159:
+^I^I^I^I^I^I^I^I^I^I base + 3);$
-:134: WARNING:LONG_LINE: line length of 118 exceeds 100 columns
#134: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:169:
+ get_u8(ctx->bios, base + 1))))
-:134: ERROR:CODE_INDENT: code indent should use tabs where possible
#134: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:169:
+^I^I^I^I^I^I^I^I^I^I get_u8(ctx->bios, base + 1))))$
-:311: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#311: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:587:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:320: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#320: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:601:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:346: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#346: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:636:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:355: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#355: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:648:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:364: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#364: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:662:
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
-:373: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#373: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:674:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:382: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#382: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:692:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:400: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#400: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:771:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:409: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#409: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:788:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:418: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#418: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:805:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:427: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#427: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:817:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:436: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#436: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:835:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:445: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#445: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:849:
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
-:471: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#471: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:885:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:497: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#497: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:926:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:506: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#506: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:942:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:515: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#515: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:958:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:524: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#524: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:977:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:533: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#533: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:996:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:542: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#542: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:1010:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:565: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#565: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:1037:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:574: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#574: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:1049:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:583: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#583: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:1063:
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
-:590: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u16' over 'uint16_t'
#590: FILE: drivers/gpu/drm/amd/amdgpu/atom.c:1069:
+ uint16_t val = get_u16(ctx->ctx->bios, *ptr);
-:826: ERROR:CODE_INDENT: code indent should use tabs where possible
#826: FILE: drivers/gpu/drm/radeon/atom.c:127:
+^I^I^I^I^I^I get_u16(ctx->bios, base + 1));$
-:828: ERROR:CODE_INDENT: code indent should use tabs where possible
#828: FILE: drivers/gpu/drm/radeon/atom.c:129:
+^I^I^I^I get_u16(ctx->bios, base + 1),$
-:829: ERROR:CODE_INDENT: code indent should use tabs where possible
#829: FILE: drivers/gpu/drm/radeon/atom.c:130:
+^I^I^I^I temp);$
-:845: ERROR:CODE_INDENT: code indent should use tabs where possible
#845: FILE: drivers/gpu/drm/radeon/atom.c:142:
+^I^I^I^I^I^I^I^I^I^I base + 2);$
-:859: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#859: FILE: drivers/gpu/drm/radeon/atom.c:151:
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
-:860: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#860: FILE: drivers/gpu/drm/radeon/atom.c:152:
+ base + 3);
-:860: ERROR:CODE_INDENT: code indent should use tabs where possible
#860: FILE: drivers/gpu/drm/radeon/atom.c:152:
+^I^I^I^I^I^I^I^I^I^I base + 3);$
-:874: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#874: FILE: drivers/gpu/drm/radeon/atom.c:161:
+ (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx->bios,
-:875: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#875: FILE: drivers/gpu/drm/radeon/atom.c:162:
+ base + 3);
-:875: ERROR:CODE_INDENT: code indent should use tabs where possible
#875: FILE: drivers/gpu/drm/radeon/atom.c:162:
+^I^I^I^I^I^I^I^I^I^I base + 3);$
-:893: WARNING:LONG_LINE: line length of 118 exceeds 100 columns
#893: FILE: drivers/gpu/drm/radeon/atom.c:172:
+ get_u8(ctx->bios, base + 1))))
-:893: ERROR:CODE_INDENT: code indent should use tabs where possible
#893: FILE: drivers/gpu/drm/radeon/atom.c:172:
+^I^I^I^I^I^I^I^I^I^I get_u8(ctx->bios, base + 1))))$
-:1070: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1070: FILE: drivers/gpu/drm/radeon/atom.c:590:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1079: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1079: FILE: drivers/gpu/drm/radeon/atom.c:604:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1105: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1105: FILE: drivers/gpu/drm/radeon/atom.c:639:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1114: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1114: FILE: drivers/gpu/drm/radeon/atom.c:651:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1123: WARNING:UNSPECIFIED_INT: Prefer 'unsigned int' to bare use of 'unsigned'
#1123: FILE: drivers/gpu/drm/radeon/atom.c:665:
+ unsigned count = get_u8(ctx->ctx->bios, (*ptr)++);
-:1132: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1132: FILE: drivers/gpu/drm/radeon/atom.c:677:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1150: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1150: FILE: drivers/gpu/drm/radeon/atom.c:752:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1159: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1159: FILE: drivers/gpu/drm/radeon/atom.c:769:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1168: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1168: FILE: drivers/gpu/drm/radeon/atom.c:786:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1177: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1177: FILE: drivers/gpu/drm/radeon/atom.c:802:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1186: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1186: FILE: drivers/gpu/drm/radeon/atom.c:816:
+ uint8_t val = get_u8(ctx->ctx->bios, (*ptr)++);
-:1212: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1212: FILE: drivers/gpu/drm/radeon/atom.c:852:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1238: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1238: FILE: drivers/gpu/drm/radeon/atom.c:893:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:1247: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1247: FILE: drivers/gpu/drm/radeon/atom.c:909:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:1256: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1256: FILE: drivers/gpu/drm/radeon/atom.c:925:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:1265: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1265: FILE: drivers/gpu/drm/radeon/atom.c:944:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++), shift;
-:1274: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1274: FILE: drivers/gpu/drm/radeon/atom.c:963:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1283: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1283: FILE: drivers/gpu/drm/radeon/atom.c:977:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1306: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1306: FILE: drivers/gpu/drm/radeon/atom.c:1004:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
-:1315: CHECK:PREFER_KERNEL_TYPES: Prefer kernel type 'u8' over 'uint8_t'
#1315: FILE: drivers/gpu/drm/radeon/atom.c:1016:
+ uint8_t attr = get_u8(ctx->ctx->bios, (*ptr)++);
total: 13 errors, 12 warnings, 42 checks, 1313 lines checked
90c002142113 linux/bits.h: Add fixed-width GENMASK and BIT macros
-:20: WARNING:REPEATED_WORD: Possible repeated word: 'is'
#20:
The following test file is is used to test this:
-:55: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'h' - possible side-effects?
#55: FILE: include/linux/bits.h:48:
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
-:55: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'l' - possible side-effects?
#55: FILE: include/linux/bits.h:48:
+#define GENMASK_U32(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
-:61: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'h' - possible side-effects?
#61: FILE: include/linux/bits.h:54:
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
-:61: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'l' - possible side-effects?
#61: FILE: include/linux/bits.h:54:
+#define GENMASK_U16(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
-:67: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'h' - possible side-effects?
#67: FILE: include/linux/bits.h:60:
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
-:67: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'l' - possible side-effects?
#67: FILE: include/linux/bits.h:60:
+#define GENMASK_U8(h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
-:71: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'nr' - possible side-effects?
#71: FILE: include/linux/bits.h:64:
+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
-:72: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'nr' - possible side-effects?
#72: FILE: include/linux/bits.h:65:
+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
total: 0 errors, 1 warnings, 8 checks, 44 lines checked
77bd0600bc20 drm/i915: Temporary conversion to new GENMASK/BIT macros
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Fixed-width mask/bit helpers
2023-05-09 5:14 ` Lucas De Marchi
` (7 preceding siblings ...)
(?)
@ 2023-05-09 5:43 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 5:43 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
== Series Details ==
Series: Fixed-width mask/bit helpers
URL : https://patchwork.freedesktop.org/series/117490/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for Fixed-width mask/bit helpers
2023-05-09 5:14 ` Lucas De Marchi
` (8 preceding siblings ...)
(?)
@ 2023-05-09 6:00 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 6:00 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 6690 bytes --]
== Series Details ==
Series: Fixed-width mask/bit helpers
URL : https://patchwork.freedesktop.org/series/117490/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_13124 -> Patchwork_117490v1
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_117490v1 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_117490v1, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/index.html
Participating hosts (40 -> 40)
------------------------------
Additional (1): bat-mtlp-6
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_117490v1:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@gtt:
- bat-atsm-1: [PASS][1] -> [INCOMPLETE][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/bat-atsm-1/igt@i915_selftest@live@gtt.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-atsm-1/igt@i915_selftest@live@gtt.html
Known issues
------------
Here are the changes found in Patchwork_117490v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_selftest@live@reset:
- bat-rpls-2: [PASS][3] -> [ABORT][4] ([i915#4983] / [i915#7461] / [i915#7913] / [i915#8347])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/bat-rpls-2/igt@i915_selftest@live@reset.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-rpls-2/igt@i915_selftest@live@reset.html
* igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1:
- bat-dg2-8: [PASS][5] -> [FAIL][6] ([i915#7932])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1.html
* igt@kms_pipe_crc_basic@read-crc-frame-sequence:
- bat-adlp-9: NOTRUN -> [SKIP][7] ([i915#3546]) +1 similar issue
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-adlp-9/igt@kms_pipe_crc_basic@read-crc-frame-sequence.html
#### Possible fixes ####
* igt@i915_selftest@live@gt_heartbeat:
- fi-glk-j4005: [DMESG-FAIL][8] ([i915#5334]) -> [PASS][9]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/fi-glk-j4005/igt@i915_selftest@live@gt_heartbeat.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/fi-glk-j4005/igt@i915_selftest@live@gt_heartbeat.html
* igt@i915_selftest@live@guc:
- bat-rpls-1: [DMESG-WARN][10] ([i915#7852] / [i915#7953]) -> [PASS][11]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/bat-rpls-1/igt@i915_selftest@live@guc.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-rpls-1/igt@i915_selftest@live@guc.html
* igt@i915_selftest@live@migrate:
- bat-dg2-11: [DMESG-FAIL][12] ([i915#7699] / [i915#7913]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13124/bat-dg2-11/igt@i915_selftest@live@migrate.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/bat-dg2-11/igt@i915_selftest@live@migrate.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
[i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#3595]: https://gitlab.freedesktop.org/drm/intel/issues/3595
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
[i915#4342]: https://gitlab.freedesktop.org/drm/intel/issues/4342
[i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
[i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
[i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
[i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
[i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
[i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
[i915#7456]: https://gitlab.freedesktop.org/drm/intel/issues/7456
[i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
[i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#7852]: https://gitlab.freedesktop.org/drm/intel/issues/7852
[i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
[i915#7920]: https://gitlab.freedesktop.org/drm/intel/issues/7920
[i915#7932]: https://gitlab.freedesktop.org/drm/intel/issues/7932
[i915#7953]: https://gitlab.freedesktop.org/drm/intel/issues/7953
[i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
[i915#8368]: https://gitlab.freedesktop.org/drm/intel/issues/8368
Build changes
-------------
* Linux: CI_DRM_13124 -> Patchwork_117490v1
CI-20190529: 20190529
CI_DRM_13124: 28153baed517db8d009844ee992f850a88c9eb33 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7283: ce51f53938690f581b315fa045d41155a5c6ecd3 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_117490v1: 28153baed517db8d009844ee992f850a88c9eb33 @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
6c1ff275a414 drm/i915: Temporary conversion to new GENMASK/BIT macros
ba2d84d90168 linux/bits.h: Add fixed-width GENMASK and BIT macros
5e7842c89f02 drm/amd: Remove wrapper macros over get_u{32, 16, 8}
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_117490v1/index.html
[-- Attachment #2: Type: text/html, Size: 5994 bytes --]
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-09 7:57 ` Jani Nikula
-1 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-09 7:57 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> Convert the REG_* macros from i915_reg_defs.h to use the new macros
> defined in linux/bits.h. This is just to help on the implementation
> of the new macros and not intended to be applied.
This drops a number of build time input checks as well as casts to the
specified types.
BR,
Jani.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
> 1 file changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
> index 622d603080f9..61fbb8d62b25 100644
> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
> @@ -17,10 +17,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT(__n) \
> - ((u32)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 31))))
> +#define REG_BIT(__n) BIT_U32(__n)
>
> /**
> * REG_BIT8() - Prepare a u8 bit value
> @@ -30,10 +27,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT8(__n) \
> - ((u8)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 7))))
> +#define REG_BIT8(__n) BIT_U8(__n)
>
> /**
> * REG_GENMASK() - Prepare a continuous u32 bitmask
> @@ -44,11 +38,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK(__high, __low) \
> - ((u32)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>
> /**
> * REG_GENMASK64() - Prepare a continuous u64 bitmask
> @@ -59,11 +49,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK64(__high, __low) \
> - ((u64)(GENMASK_ULL(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>
> /**
> * REG_GENMASK8() - Prepare a continuous u8 bitmask
> @@ -74,11 +60,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK8(__high, __low) \
> - ((u8)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>
> /*
> * Local integer constant expression version of is_power_of_2().
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 7:57 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-09 7:57 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> Convert the REG_* macros from i915_reg_defs.h to use the new macros
> defined in linux/bits.h. This is just to help on the implementation
> of the new macros and not intended to be applied.
This drops a number of build time input checks as well as casts to the
specified types.
BR,
Jani.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
> 1 file changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
> index 622d603080f9..61fbb8d62b25 100644
> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
> @@ -17,10 +17,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT(__n) \
> - ((u32)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 31))))
> +#define REG_BIT(__n) BIT_U32(__n)
>
> /**
> * REG_BIT8() - Prepare a u8 bit value
> @@ -30,10 +27,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT8(__n) \
> - ((u8)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 7))))
> +#define REG_BIT8(__n) BIT_U8(__n)
>
> /**
> * REG_GENMASK() - Prepare a continuous u32 bitmask
> @@ -44,11 +38,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK(__high, __low) \
> - ((u32)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>
> /**
> * REG_GENMASK64() - Prepare a continuous u64 bitmask
> @@ -59,11 +49,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK64(__high, __low) \
> - ((u64)(GENMASK_ULL(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>
> /**
> * REG_GENMASK8() - Prepare a continuous u8 bitmask
> @@ -74,11 +60,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK8(__high, __low) \
> - ((u8)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>
> /*
> * Local integer constant expression version of is_power_of_2().
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 7:57 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-09 7:57 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> Convert the REG_* macros from i915_reg_defs.h to use the new macros
> defined in linux/bits.h. This is just to help on the implementation
> of the new macros and not intended to be applied.
This drops a number of build time input checks as well as casts to the
specified types.
BR,
Jani.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
> 1 file changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
> index 622d603080f9..61fbb8d62b25 100644
> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
> @@ -17,10 +17,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT(__n) \
> - ((u32)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 31))))
> +#define REG_BIT(__n) BIT_U32(__n)
>
> /**
> * REG_BIT8() - Prepare a u8 bit value
> @@ -30,10 +27,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT8(__n) \
> - ((u8)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 7))))
> +#define REG_BIT8(__n) BIT_U8(__n)
>
> /**
> * REG_GENMASK() - Prepare a continuous u32 bitmask
> @@ -44,11 +38,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK(__high, __low) \
> - ((u32)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>
> /**
> * REG_GENMASK64() - Prepare a continuous u64 bitmask
> @@ -59,11 +49,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK64(__high, __low) \
> - ((u64)(GENMASK_ULL(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>
> /**
> * REG_GENMASK8() - Prepare a continuous u8 bitmask
> @@ -74,11 +60,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK8(__high, __low) \
> - ((u8)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>
> /*
> * Local integer constant expression version of is_power_of_2().
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 7:57 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-09 7:57 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Andy Shevchenko, Thomas Gleixner, linux-kernel, Masahiro Yamada,
Andrew Morton, Kevin Brodsky, Alex Deucher, Christian König,
Lucas De Marchi
On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> Convert the REG_* macros from i915_reg_defs.h to use the new macros
> defined in linux/bits.h. This is just to help on the implementation
> of the new macros and not intended to be applied.
This drops a number of build time input checks as well as casts to the
specified types.
BR,
Jani.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
> 1 file changed, 5 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
> index 622d603080f9..61fbb8d62b25 100644
> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
> @@ -17,10 +17,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT(__n) \
> - ((u32)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 31))))
> +#define REG_BIT(__n) BIT_U32(__n)
>
> /**
> * REG_BIT8() - Prepare a u8 bit value
> @@ -30,10 +27,7 @@
> *
> * @return: Value with bit @__n set.
> */
> -#define REG_BIT8(__n) \
> - ((u8)(BIT(__n) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
> - ((__n) < 0 || (__n) > 7))))
> +#define REG_BIT8(__n) BIT_U8(__n)
>
> /**
> * REG_GENMASK() - Prepare a continuous u32 bitmask
> @@ -44,11 +38,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK(__high, __low) \
> - ((u32)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>
> /**
> * REG_GENMASK64() - Prepare a continuous u64 bitmask
> @@ -59,11 +49,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK64(__high, __low) \
> - ((u64)(GENMASK_ULL(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>
> /**
> * REG_GENMASK8() - Prepare a continuous u8 bitmask
> @@ -74,11 +60,7 @@
> *
> * @return: Continuous bitmask from @__high to @__low, inclusive.
> */
> -#define REG_GENMASK8(__high, __low) \
> - ((u8)(GENMASK(__high, __low) + \
> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
> - __is_constexpr(__low) && \
> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>
> /*
> * Local integer constant expression version of is_power_of_2().
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
2023-05-09 7:57 ` [Intel-gfx] " Jani Nikula
(?)
(?)
@ 2023-05-09 8:15 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 8:15 UTC (permalink / raw)
To: Jani Nikula
Cc: intel-gfx, intel-xe, dri-devel, Andy Shevchenko, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Tue, May 09, 2023 at 10:57:19AM +0300, Jani Nikula wrote:
>On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> Convert the REG_* macros from i915_reg_defs.h to use the new macros
>> defined in linux/bits.h. This is just to help on the implementation
>> of the new macros and not intended to be applied.
>
>This drops a number of build time input checks as well as casts to the
>specified types.
the explicit checks... but the checks are still there and the compiler
still gives me a warning or error for using invalid values. See test program in
the second patch. Example:
static const u32 a2 = GENMASK_U32(32, 0);
In file included from /tmp/genmask.c:2:
include/linux/bits.h:47:19: warning: right shift count is negative [-Wshift-count-negative]
47 | (~U32(0) >> (32 - 1 - (h))))
| ^~
It's a warning, not an error though.
Same warning for the other fixed-widths with numbers above the supported width.
For negative values:
In file included from include/linux/bits.h:21,
from /tmp/genmask.c:2:
include/linux/build_bug.h:16:51: error: negative width in bit-field ‘<anonymous>’
16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
| ^
The cast to the specified type we lose indeed. Could you give an example where
those are useful in the context they are used? I debated adding them, but couldn't find
a justified use of them.
Lucas De Marchi
>
>BR,
>Jani.
>
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
>> 1 file changed, 5 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
>> index 622d603080f9..61fbb8d62b25 100644
>> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
>> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
>> @@ -17,10 +17,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT(__n) \
>> - ((u32)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 31))))
>> +#define REG_BIT(__n) BIT_U32(__n)
>>
>> /**
>> * REG_BIT8() - Prepare a u8 bit value
>> @@ -30,10 +27,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT8(__n) \
>> - ((u8)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 7))))
>> +#define REG_BIT8(__n) BIT_U8(__n)
>>
>> /**
>> * REG_GENMASK() - Prepare a continuous u32 bitmask
>> @@ -44,11 +38,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK(__high, __low) \
>> - ((u32)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
>> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>>
>> /**
>> * REG_GENMASK64() - Prepare a continuous u64 bitmask
>> @@ -59,11 +49,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK64(__high, __low) \
>> - ((u64)(GENMASK_ULL(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
>> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>>
>> /**
>> * REG_GENMASK8() - Prepare a continuous u8 bitmask
>> @@ -74,11 +60,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK8(__high, __low) \
>> - ((u8)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
>> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>>
>> /*
>> * Local integer constant expression version of is_power_of_2().
>
>--
>Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 8:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 8:15 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Tue, May 09, 2023 at 10:57:19AM +0300, Jani Nikula wrote:
>On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> Convert the REG_* macros from i915_reg_defs.h to use the new macros
>> defined in linux/bits.h. This is just to help on the implementation
>> of the new macros and not intended to be applied.
>
>This drops a number of build time input checks as well as casts to the
>specified types.
the explicit checks... but the checks are still there and the compiler
still gives me a warning or error for using invalid values. See test program in
the second patch. Example:
static const u32 a2 = GENMASK_U32(32, 0);
In file included from /tmp/genmask.c:2:
include/linux/bits.h:47:19: warning: right shift count is negative [-Wshift-count-negative]
47 | (~U32(0) >> (32 - 1 - (h))))
| ^~
It's a warning, not an error though.
Same warning for the other fixed-widths with numbers above the supported width.
For negative values:
In file included from include/linux/bits.h:21,
from /tmp/genmask.c:2:
include/linux/build_bug.h:16:51: error: negative width in bit-field ‘<anonymous>’
16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
| ^
The cast to the specified type we lose indeed. Could you give an example where
those are useful in the context they are used? I debated adding them, but couldn't find
a justified use of them.
Lucas De Marchi
>
>BR,
>Jani.
>
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
>> 1 file changed, 5 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
>> index 622d603080f9..61fbb8d62b25 100644
>> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
>> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
>> @@ -17,10 +17,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT(__n) \
>> - ((u32)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 31))))
>> +#define REG_BIT(__n) BIT_U32(__n)
>>
>> /**
>> * REG_BIT8() - Prepare a u8 bit value
>> @@ -30,10 +27,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT8(__n) \
>> - ((u8)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 7))))
>> +#define REG_BIT8(__n) BIT_U8(__n)
>>
>> /**
>> * REG_GENMASK() - Prepare a continuous u32 bitmask
>> @@ -44,11 +38,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK(__high, __low) \
>> - ((u32)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
>> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>>
>> /**
>> * REG_GENMASK64() - Prepare a continuous u64 bitmask
>> @@ -59,11 +49,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK64(__high, __low) \
>> - ((u64)(GENMASK_ULL(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
>> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>>
>> /**
>> * REG_GENMASK8() - Prepare a continuous u8 bitmask
>> @@ -74,11 +60,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK8(__high, __low) \
>> - ((u8)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
>> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>>
>> /*
>> * Local integer constant expression version of is_power_of_2().
>
>--
>Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 8:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 8:15 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Tue, May 09, 2023 at 10:57:19AM +0300, Jani Nikula wrote:
>On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> Convert the REG_* macros from i915_reg_defs.h to use the new macros
>> defined in linux/bits.h. This is just to help on the implementation
>> of the new macros and not intended to be applied.
>
>This drops a number of build time input checks as well as casts to the
>specified types.
the explicit checks... but the checks are still there and the compiler
still gives me a warning or error for using invalid values. See test program in
the second patch. Example:
static const u32 a2 = GENMASK_U32(32, 0);
In file included from /tmp/genmask.c:2:
include/linux/bits.h:47:19: warning: right shift count is negative [-Wshift-count-negative]
47 | (~U32(0) >> (32 - 1 - (h))))
| ^~
It's a warning, not an error though.
Same warning for the other fixed-widths with numbers above the supported width.
For negative values:
In file included from include/linux/bits.h:21,
from /tmp/genmask.c:2:
include/linux/build_bug.h:16:51: error: negative width in bit-field ‘<anonymous>’
16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
| ^
The cast to the specified type we lose indeed. Could you give an example where
those are useful in the context they are used? I debated adding them, but couldn't find
a justified use of them.
Lucas De Marchi
>
>BR,
>Jani.
>
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
>> 1 file changed, 5 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
>> index 622d603080f9..61fbb8d62b25 100644
>> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
>> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
>> @@ -17,10 +17,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT(__n) \
>> - ((u32)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 31))))
>> +#define REG_BIT(__n) BIT_U32(__n)
>>
>> /**
>> * REG_BIT8() - Prepare a u8 bit value
>> @@ -30,10 +27,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT8(__n) \
>> - ((u8)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 7))))
>> +#define REG_BIT8(__n) BIT_U8(__n)
>>
>> /**
>> * REG_GENMASK() - Prepare a continuous u32 bitmask
>> @@ -44,11 +38,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK(__high, __low) \
>> - ((u32)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
>> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>>
>> /**
>> * REG_GENMASK64() - Prepare a continuous u64 bitmask
>> @@ -59,11 +49,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK64(__high, __low) \
>> - ((u64)(GENMASK_ULL(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
>> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>>
>> /**
>> * REG_GENMASK8() - Prepare a continuous u8 bitmask
>> @@ -74,11 +60,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK8(__high, __low) \
>> - ((u8)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
>> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>>
>> /*
>> * Local integer constant expression version of is_power_of_2().
>
>--
>Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros
@ 2023-05-09 8:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 8:15 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Tue, May 09, 2023 at 10:57:19AM +0300, Jani Nikula wrote:
>On Mon, 08 May 2023, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
>> Convert the REG_* macros from i915_reg_defs.h to use the new macros
>> defined in linux/bits.h. This is just to help on the implementation
>> of the new macros and not intended to be applied.
>
>This drops a number of build time input checks as well as casts to the
>specified types.
the explicit checks... but the checks are still there and the compiler
still gives me a warning or error for using invalid values. See test program in
the second patch. Example:
static const u32 a2 = GENMASK_U32(32, 0);
In file included from /tmp/genmask.c:2:
include/linux/bits.h:47:19: warning: right shift count is negative [-Wshift-count-negative]
47 | (~U32(0) >> (32 - 1 - (h))))
| ^~
It's a warning, not an error though.
Same warning for the other fixed-widths with numbers above the supported width.
For negative values:
In file included from include/linux/bits.h:21,
from /tmp/genmask.c:2:
include/linux/build_bug.h:16:51: error: negative width in bit-field ‘<anonymous>’
16 | #define BUILD_BUG_ON_ZERO(e) ((int)(sizeof(struct { int:(-!!(e)); })))
| ^
The cast to the specified type we lose indeed. Could you give an example where
those are useful in the context they are used? I debated adding them, but couldn't find
a justified use of them.
Lucas De Marchi
>
>BR,
>Jani.
>
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++-----------------------
>> 1 file changed, 5 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i915_reg_defs.h
>> index 622d603080f9..61fbb8d62b25 100644
>> --- a/drivers/gpu/drm/i915/i915_reg_defs.h
>> +++ b/drivers/gpu/drm/i915/i915_reg_defs.h
>> @@ -17,10 +17,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT(__n) \
>> - ((u32)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 31))))
>> +#define REG_BIT(__n) BIT_U32(__n)
>>
>> /**
>> * REG_BIT8() - Prepare a u8 bit value
>> @@ -30,10 +27,7 @@
>> *
>> * @return: Value with bit @__n set.
>> */
>> -#define REG_BIT8(__n) \
>> - ((u8)(BIT(__n) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \
>> - ((__n) < 0 || (__n) > 7))))
>> +#define REG_BIT8(__n) BIT_U8(__n)
>>
>> /**
>> * REG_GENMASK() - Prepare a continuous u32 bitmask
>> @@ -44,11 +38,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK(__high, __low) \
>> - ((u32)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 31 || (__low) > (__high)))))
>> +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low)
>>
>> /**
>> * REG_GENMASK64() - Prepare a continuous u64 bitmask
>> @@ -59,11 +49,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK64(__high, __low) \
>> - ((u64)(GENMASK_ULL(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 63 || (__low) > (__high)))))
>> +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low)
>>
>> /**
>> * REG_GENMASK8() - Prepare a continuous u8 bitmask
>> @@ -74,11 +60,7 @@
>> *
>> * @return: Continuous bitmask from @__high to @__low, inclusive.
>> */
>> -#define REG_GENMASK8(__high, __low) \
>> - ((u8)(GENMASK(__high, __low) + \
>> - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \
>> - __is_constexpr(__low) && \
>> - ((__low) < 0 || (__high) > 7 || (__low) > (__high)))))
>> +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low)
>>
>> /*
>> * Local integer constant expression version of is_power_of_2().
>
>--
>Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
@ 2023-05-09 14:00 ` Gustavo Sousa
-1 siblings, 0 replies; 114+ messages in thread
From: Gustavo Sousa @ 2023-05-09 14:00 UTC (permalink / raw)
To: Lucas De Marchi, dri-devel, intel-gfx, intel-xe
Cc: Masahiro Yamada, Kevin Brodsky, Lucas De Marchi, linux-kernel,
Christian König, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Andrew Morton
Quoting Lucas De Marchi (2023-05-09 02:14:02)
>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>masks for fixed-width types and also the corresponding BIT_U32(),
>BIT_U16() and BIT_U8().
>
>All of those depend on a new "U" suffix added to the integer constant.
>Due to naming clashes it's better to call the macro U32. Since C doesn't
>have a proper suffix for short and char types, the U16 and U18 variants
>just use U32 with one additional check in the BIT_* macros to make
>sure the compiler gives an error when the those types overflow.
>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>as otherwise they would allow an invalid bit to be passed. Hence
>implement them in include/linux/bits.h rather than together with
>the other BIT* variants.
>
>The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..ff4786c99b8c 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
>+#define __GENMASK_U32(h, l) \
>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>+ (~U32(0) >> (32 - 1 - (h))))
>+#define GENMASK_U32(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>+
>+#define __GENMASK_U16(h, l) \
>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>+ (U32(0xffff) >> (16 - 1 - (h))))
>+#define GENMASK_U16(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>+
>+#define __GENMASK_U8(h, l) \
>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>+ (U32(0xff) >> (8 - 1 - (h))))
>+#define GENMASK_U8(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
I wonder if we should use BIT_U* variants in the above to ensure the values are
valid. If so, we get a nice boundary check and we also can use a single
definition for the mask generation:
#define __GENMASK_U32(h, l) \
(((~U32(0)) - (U32(1) << (l)) + 1) & \
(~U32(0) >> (32 - 1 - (h))))
#define GENMASK_U32(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
#define GENMASK_U16(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
#define GENMASK_U8(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>+
>+#define BIT_U32(nr) _BITU32(nr)
>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
--
Gustavo Sousa
>+
> #endif /* __LINUX_BITS_H */
>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>index a429381e7ca5..3a4e152520f4 100644
>--- a/include/uapi/linux/const.h
>+++ b/include/uapi/linux/const.h
>@@ -22,9 +22,11 @@
> #define _AT(T,X) ((T)(X))
> #endif
>
>+#define _U32(x) (_AC(x, U))
> #define _UL(x) (_AC(x, UL))
> #define _ULL(x) (_AC(x, ULL))
>
>+#define _BITU32(x) (_U32(1) << (x))
> #define _BITUL(x) (_UL(1) << (x))
> #define _BITULL(x) (_ULL(1) << (x))
>
>diff --git a/include/vdso/const.h b/include/vdso/const.h
>index 94b385ad438d..417384a9795b 100644
>--- a/include/vdso/const.h
>+++ b/include/vdso/const.h
>@@ -4,6 +4,7 @@
>
> #include <uapi/linux/const.h>
>
>+#define U32(x) (_U32(x))
> #define UL(x) (_UL(x))
> #define ULL(x) (_ULL(x))
>
>--
>2.40.1
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 14:00 ` Gustavo Sousa
0 siblings, 0 replies; 114+ messages in thread
From: Gustavo Sousa @ 2023-05-09 14:00 UTC (permalink / raw)
To: Lucas De Marchi, dri-devel, intel-gfx, intel-xe
Cc: Andrew Morton, Masahiro Yamada, Kevin Brodsky, Lucas De Marchi,
linux-kernel, Alex Deucher, Thomas Gleixner, Andy Shevchenko,
Christian König
Quoting Lucas De Marchi (2023-05-09 02:14:02)
>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>masks for fixed-width types and also the corresponding BIT_U32(),
>BIT_U16() and BIT_U8().
>
>All of those depend on a new "U" suffix added to the integer constant.
>Due to naming clashes it's better to call the macro U32. Since C doesn't
>have a proper suffix for short and char types, the U16 and U18 variants
>just use U32 with one additional check in the BIT_* macros to make
>sure the compiler gives an error when the those types overflow.
>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>as otherwise they would allow an invalid bit to be passed. Hence
>implement them in include/linux/bits.h rather than together with
>the other BIT* variants.
>
>The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..ff4786c99b8c 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
>+#define __GENMASK_U32(h, l) \
>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>+ (~U32(0) >> (32 - 1 - (h))))
>+#define GENMASK_U32(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>+
>+#define __GENMASK_U16(h, l) \
>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>+ (U32(0xffff) >> (16 - 1 - (h))))
>+#define GENMASK_U16(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>+
>+#define __GENMASK_U8(h, l) \
>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>+ (U32(0xff) >> (8 - 1 - (h))))
>+#define GENMASK_U8(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
I wonder if we should use BIT_U* variants in the above to ensure the values are
valid. If so, we get a nice boundary check and we also can use a single
definition for the mask generation:
#define __GENMASK_U32(h, l) \
(((~U32(0)) - (U32(1) << (l)) + 1) & \
(~U32(0) >> (32 - 1 - (h))))
#define GENMASK_U32(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
#define GENMASK_U16(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
#define GENMASK_U8(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>+
>+#define BIT_U32(nr) _BITU32(nr)
>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
--
Gustavo Sousa
>+
> #endif /* __LINUX_BITS_H */
>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>index a429381e7ca5..3a4e152520f4 100644
>--- a/include/uapi/linux/const.h
>+++ b/include/uapi/linux/const.h
>@@ -22,9 +22,11 @@
> #define _AT(T,X) ((T)(X))
> #endif
>
>+#define _U32(x) (_AC(x, U))
> #define _UL(x) (_AC(x, UL))
> #define _ULL(x) (_AC(x, ULL))
>
>+#define _BITU32(x) (_U32(1) << (x))
> #define _BITUL(x) (_UL(1) << (x))
> #define _BITULL(x) (_ULL(1) << (x))
>
>diff --git a/include/vdso/const.h b/include/vdso/const.h
>index 94b385ad438d..417384a9795b 100644
>--- a/include/vdso/const.h
>+++ b/include/vdso/const.h
>@@ -4,6 +4,7 @@
>
> #include <uapi/linux/const.h>
>
>+#define U32(x) (_U32(x))
> #define UL(x) (_UL(x))
> #define ULL(x) (_ULL(x))
>
>--
>2.40.1
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 14:00 ` Gustavo Sousa
0 siblings, 0 replies; 114+ messages in thread
From: Gustavo Sousa @ 2023-05-09 14:00 UTC (permalink / raw)
To: Lucas De Marchi, dri-devel, intel-gfx, intel-xe
Cc: Andrew Morton, Masahiro Yamada, Kevin Brodsky, Lucas De Marchi,
linux-kernel, Alex Deucher, Thomas Gleixner, Andy Shevchenko,
Christian König
Quoting Lucas De Marchi (2023-05-09 02:14:02)
>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>masks for fixed-width types and also the corresponding BIT_U32(),
>BIT_U16() and BIT_U8().
>
>All of those depend on a new "U" suffix added to the integer constant.
>Due to naming clashes it's better to call the macro U32. Since C doesn't
>have a proper suffix for short and char types, the U16 and U18 variants
>just use U32 with one additional check in the BIT_* macros to make
>sure the compiler gives an error when the those types overflow.
>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>as otherwise they would allow an invalid bit to be passed. Hence
>implement them in include/linux/bits.h rather than together with
>the other BIT* variants.
>
>The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..ff4786c99b8c 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
>+#define __GENMASK_U32(h, l) \
>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>+ (~U32(0) >> (32 - 1 - (h))))
>+#define GENMASK_U32(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>+
>+#define __GENMASK_U16(h, l) \
>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>+ (U32(0xffff) >> (16 - 1 - (h))))
>+#define GENMASK_U16(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>+
>+#define __GENMASK_U8(h, l) \
>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>+ (U32(0xff) >> (8 - 1 - (h))))
>+#define GENMASK_U8(h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
I wonder if we should use BIT_U* variants in the above to ensure the values are
valid. If so, we get a nice boundary check and we also can use a single
definition for the mask generation:
#define __GENMASK_U32(h, l) \
(((~U32(0)) - (U32(1) << (l)) + 1) & \
(~U32(0) >> (32 - 1 - (h))))
#define GENMASK_U32(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
#define GENMASK_U16(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
#define GENMASK_U8(h, l) \
(GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>+
>+#define BIT_U32(nr) _BITU32(nr)
>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
--
Gustavo Sousa
>+
> #endif /* __LINUX_BITS_H */
>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>index a429381e7ca5..3a4e152520f4 100644
>--- a/include/uapi/linux/const.h
>+++ b/include/uapi/linux/const.h
>@@ -22,9 +22,11 @@
> #define _AT(T,X) ((T)(X))
> #endif
>
>+#define _U32(x) (_AC(x, U))
> #define _UL(x) (_AC(x, UL))
> #define _ULL(x) (_AC(x, ULL))
>
>+#define _BITU32(x) (_U32(1) << (x))
> #define _BITUL(x) (_UL(1) << (x))
> #define _BITULL(x) (_ULL(1) << (x))
>
>diff --git a/include/vdso/const.h b/include/vdso/const.h
>index 94b385ad438d..417384a9795b 100644
>--- a/include/vdso/const.h
>+++ b/include/vdso/const.h
>@@ -4,6 +4,7 @@
>
> #include <uapi/linux/const.h>
>
>+#define U32(x) (_U32(x))
> #define UL(x) (_UL(x))
> #define ULL(x) (_ULL(x))
>
>--
>2.40.1
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-xe] ✓ CI.Patch_applied: success for Fixed-width mask/bit helpers (rev2)
2023-05-09 5:14 ` Lucas De Marchi
` (9 preceding siblings ...)
(?)
@ 2023-05-09 15:56 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 15:56 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-xe
== Series Details ==
Series: Fixed-width mask/bit helpers (rev2)
URL : https://patchwork.freedesktop.org/series/117489/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: b99d11e80 drm/xe: destroy clients engine and vm xarrays on close
=== git am output follows ===
Applying: drm/amd: Remove wrapper macros over get_u{32, 16, 8}
Applying: linux/bits.h: Add fixed-width GENMASK and BIT macros
Applying: drm/i915: Temporary conversion to new GENMASK/BIT macros
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-xe] ✓ CI.KUnit: success for Fixed-width mask/bit helpers (rev2)
2023-05-09 5:14 ` Lucas De Marchi
` (10 preceding siblings ...)
(?)
@ 2023-05-09 15:58 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 15:58 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-xe
== Series Details ==
Series: Fixed-width mask/bit helpers (rev2)
URL : https://patchwork.freedesktop.org/series/117489/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[15:56:50] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:56:54] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[15:57:16] Starting KUnit Kernel (1/1)...
[15:57:16] ============================================================
[15:57:16] ==================== xe_bo (2 subtests) ====================
[15:57:16] [SKIPPED] xe_ccs_migrate_kunit
[15:57:16] [SKIPPED] xe_bo_evict_kunit
[15:57:16] ===================== [SKIPPED] xe_bo ======================
[15:57:16] ================== xe_dma_buf (1 subtest) ==================
[15:57:16] [SKIPPED] xe_dma_buf_kunit
[15:57:16] =================== [SKIPPED] xe_dma_buf ===================
[15:57:16] ================== xe_migrate (1 subtest) ==================
[15:57:16] [SKIPPED] xe_migrate_sanity_kunit
[15:57:16] =================== [SKIPPED] xe_migrate ===================
[15:57:16] =================== xe_pci (2 subtests) ====================
[15:57:16] [PASSED] xe_gmdid_graphics_ip
[15:57:16] [PASSED] xe_gmdid_media_ip
[15:57:16] ===================== [PASSED] xe_pci ======================
[15:57:16] ==================== xe_rtp (1 subtest) ====================
[15:57:16] ================== xe_rtp_process_tests ===================
[15:57:16] [PASSED] coalesce-same-reg
[15:57:16] [PASSED] no-match-no-add
[15:57:16] [PASSED] no-match-no-add-multiple-rules
[15:57:16] [PASSED] two-regs-two-entries
[15:57:16] [PASSED] clr-one-set-other
[15:57:16] [PASSED] set-field
[15:57:16] [PASSED] conflict-duplicate
[15:57:16] [PASSED] conflict-not-disjoint
[15:57:16] [PASSED] conflict-reg-type
[15:57:16] ============== [PASSED] xe_rtp_process_tests ===============
[15:57:16] ===================== [PASSED] xe_rtp ======================
[15:57:16] ==================== xe_wa (1 subtest) =====================
[15:57:16] ======================== xe_wa_gt =========================
[15:57:16] [PASSED] TIGERLAKE (B0)
[15:57:16] [PASSED] DG1 (A0)
[15:57:16] [PASSED] DG1 (B0)
[15:57:16] [PASSED] ALDERLAKE_S (A0)
[15:57:16] [PASSED] ALDERLAKE_S (B0)
[15:57:16] [PASSED] ALDERLAKE_S (C0)
[15:57:16] [PASSED] ALDERLAKE_S (D0)
[15:57:16] [PASSED] DG2_G10 (A0)
[15:57:16] [PASSED] DG2_G10 (A1)
[15:57:16] [PASSED] DG2_G10 (B0)
[15:57:16] [PASSED] DG2_G10 (C0)
[15:57:16] [PASSED] DG2_G11 (A0)
[15:57:16] [PASSED] DG2_G11 (B0)
[15:57:16] [PASSED] DG2_G11 (B1)
[15:57:16] [PASSED] DG2_G12 (A0)
[15:57:16] [PASSED] DG2_G12 (A1)
[15:57:16] [PASSED] PVC (B0)
[15:57:16] [PASSED] PVC (B1)
[15:57:16] [PASSED] PVC (C0)
[15:57:16] ==================== [PASSED] xe_wa_gt =====================
[15:57:16] ====================== [PASSED] xe_wa ======================
[15:57:16] ============================================================
[15:57:16] Testing complete. Ran 34 tests: passed: 30, skipped: 4
[15:57:16] Elapsed time: 26.068s total, 4.182s configuring, 21.717s building, 0.140s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[15:57:16] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:57:18] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[15:57:36] Starting KUnit Kernel (1/1)...
[15:57:36] ============================================================
[15:57:37] ============ drm_test_pick_cmdline (2 subtests) ============
[15:57:37] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[15:57:37] =============== drm_test_pick_cmdline_named ===============
[15:57:37] [PASSED] NTSC
[15:57:37] [PASSED] NTSC-J
[15:57:37] [PASSED] PAL
[15:57:37] [PASSED] PAL-M
[15:57:37] =========== [PASSED] drm_test_pick_cmdline_named ===========
[15:57:37] ============== [PASSED] drm_test_pick_cmdline ==============
[15:57:37] ================== drm_buddy (6 subtests) ==================
[15:57:37] [PASSED] drm_test_buddy_alloc_limit
[15:57:37] [PASSED] drm_test_buddy_alloc_range
[15:57:37] [PASSED] drm_test_buddy_alloc_optimistic
[15:57:37] [PASSED] drm_test_buddy_alloc_pessimistic
[15:57:37] [PASSED] drm_test_buddy_alloc_smoke
[15:57:37] [PASSED] drm_test_buddy_alloc_pathological
[15:57:37] ==================== [PASSED] drm_buddy ====================
[15:57:37] ============= drm_cmdline_parser (40 subtests) =============
[15:57:37] [PASSED] drm_test_cmdline_force_d_only
[15:57:37] [PASSED] drm_test_cmdline_force_D_only_dvi
[15:57:37] [PASSED] drm_test_cmdline_force_D_only_hdmi
[15:57:37] [PASSED] drm_test_cmdline_force_D_only_not_digital
[15:57:37] [PASSED] drm_test_cmdline_force_e_only
[15:57:37] [PASSED] drm_test_cmdline_res
[15:57:37] [PASSED] drm_test_cmdline_res_vesa
[15:57:37] [PASSED] drm_test_cmdline_res_vesa_rblank
[15:57:37] [PASSED] drm_test_cmdline_res_rblank
[15:57:37] [PASSED] drm_test_cmdline_res_bpp
[15:57:37] [PASSED] drm_test_cmdline_res_refresh
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[15:57:37] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[15:57:37] [PASSED] drm_test_cmdline_res_margins_force_on
[15:57:37] [PASSED] drm_test_cmdline_res_vesa_margins
[15:57:37] [PASSED] drm_test_cmdline_name
[15:57:37] [PASSED] drm_test_cmdline_name_bpp
[15:57:37] [PASSED] drm_test_cmdline_name_option
[15:57:37] [PASSED] drm_test_cmdline_name_bpp_option
[15:57:37] [PASSED] drm_test_cmdline_rotate_0
[15:57:37] [PASSED] drm_test_cmdline_rotate_90
[15:57:37] [PASSED] drm_test_cmdline_rotate_180
[15:57:37] [PASSED] drm_test_cmdline_rotate_270
[15:57:37] [PASSED] drm_test_cmdline_hmirror
[15:57:37] [PASSED] drm_test_cmdline_vmirror
[15:57:37] [PASSED] drm_test_cmdline_margin_options
[15:57:37] [PASSED] drm_test_cmdline_multiple_options
[15:57:37] [PASSED] drm_test_cmdline_bpp_extra_and_option
[15:57:37] [PASSED] drm_test_cmdline_extra_and_option
[15:57:37] [PASSED] drm_test_cmdline_freestanding_options
[15:57:37] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[15:57:37] [PASSED] drm_test_cmdline_panel_orientation
[15:57:37] ================ drm_test_cmdline_invalid =================
[15:57:37] [PASSED] margin_only
[15:57:37] [PASSED] interlace_only
[15:57:37] [PASSED] res_missing_x
[15:57:37] [PASSED] res_missing_y
[15:57:37] [PASSED] res_bad_y
[15:57:37] [PASSED] res_missing_y_bpp
[15:57:37] [PASSED] res_bad_bpp
[15:57:37] [PASSED] res_bad_refresh
[15:57:37] [PASSED] res_bpp_refresh_force_on_off
[15:57:37] [PASSED] res_invalid_mode
[15:57:37] [PASSED] res_bpp_wrong_place_mode
[15:57:37] [PASSED] name_bpp_refresh
[15:57:37] [PASSED] name_refresh
[15:57:37] [PASSED] name_refresh_wrong_mode
[15:57:37] [PASSED] name_refresh_invalid_mode
[15:57:37] [PASSED] rotate_multiple
[15:57:37] [PASSED] rotate_invalid_val
[15:57:37] [PASSED] rotate_truncated
[15:57:37] [PASSED] invalid_option
[15:57:37] [PASSED] invalid_tv_option
[15:57:37] [PASSED] truncated_tv_option
[15:57:37] ============ [PASSED] drm_test_cmdline_invalid =============
[15:57:37] =============== drm_test_cmdline_tv_options ===============
[15:57:37] [PASSED] NTSC
[15:57:37] [PASSED] NTSC_443
[15:57:37] [PASSED] NTSC_J
[15:57:37] [PASSED] PAL
[15:57:37] [PASSED] PAL_M
[15:57:37] [PASSED] PAL_N
[15:57:37] [PASSED] SECAM
[15:57:37] =========== [PASSED] drm_test_cmdline_tv_options ===========
[15:57:37] =============== [PASSED] drm_cmdline_parser ================
[15:57:37] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[15:57:37] ========== drm_test_get_tv_mode_from_name_valid ===========
[15:57:37] [PASSED] NTSC
[15:57:37] [PASSED] NTSC-443
[15:57:37] [PASSED] NTSC-J
[15:57:37] [PASSED] PAL
[15:57:37] [PASSED] PAL-M
[15:57:37] [PASSED] PAL-N
[15:57:37] [PASSED] SECAM
[15:57:37] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[15:57:37] [PASSED] drm_test_get_tv_mode_from_name_truncated
[15:57:37] ============ [PASSED] drm_get_tv_mode_from_name ============
[15:57:37] ============= drm_damage_helper (21 subtests) ==============
[15:57:37] [PASSED] drm_test_damage_iter_no_damage
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_src_moved
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_not_visible
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[15:57:37] [PASSED] drm_test_damage_iter_no_damage_no_fb
[15:57:37] [PASSED] drm_test_damage_iter_simple_damage
[15:57:37] [PASSED] drm_test_damage_iter_single_damage
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_outside_src
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_src_moved
[15:57:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[15:57:37] [PASSED] drm_test_damage_iter_damage
[15:57:37] [PASSED] drm_test_damage_iter_damage_one_intersect
[15:57:37] [PASSED] drm_test_damage_iter_damage_one_outside
[15:57:37] [PASSED] drm_test_damage_iter_damage_src_moved
[15:57:37] [PASSED] drm_test_damage_iter_damage_not_visible
[15:57:37] ================ [PASSED] drm_damage_helper ================
[15:57:37] ============== drm_dp_mst_helper (2 subtests) ==============
[15:57:37] ============== drm_test_dp_mst_calc_pbn_mode ==============
[15:57:37] [PASSED] Clock 154000 BPP 30 DSC disabled
[15:57:37] [PASSED] Clock 234000 BPP 30 DSC disabled
[15:57:37] [PASSED] Clock 297000 BPP 24 DSC disabled
[15:57:37] [PASSED] Clock 332880 BPP 24 DSC enabled
[15:57:37] [PASSED] Clock 324540 BPP 24 DSC enabled
[15:57:37] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[15:57:37] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[15:57:37] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[15:57:37] [PASSED] DP_POWER_UP_PHY with port number
[15:57:37] [PASSED] DP_POWER_DOWN_PHY with port number
[15:57:37] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[15:57:37] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[15:57:37] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[15:57:37] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[15:57:37] [PASSED] DP_QUERY_PAYLOAD with port number
[15:57:37] [PASSED] DP_QUERY_PAYLOAD with VCPI
[15:57:37] [PASSED] DP_REMOTE_DPCD_READ with port number
[15:57:37] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[15:57:37] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[15:57:37] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[15:57:37] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[15:57:37] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[15:57:37] [PASSED] DP_REMOTE_I2C_READ with port number
[15:57:37] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[15:57:37] [PASSED] DP_REMOTE_I2C_READ with transactions array
[15:57:37] [PASSED] DP_REMOTE_I2C_WRITE with port number
[15:57:37] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[15:57:37] [PASSED] DP_REMOTE_I2C_WRITE with data array
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[15:57:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[15:57:37] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[15:57:37] ================ [PASSED] drm_dp_mst_helper ================
[15:57:37] =========== drm_format_helper_test (11 subtests) ===========
[15:57:37] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[15:57:37] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[15:57:37] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[15:57:37] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[15:57:37] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[15:57:37] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[15:57:37] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[15:57:37] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[15:57:37] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[15:57:37] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[15:57:37] ============== drm_test_fb_xrgb8888_to_mono ===============
[15:57:37] [PASSED] single_pixel_source_buffer
[15:57:37] [PASSED] single_pixel_clip_rectangle
[15:57:37] [PASSED] well_known_colors
[15:57:37] [PASSED] destination_pitch
[15:57:37] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[15:57:37] ============= [PASSED] drm_format_helper_test ==============
[15:57:37] ================= drm_format (18 subtests) =================
[15:57:37] [PASSED] drm_test_format_block_width_invalid
[15:57:37] [PASSED] drm_test_format_block_width_one_plane
[15:57:37] [PASSED] drm_test_format_block_width_two_plane
[15:57:37] [PASSED] drm_test_format_block_width_three_plane
[15:57:37] [PASSED] drm_test_format_block_width_tiled
[15:57:37] [PASSED] drm_test_format_block_height_invalid
[15:57:37] [PASSED] drm_test_format_block_height_one_plane
[15:57:37] [PASSED] drm_test_format_block_height_two_plane
[15:57:37] [PASSED] drm_test_format_block_height_three_plane
[15:57:37] [PASSED] drm_test_format_block_height_tiled
[15:57:37] [PASSED] drm_test_format_min_pitch_invalid
[15:57:37] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[15:57:37] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[15:57:37] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[15:57:37] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[15:57:37] [PASSED] drm_test_format_min_pitch_two_plane
[15:57:37] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[15:57:37] [PASSED] drm_test_format_min_pitch_tiled
[15:57:37] =================== [PASSED] drm_format ====================
[15:57:37] =============== drm_framebuffer (1 subtest) ================
[15:57:37] =============== drm_test_framebuffer_create ===============
[15:57:37] [PASSED] ABGR8888 normal sizes
[15:57:37] [PASSED] ABGR8888 max sizes
[15:57:37] [PASSED] ABGR8888 pitch greater than min required
[15:57:37] [PASSED] ABGR8888 pitch less than min required
[15:57:37] [PASSED] ABGR8888 Invalid width
[15:57:37] [PASSED] ABGR8888 Invalid buffer handle
[15:57:37] [PASSED] No pixel format
[15:57:37] [PASSED] ABGR8888 Width 0
[15:57:37] [PASSED] ABGR8888 Height 0
[15:57:37] [PASSED] ABGR8888 Out of bound height * pitch combination
[15:57:37] [PASSED] ABGR8888 Large buffer offset
[15:57:37] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[15:57:37] [PASSED] ABGR8888 Valid buffer modifier
[15:57:37] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[15:57:37] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] NV12 Normal sizes
[15:57:37] [PASSED] NV12 Max sizes
[15:57:37] [PASSED] NV12 Invalid pitch
[15:57:37] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[15:57:37] [PASSED] NV12 different modifier per-plane
[15:57:37] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[15:57:37] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] NV12 Modifier for inexistent plane
[15:57:37] [PASSED] NV12 Handle for inexistent plane
[15:57:37] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] YVU420 Normal sizes
[15:57:37] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[15:57:37] [PASSED] YVU420 Max sizes
[15:57:37] [PASSED] YVU420 Invalid pitch
[15:57:37] [PASSED] YVU420 Different pitches
[15:57:37] [PASSED] YVU420 Different buffer offsets/pitches
[15:57:37] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[15:57:37] [PASSED] YVU420 Valid modifier
[15:57:37] [PASSED] YVU420 Different modifiers per plane
[15:57:37] [PASSED] YVU420 Modifier for inexistent plane
[15:57:37] [PASSED] X0L2 Normal sizes
[15:57:37] [PASSED] X0L2 Max sizes
[15:57:37] [PASSED] X0L2 Invalid pitch
[15:57:37] [PASSED] X0L2 Pitch greater than minimum required
stty: 'standard input': Inappropriate ioctl for device
[15:57:37] [PASSED] X0L2 Handle for inexistent plane
[15:57:37] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[15:57:37] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[15:57:37] [PASSED] X0L2 Valid modifier
[15:57:37] [PASSED] X0L2 Modifier for inexistent plane
[15:57:37] =========== [PASSED] drm_test_framebuffer_create ===========
[15:57:37] ================= [PASSED] drm_framebuffer =================
[15:57:37] =============== drm-test-managed (1 subtest) ===============
[15:57:37] [PASSED] drm_test_managed_run_action
[15:57:37] ================ [PASSED] drm-test-managed =================
[15:57:37] =================== drm_mm (19 subtests) ===================
[15:57:37] [PASSED] drm_test_mm_init
[15:57:37] [PASSED] drm_test_mm_debug
[15:57:47] [PASSED] drm_test_mm_reserve
[15:57:56] [PASSED] drm_test_mm_insert
[15:57:57] [PASSED] drm_test_mm_replace
[15:57:57] [PASSED] drm_test_mm_insert_range
[15:57:57] [PASSED] drm_test_mm_frag
[15:57:57] [PASSED] drm_test_mm_align
[15:57:57] [PASSED] drm_test_mm_align32
[15:57:58] [PASSED] drm_test_mm_align64
[15:57:58] [PASSED] drm_test_mm_evict
[15:57:58] [PASSED] drm_test_mm_evict_range
[15:57:58] [PASSED] drm_test_mm_topdown
[15:57:58] [PASSED] drm_test_mm_bottomup
[15:57:58] [PASSED] drm_test_mm_lowest
[15:57:58] [PASSED] drm_test_mm_highest
[15:57:59] [PASSED] drm_test_mm_color
[15:57:59] [PASSED] drm_test_mm_color_evict
[15:57:59] [PASSED] drm_test_mm_color_evict_range
[15:57:59] ===================== [PASSED] drm_mm ======================
[15:57:59] ============= drm_modes_analog_tv (4 subtests) =============
[15:57:59] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[15:57:59] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[15:57:59] [PASSED] drm_test_modes_analog_tv_pal_576i
[15:57:59] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[15:57:59] =============== [PASSED] drm_modes_analog_tv ===============
[15:57:59] ============== drm_plane_helper (2 subtests) ===============
[15:57:59] =============== drm_test_check_plane_state ================
[15:57:59] [PASSED] clipping_simple
[15:57:59] [PASSED] clipping_rotate_reflect
[15:57:59] [PASSED] positioning_simple
[15:57:59] [PASSED] upscaling
[15:57:59] [PASSED] downscaling
[15:57:59] [PASSED] rounding1
[15:57:59] [PASSED] rounding2
[15:57:59] [PASSED] rounding3
[15:57:59] [PASSED] rounding4
[15:57:59] =========== [PASSED] drm_test_check_plane_state ============
[15:57:59] =========== drm_test_check_invalid_plane_state ============
[15:57:59] [PASSED] positioning_invalid
[15:57:59] [PASSED] upscaling_invalid
[15:57:59] [PASSED] downscaling_invalid
[15:57:59] ======= [PASSED] drm_test_check_invalid_plane_state ========
[15:57:59] ================ [PASSED] drm_plane_helper =================
[15:57:59] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[15:57:59] ====== drm_test_connector_helper_tv_get_modes_check =======
[15:57:59] [PASSED] None
[15:57:59] [PASSED] PAL
[15:57:59] [PASSED] NTSC
[15:57:59] [PASSED] Both, NTSC Default
[15:57:59] [PASSED] Both, PAL Default
[15:57:59] [PASSED] Both, NTSC Default, with PAL on command-line
[15:57:59] [PASSED] Both, PAL Default, with NTSC on command-line
[15:57:59] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[15:57:59] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[15:57:59] ================== drm_rect (9 subtests) ===================
[15:57:59] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[15:57:59] [PASSED] drm_test_rect_clip_scaled_not_clipped
[15:57:59] [PASSED] drm_test_rect_clip_scaled_clipped
[15:57:59] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[15:57:59] ================= drm_test_rect_intersect =================
[15:57:59] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[15:57:59] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[15:57:59] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[15:57:59] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[15:57:59] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[15:57:59] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[15:57:59] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[15:57:59] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[15:57:59] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[15:57:59] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[15:57:59] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[15:57:59] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[15:57:59] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[15:57:59] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[15:57:59] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[15:57:59] ============= [PASSED] drm_test_rect_intersect =============
[15:57:59] ================ drm_test_rect_calc_hscale ================
[15:57:59] [PASSED] normal use
[15:57:59] [PASSED] out of max range
[15:57:59] [PASSED] out of min range
[15:57:59] [PASSED] zero dst
[15:57:59] [PASSED] negative src
[15:57:59] [PASSED] negative dst
[15:57:59] ============ [PASSED] drm_test_rect_calc_hscale ============
[15:57:59] ================ drm_test_rect_calc_vscale ================
[15:57:59] [PASSED] normal use
[15:57:59] [PASSED] out of max range
[15:57:59] [PASSED] out of min range
[15:57:59] [PASSED] zero dst
[15:57:59] [PASSED] negative src
[15:57:59] [PASSED] negative dst
[15:57:59] ============ [PASSED] drm_test_rect_calc_vscale ============
[15:57:59] ================== drm_test_rect_rotate ===================
[15:57:59] [PASSED] reflect-x
[15:57:59] [PASSED] reflect-y
[15:57:59] [PASSED] rotate-0
[15:57:59] [PASSED] rotate-90
[15:57:59] [PASSED] rotate-180
[15:57:59] [PASSED] rotate-270
[15:57:59] ============== [PASSED] drm_test_rect_rotate ===============
[15:57:59] ================ drm_test_rect_rotate_inv =================
[15:57:59] [PASSED] reflect-x
[15:57:59] [PASSED] reflect-y
[15:57:59] [PASSED] rotate-0
[15:57:59] [PASSED] rotate-90
[15:57:59] [PASSED] rotate-180
[15:57:59] [PASSED] rotate-270
[15:57:59] ============ [PASSED] drm_test_rect_rotate_inv =============
[15:57:59] ==================== [PASSED] drm_rect =====================
[15:57:59] ============================================================
[15:57:59] Testing complete. Ran 333 tests: passed: 333
[15:57:59] Elapsed time: 43.029s total, 1.671s configuring, 18.524s building, 22.831s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-xe] ✓ CI.Build: success for Fixed-width mask/bit helpers (rev2)
2023-05-09 5:14 ` Lucas De Marchi
` (11 preceding siblings ...)
(?)
@ 2023-05-09 16:01 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 16:01 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-xe
== Series Details ==
Series: Fixed-width mask/bit helpers (rev2)
URL : https://patchwork.freedesktop.org/series/117489/
State : success
== Summary ==
+ trap cleanup EXIT
+ cd /kernel
+ git clone https://gitlab.freedesktop.org/drm/xe/ci.git .ci
Cloning into '.ci'...
++ date +%s
^[[0Ksection_start:1683647889:build_x86_64[collapsed=true]
^[[0KBuild x86-64
+ echo -e '\e[0Ksection_start:1683647889:build_x86_64[collapsed=true]\r\e[0KBuild x86-64'
+ mkdir -p build64
+ cat .ci/kernel/kconfig
+ make O=build64 olddefconfig
make[1]: Entering directory '/kernel/build64'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/kernel/build64'
++ nproc
+ make O=build64 -j48
make[1]: Entering directory '/kernel/build64'
GEN Makefile
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
SYSHDR arch/x86/include/generated/asm/unistd_32_ia32.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
SYSHDR arch/x86/include/generated/asm/unistd_64_x32.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
SYSTBL arch/x86/include/generated/asm/syscalls_64.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
WRAP arch/x86/include/generated/uapi/asm/types.h
UPD include/generated/uapi/linux/version.h
UPD include/config/kernel.release
UPD include/generated/compile.h
HOSTCC arch/x86/tools/relocs_32.o
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/export.h
HOSTCC arch/x86/tools/relocs_64.o
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/irq_regs.h
WRAP arch/x86/include/generated/asm/kmap_size.h
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
WRAP arch/x86/include/generated/asm/unaligned.h
UPD include/generated/utsrelease.h
HOSTCC scripts/unifdef
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
DESCEND objtool
HOSTCC /kernel/build64/tools/objtool/fixdep.o
HOSTLD /kernel/build64/tools/objtool/fixdep-in.o
LINK /kernel/build64/tools/objtool/fixdep
INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/help.h
INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/exec-cmd.h
INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/pager.h
INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/parse-options.h
INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/run-command.h
CC /kernel/build64/tools/objtool/libsubcmd/exec-cmd.o
INSTALL libsubcmd_headers
CC /kernel/build64/tools/objtool/libsubcmd/help.o
CC /kernel/build64/tools/objtool/libsubcmd/pager.o
CC /kernel/build64/tools/objtool/libsubcmd/parse-options.o
CC /kernel/build64/tools/objtool/libsubcmd/run-command.o
HOSTLD arch/x86/tools/relocs
CC /kernel/build64/tools/objtool/libsubcmd/sigchain.o
CC /kernel/build64/tools/objtool/libsubcmd/subcmd-config.o
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
HDRINST usr/include/video/edid.h
HDRINST usr/include/video/sisfb.h
HDRINST usr/include/drm/amdgpu_drm.h
HDRINST usr/include/video/uvesafb.h
HDRINST usr/include/drm/qaic_accel.h
HDRINST usr/include/drm/i915_drm.h
HDRINST usr/include/drm/vgem_drm.h
HDRINST usr/include/drm/virtgpu_drm.h
HDRINST usr/include/drm/xe_drm.h
HDRINST usr/include/drm/omap_drm.h
HDRINST usr/include/drm/radeon_drm.h
HDRINST usr/include/drm/tegra_drm.h
HDRINST usr/include/drm/drm_mode.h
HDRINST usr/include/drm/ivpu_accel.h
HDRINST usr/include/drm/exynos_drm.h
HDRINST usr/include/drm/drm_sarea.h
HDRINST usr/include/drm/v3d_drm.h
HDRINST usr/include/drm/qxl_drm.h
HDRINST usr/include/drm/drm_fourcc.h
HDRINST usr/include/drm/nouveau_drm.h
HDRINST usr/include/drm/habanalabs_accel.h
HDRINST usr/include/drm/vmwgfx_drm.h
HDRINST usr/include/drm/msm_drm.h
HDRINST usr/include/drm/etnaviv_drm.h
UPD scripts/mod/devicetable-offsets.h
HDRINST usr/include/drm/vc4_drm.h
HDRINST usr/include/drm/lima_drm.h
HDRINST usr/include/drm/drm.h
HDRINST usr/include/drm/panfrost_drm.h
HDRINST usr/include/drm/armada_drm.h
HDRINST usr/include/mtd/inftl-user.h
HDRINST usr/include/mtd/nftl-user.h
HDRINST usr/include/mtd/mtd-user.h
HDRINST usr/include/mtd/ubi-user.h
HDRINST usr/include/mtd/mtd-abi.h
HDRINST usr/include/xen/gntdev.h
HDRINST usr/include/xen/gntalloc.h
HDRINST usr/include/xen/evtchn.h
HDRINST usr/include/xen/privcmd.h
HDRINST usr/include/asm-generic/auxvec.h
HDRINST usr/include/asm-generic/bitsperlong.h
HDRINST usr/include/asm-generic/posix_types.h
HDRINST usr/include/asm-generic/ioctls.h
HDRINST usr/include/asm-generic/mman.h
HDRINST usr/include/asm-generic/shmbuf.h
HDRINST usr/include/asm-generic/bpf_perf_event.h
HDRINST usr/include/asm-generic/types.h
HDRINST usr/include/asm-generic/poll.h
HDRINST usr/include/asm-generic/msgbuf.h
HDRINST usr/include/asm-generic/swab.h
HDRINST usr/include/asm-generic/statfs.h
HDRINST usr/include/asm-generic/unistd.h
HDRINST usr/include/asm-generic/hugetlb_encode.h
HDRINST usr/include/asm-generic/resource.h
HDRINST usr/include/asm-generic/param.h
HDRINST usr/include/asm-generic/termbits-common.h
HDRINST usr/include/asm-generic/sockios.h
HDRINST usr/include/asm-generic/kvm_para.h
HDRINST usr/include/asm-generic/errno.h
HDRINST usr/include/asm-generic/termios.h
HDRINST usr/include/asm-generic/mman-common.h
HDRINST usr/include/asm-generic/ioctl.h
HDRINST usr/include/asm-generic/socket.h
HDRINST usr/include/asm-generic/signal-defs.h
HDRINST usr/include/asm-generic/termbits.h
HDRINST usr/include/asm-generic/int-ll64.h
HDRINST usr/include/asm-generic/signal.h
HDRINST usr/include/asm-generic/siginfo.h
HDRINST usr/include/asm-generic/stat.h
HDRINST usr/include/asm-generic/int-l64.h
HDRINST usr/include/asm-generic/errno-base.h
HDRINST usr/include/asm-generic/fcntl.h
HDRINST usr/include/asm-generic/setup.h
HDRINST usr/include/asm-generic/ipcbuf.h
MKELF scripts/mod/elfconfig.h
HDRINST usr/include/asm-generic/sembuf.h
HDRINST usr/include/asm-generic/ucontext.h
HDRINST usr/include/rdma/mlx5_user_ioctl_cmds.h
HDRINST usr/include/rdma/irdma-abi.h
HDRINST usr/include/rdma/mana-abi.h
HDRINST usr/include/rdma/hfi/hfi1_user.h
HOSTCC scripts/mod/modpost.o
HDRINST usr/include/rdma/hfi/hfi1_ioctl.h
HDRINST usr/include/rdma/rdma_user_rxe.h
HDRINST usr/include/rdma/rdma_user_ioctl.h
HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.h
HOSTCC scripts/mod/file2alias.o
HDRINST usr/include/rdma/bnxt_re-abi.h
HOSTCC scripts/mod/sumversion.o
HDRINST usr/include/rdma/hns-abi.h
HDRINST usr/include/rdma/qedr-abi.h
HDRINST usr/include/rdma/ib_user_ioctl_cmds.h
HDRINST usr/include/rdma/vmw_pvrdma-abi.h
HDRINST usr/include/rdma/ib_user_sa.h
HDRINST usr/include/rdma/ib_user_ioctl_verbs.h
HDRINST usr/include/rdma/rvt-abi.h
HDRINST usr/include/rdma/mlx5-abi.h
HDRINST usr/include/rdma/rdma_netlink.h
HDRINST usr/include/rdma/erdma-abi.h
HDRINST usr/include/rdma/rdma_user_ioctl_cmds.h
HDRINST usr/include/rdma/rdma_user_cm.h
HDRINST usr/include/rdma/ib_user_verbs.h
HDRINST usr/include/rdma/efa-abi.h
HDRINST usr/include/rdma/siw-abi.h
HDRINST usr/include/rdma/mlx4-abi.h
HDRINST usr/include/rdma/mthca-abi.h
HDRINST usr/include/rdma/ib_user_mad.h
HDRINST usr/include/rdma/ocrdma-abi.h
HDRINST usr/include/rdma/cxgb4-abi.h
HDRINST usr/include/misc/xilinx_sdfec.h
HDRINST usr/include/misc/uacce/hisi_qm.h
HDRINST usr/include/misc/uacce/uacce.h
HDRINST usr/include/misc/cxl.h
HDRINST usr/include/misc/ocxl.h
HDRINST usr/include/misc/fastrpc.h
HDRINST usr/include/misc/pvpanic.h
HDRINST usr/include/linux/i8k.h
HDRINST usr/include/linux/acct.h
HDRINST usr/include/linux/atmmpc.h
HDRINST usr/include/linux/fs.h
HDRINST usr/include/linux/cifs/cifs_mount.h
HDRINST usr/include/linux/cifs/cifs_netlink.h
HDRINST usr/include/linux/if_packet.h
HDRINST usr/include/linux/route.h
HDRINST usr/include/linux/patchkey.h
HDRINST usr/include/linux/tc_ematch/tc_em_cmp.h
HDRINST usr/include/linux/tc_ematch/tc_em_ipt.h
HDRINST usr/include/linux/tc_ematch/tc_em_meta.h
HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.h
HDRINST usr/include/linux/tc_ematch/tc_em_text.h
HDRINST usr/include/linux/virtio_pmem.h
HDRINST usr/include/linux/rkisp1-config.h
HDRINST usr/include/linux/vhost.h
HDRINST usr/include/linux/cec-funcs.h
HDRINST usr/include/linux/ppdev.h
HDRINST usr/include/linux/isdn/capicmd.h
HDRINST usr/include/linux/virtio_fs.h
HDRINST usr/include/linux/netfilter_ipv6.h
HDRINST usr/include/linux/lirc.h
HDRINST usr/include/linux/mroute6.h
HDRINST usr/include/linux/nl80211-vnd-intel.h
HDRINST usr/include/linux/ivtvfb.h
HDRINST usr/include/linux/auxvec.h
HDRINST usr/include/linux/dm-log-userspace.h
HDRINST usr/include/linux/dccp.h
HDRINST usr/include/linux/virtio_scmi.h
HDRINST usr/include/linux/atmarp.h
HDRINST usr/include/linux/arcfb.h
HDRINST usr/include/linux/nbd-netlink.h
HDRINST usr/include/linux/sched/types.h
HDRINST usr/include/linux/tcp.h
HDRINST usr/include/linux/neighbour.h
HDRINST usr/include/linux/dlm_device.h
HDRINST usr/include/linux/wmi.h
HDRINST usr/include/linux/btrfs_tree.h
HDRINST usr/include/linux/virtio_crypto.h
HDRINST usr/include/linux/vbox_err.h
HDRINST usr/include/linux/edd.h
HDRINST usr/include/linux/loop.h
HDRINST usr/include/linux/nvme_ioctl.h
HDRINST usr/include/linux/mmtimer.h
HDRINST usr/include/linux/if_pppol2tp.h
HDRINST usr/include/linux/mtio.h
HDRINST usr/include/linux/if_arcnet.h
HDRINST usr/include/linux/romfs_fs.h
HDRINST usr/include/linux/posix_types.h
HDRINST usr/include/linux/rtc.h
HDRINST usr/include/linux/landlock.h
HDRINST usr/include/linux/gpio.h
HDRINST usr/include/linux/selinux_netlink.h
HDRINST usr/include/linux/pps.h
HDRINST usr/include/linux/ndctl.h
HDRINST usr/include/linux/virtio_gpu.h
HDRINST usr/include/linux/android/binderfs.h
HDRINST usr/include/linux/android/binder.h
HDRINST usr/include/linux/virtio_vsock.h
HDRINST usr/include/linux/sound.h
HDRINST usr/include/linux/vtpm_proxy.h
HDRINST usr/include/linux/nfs_fs.h
HDRINST usr/include/linux/elf-fdpic.h
HDRINST usr/include/linux/adfs_fs.h
HDRINST usr/include/linux/target_core_user.h
HDRINST usr/include/linux/netlink_diag.h
HDRINST usr/include/linux/const.h
HDRINST usr/include/linux/firewire-cdev.h
HDRINST usr/include/linux/vdpa.h
HDRINST usr/include/linux/if_infiniband.h
HDRINST usr/include/linux/serial.h
HDRINST usr/include/linux/iio/types.h
HDRINST usr/include/linux/iio/buffer.h
HDRINST usr/include/linux/iio/events.h
HDRINST usr/include/linux/baycom.h
HDRINST usr/include/linux/major.h
HDRINST usr/include/linux/atmppp.h
HDRINST usr/include/linux/ipv6_route.h
HDRINST usr/include/linux/spi/spidev.h
HDRINST usr/include/linux/spi/spi.h
HDRINST usr/include/linux/virtio_ring.h
HDRINST usr/include/linux/hdlc/ioctl.h
HDRINST usr/include/linux/remoteproc_cdev.h
HDRINST usr/include/linux/hyperv.h
HDRINST usr/include/linux/rpl_iptunnel.h
HDRINST usr/include/linux/sync_file.h
HDRINST usr/include/linux/igmp.h
HDRINST usr/include/linux/v4l2-dv-timings.h
HDRINST usr/include/linux/virtio_i2c.h
HDRINST usr/include/linux/xfrm.h
HDRINST usr/include/linux/capability.h
HDRINST usr/include/linux/gtp.h
HDRINST usr/include/linux/xdp_diag.h
HDRINST usr/include/linux/pkt_cls.h
HDRINST usr/include/linux/suspend_ioctls.h
HDRINST usr/include/linux/vt.h
HDRINST usr/include/linux/loadpin.h
HDRINST usr/include/linux/dlm_plock.h
HDRINST usr/include/linux/fb.h
HDRINST usr/include/linux/max2175.h
HDRINST usr/include/linux/sunrpc/debug.h
HDRINST usr/include/linux/gsmmux.h
HDRINST usr/include/linux/watchdog.h
HDRINST usr/include/linux/vhost_types.h
HDRINST usr/include/linux/vduse.h
HDRINST usr/include/linux/ila.h
HDRINST usr/include/linux/tdx-guest.h
HDRINST usr/include/linux/close_range.h
HDRINST usr/include/linux/ivtv.h
HDRINST usr/include/linux/cryptouser.h
HDRINST usr/include/linux/netfilter/xt_string.h
HDRINST usr/include/linux/netfilter/nfnetlink_compat.h
HDRINST usr/include/linux/netfilter/nf_nat.h
HDRINST usr/include/linux/netfilter/xt_recent.h
HDRINST usr/include/linux/netfilter/xt_addrtype.h
HDRINST usr/include/linux/netfilter/nf_conntrack_tcp.h
HDRINST usr/include/linux/netfilter/xt_MARK.h
HDRINST usr/include/linux/netfilter/xt_SYNPROXY.h
HDRINST usr/include/linux/netfilter/xt_multiport.h
HDRINST usr/include/linux/netfilter/nfnetlink.h
HDRINST usr/include/linux/netfilter/xt_cgroup.h
HDRINST usr/include/linux/netfilter/nf_synproxy.h
HDRINST usr/include/linux/netfilter/xt_TCPOPTSTRIP.h
HDRINST usr/include/linux/netfilter/nfnetlink_log.h
HDRINST usr/include/linux/netfilter/xt_TPROXY.h
HDRINST usr/include/linux/netfilter/xt_u32.h
HDRINST usr/include/linux/netfilter/nfnetlink_osf.h
HDRINST usr/include/linux/netfilter/xt_ecn.h
HDRINST usr/include/linux/netfilter/xt_esp.h
HDRINST usr/include/linux/netfilter/nfnetlink_hook.h
HDRINST usr/include/linux/netfilter/xt_mac.h
HDRINST usr/include/linux/netfilter/xt_comment.h
HDRINST usr/include/linux/netfilter/xt_NFQUEUE.h
HDRINST usr/include/linux/netfilter/xt_osf.h
HDRINST usr/include/linux/netfilter/xt_hashlimit.h
HDRINST usr/include/linux/netfilter/nf_conntrack_sctp.h
HDRINST usr/include/linux/netfilter/xt_socket.h
HDRINST usr/include/linux/netfilter/xt_connmark.h
HDRINST usr/include/linux/netfilter/xt_sctp.h
HDRINST usr/include/linux/netfilter/xt_tcpudp.h
HDRINST usr/include/linux/netfilter/xt_DSCP.h
HDRINST usr/include/linux/netfilter/xt_time.h
HDRINST usr/include/linux/netfilter/xt_IDLETIMER.h
HDRINST usr/include/linux/netfilter/xt_policy.h
HDRINST usr/include/linux/netfilter/xt_rpfilter.h
HDRINST usr/include/linux/netfilter/xt_nfacct.h
HDRINST usr/include/linux/netfilter/xt_SECMARK.h
HDRINST usr/include/linux/netfilter/xt_length.h
HDRINST usr/include/linux/netfilter/nfnetlink_cthelper.h
HDRINST usr/include/linux/netfilter/xt_quota.h
HDRINST usr/include/linux/netfilter/xt_CLASSIFY.h
HDRINST usr/include/linux/netfilter/xt_ipcomp.h
HDRINST usr/include/linux/netfilter/xt_iprange.h
HDRINST usr/include/linux/netfilter/xt_bpf.h
HDRINST usr/include/linux/netfilter/xt_LOG.h
HDRINST usr/include/linux/netfilter/xt_rateest.h
HDRINST usr/include/linux/netfilter/xt_CONNSECMARK.h
HDRINST usr/include/linux/netfilter/xt_HMARK.h
HDRINST usr/include/linux/netfilter/xt_CONNMARK.h
HDRINST usr/include/linux/netfilter/xt_pkttype.h
HDRINST usr/include/linux/netfilter/xt_ipvs.h
HDRINST usr/include/linux/netfilter/xt_devgroup.h
HDRINST usr/include/linux/netfilter/xt_AUDIT.h
HDRINST usr/include/linux/netfilter/xt_realm.h
HDRINST usr/include/linux/netfilter/nf_conntrack_common.h
HDRINST usr/include/linux/netfilter/xt_set.h
HDRINST usr/include/linux/netfilter/xt_LED.h
HDRINST usr/include/linux/netfilter/xt_connlabel.h
HDRINST usr/include/linux/netfilter/xt_owner.h
HDRINST usr/include/linux/netfilter/xt_dccp.h
HDRINST usr/include/linux/netfilter/xt_limit.h
HDRINST usr/include/linux/netfilter/xt_conntrack.h
HDRINST usr/include/linux/netfilter/xt_TEE.h
HDRINST usr/include/linux/netfilter/xt_RATEEST.h
HDRINST usr/include/linux/netfilter/xt_connlimit.h
HDRINST usr/include/linux/netfilter/ipset/ip_set.h
HDRINST usr/include/linux/netfilter/ipset/ip_set_list.h
HDRINST usr/include/linux/netfilter/ipset/ip_set_hash.h
HDRINST usr/include/linux/netfilter/ipset/ip_set_bitmap.h
HDRINST usr/include/linux/netfilter/x_tables.h
HDRINST usr/include/linux/netfilter/xt_dscp.h
HDRINST usr/include/linux/netfilter/nf_conntrack_ftp.h
HDRINST usr/include/linux/netfilter/xt_cluster.h
HDRINST usr/include/linux/netfilter/nf_conntrack_tuple_common.h
HDRINST usr/include/linux/netfilter/nf_log.h
HDRINST usr/include/linux/netfilter/xt_tcpmss.h
HDRINST usr/include/linux/netfilter/xt_NFLOG.h
HDRINST usr/include/linux/netfilter/xt_l2tp.h
HDRINST usr/include/linux/netfilter/xt_helper.h
HDRINST usr/include/linux/netfilter/xt_statistic.h
HDRINST usr/include/linux/netfilter/nfnetlink_queue.h
HDRINST usr/include/linux/netfilter/nfnetlink_cttimeout.h
HDRINST usr/include/linux/netfilter/xt_CT.h
HDRINST usr/include/linux/netfilter/xt_CHECKSUM.h
HDRINST usr/include/linux/netfilter/xt_connbytes.h
HDRINST usr/include/linux/netfilter/xt_state.h
HDRINST usr/include/linux/netfilter/nf_tables.h
HDRINST usr/include/linux/netfilter/xt_mark.h
HDRINST usr/include/linux/netfilter/xt_cpu.h
HDRINST usr/include/linux/netfilter/nf_tables_compat.h
HDRINST usr/include/linux/netfilter/xt_physdev.h
HDRINST usr/include/linux/netfilter/nfnetlink_conntrack.h
HDRINST usr/include/linux/netfilter/nfnetlink_acct.h
HDRINST usr/include/linux/netfilter/xt_TCPMSS.h
HDRINST usr/include/linux/tty_flags.h
HDRINST usr/include/linux/if_phonet.h
HDRINST usr/include/linux/elf-em.h
HDRINST usr/include/linux/vm_sockets.h
HDRINST usr/include/linux/dlmconstants.h
HDRINST usr/include/linux/bsg.h
HDRINST usr/include/linux/matroxfb.h
HDRINST usr/include/linux/sysctl.h
HDRINST usr/include/linux/unix_diag.h
HDRINST usr/include/linux/pcitest.h
HDRINST usr/include/linux/mman.h
HDRINST usr/include/linux/if_plip.h
HDRINST usr/include/linux/virtio_balloon.h
HDRINST usr/include/linux/pidfd.h
HDRINST usr/include/linux/f2fs.h
HDRINST usr/include/linux/x25.h
HDRINST usr/include/linux/if_cablemodem.h
HDRINST usr/include/linux/utsname.h
HDRINST usr/include/linux/counter.h
HDRINST usr/include/linux/atm_tcp.h
HDRINST usr/include/linux/atalk.h
HDRINST usr/include/linux/virtio_rng.h
HDRINST usr/include/linux/vboxguest.h
HDRINST usr/include/linux/bpf_perf_event.h
HDRINST usr/include/linux/ipmi_ssif_bmc.h
HDRINST usr/include/linux/nfs_mount.h
HDRINST usr/include/linux/sonet.h
HDRINST usr/include/linux/netfilter.h
HDRINST usr/include/linux/keyctl.h
HDRINST usr/include/linux/nl80211.h
HDRINST usr/include/linux/misc/bcm_vk.h
HDRINST usr/include/linux/audit.h
HDRINST usr/include/linux/tipc_config.h
HDRINST usr/include/linux/tipc_sockets_diag.h
HDRINST usr/include/linux/futex.h
HDRINST usr/include/linux/sev-guest.h
HDRINST usr/include/linux/ublk_cmd.h
HDRINST usr/include/linux/types.h
HDRINST usr/include/linux/virtio_input.h
HDRINST usr/include/linux/if_slip.h
HDRINST usr/include/linux/personality.h
HDRINST usr/include/linux/openat2.h
HDRINST usr/include/linux/poll.h
HDRINST usr/include/linux/posix_acl.h
HDRINST usr/include/linux/smc_diag.h
HDRINST usr/include/linux/snmp.h
HDRINST usr/include/linux/errqueue.h
HDRINST usr/include/linux/if_tunnel.h
HDRINST usr/include/linux/fanotify.h
HDRINST usr/include/linux/kernel.h
HDRINST usr/include/linux/rtnetlink.h
HDRINST usr/include/linux/rpl.h
HDRINST usr/include/linux/memfd.h
HDRINST usr/include/linux/serial_core.h
HDRINST usr/include/linux/dns_resolver.h
HDRINST usr/include/linux/pr.h
HDRINST usr/include/linux/atm_eni.h
HDRINST usr/include/linux/lp.h
HDRINST usr/include/linux/virtio_mem.h
HDRINST usr/include/linux/ultrasound.h
HDRINST usr/include/linux/sctp.h
HDRINST usr/include/linux/uio.h
HDRINST usr/include/linux/tcp_metrics.h
HDRINST usr/include/linux/wwan.h
HDRINST usr/include/linux/atmbr2684.h
HDRINST usr/include/linux/in_route.h
HDRINST usr/include/linux/qemu_fw_cfg.h
HDRINST usr/include/linux/if_macsec.h
HDRINST usr/include/linux/usb/charger.h
HDRINST usr/include/linux/usb/g_uvc.h
HDRINST usr/include/linux/usb/gadgetfs.h
HDRINST usr/include/linux/usb/raw_gadget.h
HDRINST usr/include/linux/usb/cdc-wdm.h
HDRINST usr/include/linux/usb/g_printer.h
HDRINST usr/include/linux/usb/midi.h
HDRINST usr/include/linux/usb/tmc.h
HDRINST usr/include/linux/usb/video.h
HDRINST usr/include/linux/usb/functionfs.h
HDRINST usr/include/linux/usb/audio.h
HDRINST usr/include/linux/usb/ch11.h
HDRINST usr/include/linux/usb/ch9.h
HDRINST usr/include/linux/usb/cdc.h
HDRINST usr/include/linux/jffs2.h
HDRINST usr/include/linux/ax25.h
HDRINST usr/include/linux/auto_fs.h
HDRINST usr/include/linux/tiocl.h
HDRINST usr/include/linux/scc.h
HDRINST usr/include/linux/psci.h
HDRINST usr/include/linux/swab.h
HDRINST usr/include/linux/cec.h
HDRINST usr/include/linux/kfd_ioctl.h
HDRINST usr/include/linux/smc.h
HDRINST usr/include/linux/qrtr.h
HDRINST usr/include/linux/screen_info.h
HDRINST usr/include/linux/nfsacl.h
HDRINST usr/include/linux/seg6_hmac.h
HDRINST usr/include/linux/gameport.h
HDRINST usr/include/linux/wireless.h
HDRINST usr/include/linux/fdreg.h
HDRINST usr/include/linux/cciss_defs.h
HDRINST usr/include/linux/serial_reg.h
HDRINST usr/include/linux/perf_event.h
HDRINST usr/include/linux/in6.h
HDRINST usr/include/linux/hid.h
HDRINST usr/include/linux/netlink.h
HDRINST usr/include/linux/fuse.h
HDRINST usr/include/linux/magic.h
HDRINST usr/include/linux/ioam6_iptunnel.h
HDRINST usr/include/linux/stm.h
HDRINST usr/include/linux/vsockmon.h
HDRINST usr/include/linux/seg6.h
HDRINST usr/include/linux/idxd.h
HDRINST usr/include/linux/nitro_enclaves.h
HDRINST usr/include/linux/ptrace.h
HDRINST usr/include/linux/ioam6_genl.h
HDRINST usr/include/linux/qnx4_fs.h
HDRINST usr/include/linux/fsl_mc.h
HDRINST usr/include/linux/net_tstamp.h
HDRINST usr/include/linux/msg.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_TTL.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_ttl.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_ah.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_ECN.h
HDRINST usr/include/linux/netfilter_ipv4/ip_tables.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_ecn.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_REJECT.h
HDRINST usr/include/linux/netfilter_ipv4/ipt_LOG.h
HDRINST usr/include/linux/sem.h
HDRINST usr/include/linux/net_namespace.h
HDRINST usr/include/linux/radeonfb.h
HDRINST usr/include/linux/tee.h
HDRINST usr/include/linux/udp.h
HDRINST usr/include/linux/virtio_bt.h
HDRINST usr/include/linux/v4l2-subdev.h
HDRINST usr/include/linux/posix_acl_xattr.h
HDRINST usr/include/linux/v4l2-mediabus.h
HDRINST usr/include/linux/atmapi.h
HDRINST usr/include/linux/raid/md_p.h
HDRINST usr/include/linux/raid/md_u.h
HDRINST usr/include/linux/zorro_ids.h
HDRINST usr/include/linux/nbd.h
HDRINST usr/include/linux/isst_if.h
HDRINST usr/include/linux/rxrpc.h
HDRINST usr/include/linux/unistd.h
HDRINST usr/include/linux/if_arp.h
HDRINST usr/include/linux/atm_zatm.h
HDRINST usr/include/linux/io_uring.h
HDRINST usr/include/linux/if_fddi.h
HDRINST usr/include/linux/bpqether.h
HDRINST usr/include/linux/sysinfo.h
HDRINST usr/include/linux/auto_dev-ioctl.h
HDRINST usr/include/linux/nfs4_mount.h
HDRINST usr/include/linux/keyboard.h
HDRINST usr/include/linux/virtio_mmio.h
HDRINST usr/include/linux/input.h
HDRINST usr/include/linux/qnxtypes.h
HDRINST usr/include/linux/mdio.h
HDRINST usr/include/linux/lwtunnel.h
HDRINST usr/include/linux/gfs2_ondisk.h
HDRINST usr/include/linux/nfs4.h
HDRINST usr/include/linux/ptp_clock.h
HDRINST usr/include/linux/nubus.h
HDRINST usr/include/linux/if_bonding.h
HDRINST usr/include/linux/kcov.h
HDRINST usr/include/linux/fadvise.h
HDRINST usr/include/linux/taskstats.h
HDRINST usr/include/linux/veth.h
HDRINST usr/include/linux/atm.h
HDRINST usr/include/linux/ipmi.h
HDRINST usr/include/linux/kdev_t.h
HDRINST usr/include/linux/mount.h
HDRINST usr/include/linux/shm.h
HDRINST usr/include/linux/resource.h
HDRINST usr/include/linux/prctl.h
HDRINST usr/include/linux/watch_queue.h
HDRINST usr/include/linux/sched.h
HDRINST usr/include/linux/phonet.h
HDRINST usr/include/linux/random.h
HDRINST usr/include/linux/tty.h
HDRINST usr/include/linux/apm_bios.h
HDRINST usr/include/linux/fd.h
HDRINST usr/include/linux/um_timetravel.h
HDRINST usr/include/linux/tls.h
HDRINST usr/include/linux/rpmsg_types.h
HDRINST usr/include/linux/pfrut.h
HDRINST usr/include/linux/mei.h
HDRINST usr/include/linux/fsi.h
HDRINST usr/include/linux/rds.h
HDRINST usr/include/linux/if_x25.h
HDRINST usr/include/linux/param.h
HDRINST usr/include/linux/netdevice.h
HDRINST usr/include/linux/binfmts.h
HDRINST usr/include/linux/if_pppox.h
HDRINST usr/include/linux/sockios.h
HDRINST usr/include/linux/kcm.h
HDRINST usr/include/linux/virtio_9p.h
HDRINST usr/include/linux/genwqe/genwqe_card.h
HDRINST usr/include/linux/if_tun.h
HDRINST usr/include/linux/if_ether.h
HDRINST usr/include/linux/kernel-page-flags.h
HDRINST usr/include/linux/kvm_para.h
HDRINST usr/include/linux/cdrom.h
HDRINST usr/include/linux/un.h
HDRINST usr/include/linux/module.h
HDRINST usr/include/linux/mqueue.h
HDRINST usr/include/linux/a.out.h
HDRINST usr/include/linux/input-event-codes.h
HDRINST usr/include/linux/coda.h
HDRINST usr/include/linux/rio_mport_cdev.h
HDRINST usr/include/linux/ipsec.h
HDRINST usr/include/linux/blkpg.h
HDRINST usr/include/linux/blkzoned.h
HDRINST usr/include/linux/netfilter_bridge/ebt_arpreply.h
HDRINST usr/include/linux/netfilter_bridge/ebt_redirect.h
HDRINST usr/include/linux/netfilter_bridge/ebt_nflog.h
HDRINST usr/include/linux/netfilter_bridge/ebt_802_3.h
HDRINST usr/include/linux/netfilter_bridge/ebt_nat.h
HDRINST usr/include/linux/netfilter_bridge/ebt_mark_m.h
HDRINST usr/include/linux/netfilter_bridge/ebtables.h
HDRINST usr/include/linux/netfilter_bridge/ebt_vlan.h
HDRINST usr/include/linux/netfilter_bridge/ebt_limit.h
HDRINST usr/include/linux/netfilter_bridge/ebt_log.h
HDRINST usr/include/linux/netfilter_bridge/ebt_stp.h
HDRINST usr/include/linux/netfilter_bridge/ebt_pkttype.h
HDRINST usr/include/linux/netfilter_bridge/ebt_ip.h
HDRINST usr/include/linux/netfilter_bridge/ebt_ip6.h
HDRINST usr/include/linux/netfilter_bridge/ebt_arp.h
HDRINST usr/include/linux/netfilter_bridge/ebt_mark_t.h
HDRINST usr/include/linux/netfilter_bridge/ebt_among.h
HDRINST usr/include/linux/reiserfs_fs.h
HDRINST usr/include/linux/cciss_ioctl.h
HDRINST usr/include/linux/fsmap.h
HDRINST usr/include/linux/smiapp.h
HDRINST usr/include/linux/switchtec_ioctl.h
HDRINST usr/include/linux/atmdev.h
HDRINST usr/include/linux/hpet.h
HDRINST usr/include/linux/virtio_config.h
HDRINST usr/include/linux/string.h
HDRINST usr/include/linux/kfd_sysfs.h
HDRINST usr/include/linux/inet_diag.h
LD /kernel/build64/tools/objtool/libsubcmd/libsubcmd-in.o
HDRINST usr/include/linux/netdev.h
HDRINST usr/include/linux/xattr.h
HDRINST usr/include/linux/iommufd.h
HDRINST usr/include/linux/errno.h
HDRINST usr/include/linux/icmp.h
HDRINST usr/include/linux/i2o-dev.h
HDRINST usr/include/linux/pg.h
HDRINST usr/include/linux/if_bridge.h
HDRINST usr/include/linux/thermal.h
HDRINST usr/include/linux/uinput.h
HDRINST usr/include/linux/dqblk_xfs.h
HDRINST usr/include/linux/v4l2-common.h
HDRINST usr/include/linux/nvram.h
HDRINST usr/include/linux/if_vlan.h
HDRINST usr/include/linux/uhid.h
HDRINST usr/include/linux/omap3isp.h
HDRINST usr/include/linux/rose.h
HDRINST usr/include/linux/phantom.h
HDRINST usr/include/linux/ipmi_msgdefs.h
HDRINST usr/include/linux/bcm933xx_hcs.h
HDRINST usr/include/linux/bpf.h
HDRINST usr/include/linux/mempolicy.h
HDRINST usr/include/linux/efs_fs_sb.h
HDRINST usr/include/linux/nexthop.h
HDRINST usr/include/linux/net_dropmon.h
HDRINST usr/include/linux/surface_aggregator/cdev.h
HDRINST usr/include/linux/surface_aggregator/dtx.h
HDRINST usr/include/linux/net.h
HDRINST usr/include/linux/mii.h
HDRINST usr/include/linux/cm4000_cs.h
HDRINST usr/include/linux/virtio_pcidev.h
AR /kernel/build64/tools/objtool/libsubcmd/libsubcmd.a
HDRINST usr/include/linux/termios.h
HDRINST usr/include/linux/cgroupstats.h
HDRINST usr/include/linux/mpls.h
HDRINST usr/include/linux/iommu.h
HDRINST usr/include/linux/toshiba.h
HDRINST usr/include/linux/virtio_scsi.h
HDRINST usr/include/linux/zorro.h
HDRINST usr/include/linux/chio.h
HDRINST usr/include/linux/pkt_sched.h
HDRINST usr/include/linux/cramfs_fs.h
HDRINST usr/include/linux/nfs3.h
HDRINST usr/include/linux/vfio_ccw.h
HDRINST usr/include/linux/atm_nicstar.h
HDRINST usr/include/linux/ncsi.h
HDRINST usr/include/linux/virtio_net.h
HDRINST usr/include/linux/ioctl.h
HDRINST usr/include/linux/stddef.h
HDRINST usr/include/linux/limits.h
HDRINST usr/include/linux/ipmi_bmc.h
HDRINST usr/include/linux/netfilter_arp.h
HDRINST usr/include/linux/if_addr.h
HDRINST usr/include/linux/rpmsg.h
HDRINST usr/include/linux/media-bus-format.h
HDRINST usr/include/linux/kernelcapi.h
HDRINST usr/include/linux/ppp_defs.h
HDRINST usr/include/linux/ethtool.h
HDRINST usr/include/linux/aspeed-video.h
HDRINST usr/include/linux/hdlc.h
HDRINST usr/include/linux/fscrypt.h
HDRINST usr/include/linux/batadv_packet.h
HDRINST usr/include/linux/uuid.h
HDRINST usr/include/linux/capi.h
HDRINST usr/include/linux/mptcp.h
HDRINST usr/include/linux/hidraw.h
HDRINST usr/include/linux/virtio_console.h
HDRINST usr/include/linux/irqnr.h
HDRINST usr/include/linux/coresight-stm.h
HDRINST usr/include/linux/cxl_mem.h
HDRINST usr/include/linux/iso_fs.h
HDRINST usr/include/linux/virtio_blk.h
HDRINST usr/include/linux/udf_fs_i.h
HDRINST usr/include/linux/dma-buf.h
HDRINST usr/include/linux/coff.h
HDRINST usr/include/linux/ife.h
HDRINST usr/include/linux/agpgart.h
HDRINST usr/include/linux/socket.h
HDRINST usr/include/linux/nilfs2_ondisk.h
HDRINST usr/include/linux/connector.h
HDRINST usr/include/linux/auto_fs4.h
HDRINST usr/include/linux/bt-bmc.h
HDRINST usr/include/linux/map_to_7segment.h
HDRINST usr/include/linux/tc_act/tc_skbedit.h
HDRINST usr/include/linux/tc_act/tc_ctinfo.h
HDRINST usr/include/linux/tc_act/tc_defact.h
HDRINST usr/include/linux/tc_act/tc_gact.h
HDRINST usr/include/linux/tc_act/tc_vlan.h
HDRINST usr/include/linux/tc_act/tc_skbmod.h
HDRINST usr/include/linux/tc_act/tc_sample.h
HDRINST usr/include/linux/tc_act/tc_tunnel_key.h
HDRINST usr/include/linux/tc_act/tc_gate.h
HDRINST usr/include/linux/tc_act/tc_mirred.h
HDRINST usr/include/linux/tc_act/tc_nat.h
HDRINST usr/include/linux/tc_act/tc_csum.h
HDRINST usr/include/linux/tc_act/tc_connmark.h
HDRINST usr/include/linux/tc_act/tc_ife.h
HDRINST usr/include/linux/tc_act/tc_mpls.h
HDRINST usr/include/linux/tc_act/tc_ct.h
HDRINST usr/include/linux/tc_act/tc_pedit.h
HDRINST usr/include/linux/tc_act/tc_bpf.h
HDRINST usr/include/linux/tc_act/tc_ipt.h
CC /kernel/build64/tools/objtool/weak.o
HDRINST usr/include/linux/netrom.h
CC /kernel/build64/tools/objtool/check.o
HDRINST usr/include/linux/joystick.h
HDRINST usr/include/linux/falloc.h
CC /kernel/build64/tools/objtool/special.o
HDRINST usr/include/linux/cycx_cfm.h
HDRINST usr/include/linux/omapfb.h
MKDIR /kernel/build64/tools/objtool/arch/x86/
HDRINST usr/include/linux/msdos_fs.h
CC /kernel/build64/tools/objtool/builtin-check.o
HDRINST usr/include/linux/virtio_types.h
HDRINST usr/include/linux/mroute.h
CC /kernel/build64/tools/objtool/elf.o
HDRINST usr/include/linux/psample.h
HDRINST usr/include/linux/ipv6.h
MKDIR /kernel/build64/tools/objtool/arch/x86/lib/
CC /kernel/build64/tools/objtool/objtool.o
HDRINST usr/include/linux/dw100.h
CC /kernel/build64/tools/objtool/arch/x86/special.o
CC /kernel/build64/tools/objtool/orc_gen.o
HDRINST usr/include/linux/psp-sev.h
HDRINST usr/include/linux/vfio.h
HDRINST usr/include/linux/if_ppp.h
CC /kernel/build64/tools/objtool/orc_dump.o
GEN /kernel/build64/tools/objtool/arch/x86/lib/inat-tables.c
HDRINST usr/include/linux/byteorder/big_endian.h
HDRINST usr/include/linux/byteorder/little_endian.h
CC /kernel/build64/tools/objtool/libstring.o
HDRINST usr/include/linux/comedi.h
HDRINST usr/include/linux/scif_ioctl.h
CC /kernel/build64/tools/objtool/libctype.o
CC /kernel/build64/tools/objtool/str_error_r.o
CC /kernel/build64/tools/objtool/librbtree.o
HDRINST usr/include/linux/timerfd.h
HDRINST usr/include/linux/time_types.h
HDRINST usr/include/linux/firewire-constants.h
HDRINST usr/include/linux/virtio_snd.h
HDRINST usr/include/linux/ppp-ioctl.h
HDRINST usr/include/linux/fib_rules.h
HDRINST usr/include/linux/gen_stats.h
HDRINST usr/include/linux/virtio_iommu.h
HDRINST usr/include/linux/genetlink.h
HDRINST usr/include/linux/uvcvideo.h
HDRINST usr/include/linux/pfkeyv2.h
HDRINST usr/include/linux/soundcard.h
HDRINST usr/include/linux/times.h
HDRINST usr/include/linux/nfc.h
HDRINST usr/include/linux/affs_hardblocks.h
HDRINST usr/include/linux/nilfs2_api.h
HDRINST usr/include/linux/rseq.h
HDRINST usr/include/linux/caif/caif_socket.h
HDRINST usr/include/linux/caif/if_caif.h
HDRINST usr/include/linux/i2c-dev.h
HDRINST usr/include/linux/cuda.h
HDRINST usr/include/linux/cn_proc.h
HDRINST usr/include/linux/parport.h
HDRINST usr/include/linux/v4l2-controls.h
HDRINST usr/include/linux/hsi/cs-protocol.h
HDRINST usr/include/linux/hsi/hsi_char.h
HDRINST usr/include/linux/seg6_genl.h
HDRINST usr/include/linux/am437x-vpfe.h
HDRINST usr/include/linux/amt.h
HDRINST usr/include/linux/netconf.h
HDRINST usr/include/linux/erspan.h
HDRINST usr/include/linux/nsfs.h
HDRINST usr/include/linux/xilinx-v4l2-controls.h
HDRINST usr/include/linux/aspeed-p2a-ctrl.h
HDRINST usr/include/linux/vfio_zdev.h
HDRINST usr/include/linux/serio.h
HDRINST usr/include/linux/acrn.h
HDRINST usr/include/linux/nfs2.h
HDRINST usr/include/linux/virtio_pci.h
HDRINST usr/include/linux/ipc.h
HDRINST usr/include/linux/ethtool_netlink.h
HDRINST usr/include/linux/kd.h
HDRINST usr/include/linux/elf.h
HDRINST usr/include/linux/videodev2.h
HDRINST usr/include/linux/if_alg.h
HDRINST usr/include/linux/sonypi.h
HDRINST usr/include/linux/fsverity.h
HDRINST usr/include/linux/if.h
HDRINST usr/include/linux/btrfs.h
HDRINST usr/include/linux/vm_sockets_diag.h
HDRINST usr/include/linux/netfilter_bridge.h
HDRINST usr/include/linux/packet_diag.h
HDRINST usr/include/linux/netfilter_ipv4.h
HDRINST usr/include/linux/kvm.h
HDRINST usr/include/linux/pci.h
HDRINST usr/include/linux/if_addrlabel.h
HDRINST usr/include/linux/hdlcdrv.h
HDRINST usr/include/linux/cfm_bridge.h
HDRINST usr/include/linux/fiemap.h
HDRINST usr/include/linux/dm-ioctl.h
HDRINST usr/include/linux/aspeed-lpc-ctrl.h
HDRINST usr/include/linux/atmioc.h
HDRINST usr/include/linux/dlm.h
HDRINST usr/include/linux/pci_regs.h
HDRINST usr/include/linux/cachefiles.h
HDRINST usr/include/linux/membarrier.h
HDRINST usr/include/linux/nfs_idmap.h
HDRINST usr/include/linux/ip.h
HDRINST usr/include/linux/atm_he.h
HDRINST usr/include/linux/nfsd/export.h
HDRINST usr/include/linux/nfsd/stats.h
HDRINST usr/include/linux/nfsd/debug.h
CC /kernel/build64/tools/objtool/arch/x86/decode.o
HDRINST usr/include/linux/nfsd/cld.h
HDRINST usr/include/linux/ip_vs.h
HDRINST usr/include/linux/vmcore.h
HDRINST usr/include/linux/vbox_vmmdev_types.h
HDRINST usr/include/linux/dvb/osd.h
HDRINST usr/include/linux/dvb/dmx.h
HDRINST usr/include/linux/dvb/net.h
HDRINST usr/include/linux/dvb/frontend.h
HDRINST usr/include/linux/dvb/ca.h
HDRINST usr/include/linux/dvb/version.h
HDRINST usr/include/linux/dvb/video.h
HDRINST usr/include/linux/dvb/audio.h
HDRINST usr/include/linux/nfs.h
HDRINST usr/include/linux/if_link.h
HDRINST usr/include/linux/wait.h
HDRINST usr/include/linux/icmpv6.h
HDRINST usr/include/linux/media.h
HDRINST usr/include/linux/seg6_local.h
HDRINST usr/include/linux/openvswitch.h
HDRINST usr/include/linux/atmsap.h
HDRINST usr/include/linux/bpfilter.h
HDRINST usr/include/linux/fpga-dfl.h
HDRINST usr/include/linux/userio.h
HDRINST usr/include/linux/signal.h
HDRINST usr/include/linux/map_to_14segment.h
HDRINST usr/include/linux/hdreg.h
HDRINST usr/include/linux/utime.h
HDRINST usr/include/linux/usbdevice_fs.h
HDRINST usr/include/linux/timex.h
HDRINST usr/include/linux/if_fc.h
HDRINST usr/include/linux/reiserfs_xattr.h
HDRINST usr/include/linux/hw_breakpoint.h
HDRINST usr/include/linux/quota.h
HDRINST usr/include/linux/ioprio.h
HDRINST usr/include/linux/eventpoll.h
HDRINST usr/include/linux/atmclip.h
HDRINST usr/include/linux/can.h
HDRINST usr/include/linux/if_team.h
HDRINST usr/include/linux/usbip.h
HDRINST usr/include/linux/stat.h
HDRINST usr/include/linux/fou.h
HDRINST usr/include/linux/hash_info.h
HDRINST usr/include/linux/ppp-comp.h
HDRINST usr/include/linux/ip6_tunnel.h
HDRINST usr/include/linux/tipc_netlink.h
HDRINST usr/include/linux/in.h
HDRINST usr/include/linux/wireguard.h
HDRINST usr/include/linux/btf.h
HDRINST usr/include/linux/batman_adv.h
HDRINST usr/include/linux/fcntl.h
HDRINST usr/include/linux/if_ltalk.h
HDRINST usr/include/linux/i2c.h
HDRINST usr/include/linux/atm_idt77105.h
HDRINST usr/include/linux/kexec.h
HDRINST usr/include/linux/arm_sdei.h
HDRINST usr/include/linux/netfilter_ipv6/ip6_tables.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_ah.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_NPT.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_rt.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_REJECT.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_opts.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_srh.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_LOG.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_mh.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_HL.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_hl.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_frag.h
HDRINST usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h
HDRINST usr/include/linux/minix_fs.h
HDRINST usr/include/linux/aio_abi.h
HDRINST usr/include/linux/pktcdvd.h
HDRINST usr/include/linux/libc-compat.h
HDRINST usr/include/linux/atmlec.h
HDRINST usr/include/linux/signalfd.h
HDRINST usr/include/linux/bpf_common.h
HDRINST usr/include/linux/seg6_iptunnel.h
HDRINST usr/include/linux/synclink.h
HDRINST usr/include/linux/mpls_iptunnel.h
HDRINST usr/include/linux/mctp.h
HDRINST usr/include/linux/if_xdp.h
HDRINST usr/include/linux/llc.h
HDRINST usr/include/linux/atmsvc.h
HDRINST usr/include/linux/sed-opal.h
HDRINST usr/include/linux/sock_diag.h
HDRINST usr/include/linux/time.h
HDRINST usr/include/linux/securebits.h
HDRINST usr/include/linux/fsl_hypervisor.h
HDRINST usr/include/linux/if_hippi.h
HDRINST usr/include/linux/dlm_netlink.h
HDRINST usr/include/linux/seccomp.h
HDRINST usr/include/linux/oom.h
HDRINST usr/include/linux/filter.h
HDRINST usr/include/linux/inotify.h
HDRINST usr/include/linux/rfkill.h
HDRINST usr/include/linux/reboot.h
HDRINST usr/include/linux/can/vxcan.h
HDRINST usr/include/linux/can/j1939.h
HDRINST usr/include/linux/can/netlink.h
HDRINST usr/include/linux/can/bcm.h
HDRINST usr/include/linux/can/raw.h
HDRINST usr/include/linux/can/gw.h
HDRINST usr/include/linux/can/error.h
HDRINST usr/include/linux/can/isotp.h
HDRINST usr/include/linux/if_eql.h
HDRINST usr/include/linux/hiddev.h
HDRINST usr/include/linux/blktrace_api.h
HDRINST usr/include/linux/ccs.h
HDRINST usr/include/linux/ioam6.h
HDRINST usr/include/linux/hsr_netlink.h
HDRINST usr/include/linux/mmc/ioctl.h
HDRINST usr/include/linux/bfs_fs.h
HDRINST usr/include/linux/rio_cm_cdev.h
HDRINST usr/include/linux/uleds.h
HDRINST usr/include/linux/mrp_bridge.h
HDRINST usr/include/linux/adb.h
HDRINST usr/include/linux/pmu.h
HDRINST usr/include/linux/udmabuf.h
HDRINST usr/include/linux/kcmp.h
HDRINST usr/include/linux/dma-heap.h
HDRINST usr/include/linux/userfaultfd.h
HDRINST usr/include/linux/netfilter_arp/arpt_mangle.h
HDRINST usr/include/linux/netfilter_arp/arp_tables.h
HDRINST usr/include/linux/tipc.h
HDRINST usr/include/linux/virtio_ids.h
HDRINST usr/include/linux/l2tp.h
HDRINST usr/include/linux/devlink.h
HDRINST usr/include/linux/virtio_gpio.h
HDRINST usr/include/linux/dcbnl.h
HDRINST usr/include/linux/cyclades.h
HDRINST usr/include/sound/intel/avs/tokens.h
HDRINST usr/include/sound/sof/fw.h
HDRINST usr/include/sound/sof/abi.h
HDRINST usr/include/sound/sof/tokens.h
HDRINST usr/include/sound/sof/header.h
HDRINST usr/include/sound/usb_stream.h
HDRINST usr/include/sound/sfnt_info.h
HDRINST usr/include/sound/asequencer.h
HDRINST usr/include/sound/tlv.h
HDRINST usr/include/sound/asound.h
HDRINST usr/include/sound/asoc.h
HDRINST usr/include/sound/sb16_csp.h
HDRINST usr/include/sound/compress_offload.h
HDRINST usr/include/sound/hdsp.h
HDRINST usr/include/sound/emu10k1.h
HDRINST usr/include/sound/snd_ar_tokens.h
HDRINST usr/include/sound/snd_sst_tokens.h
HDRINST usr/include/sound/asound_fm.h
HDRINST usr/include/sound/hdspm.h
HDRINST usr/include/sound/compress_params.h
HDRINST usr/include/sound/firewire.h
HDRINST usr/include/sound/skl-tplg-interface.h
HDRINST usr/include/scsi/scsi_bsg_ufs.h
HDRINST usr/include/scsi/scsi_netlink_fc.h
HDRINST usr/include/scsi/scsi_bsg_mpi3mr.h
HDRINST usr/include/scsi/fc/fc_ns.h
HDRINST usr/include/scsi/fc/fc_fs.h
HDRINST usr/include/scsi/fc/fc_els.h
HDRINST usr/include/scsi/fc/fc_gs.h
HDRINST usr/include/scsi/scsi_bsg_fc.h
HDRINST usr/include/scsi/cxlflash_ioctl.h
HDRINST usr/include/scsi/scsi_netlink.h
HDRINST usr/include/linux/version.h
HDRINST usr/include/asm/processor-flags.h
HDRINST usr/include/asm/auxvec.h
HDRINST usr/include/asm/svm.h
HDRINST usr/include/asm/bitsperlong.h
HDRINST usr/include/asm/kvm_perf.h
HDRINST usr/include/asm/mce.h
HDRINST usr/include/asm/posix_types.h
HDRINST usr/include/asm/msr.h
HDRINST usr/include/asm/sigcontext32.h
HDRINST usr/include/asm/mman.h
HDRINST usr/include/asm/shmbuf.h
HDRINST usr/include/asm/e820.h
HDRINST usr/include/asm/posix_types_64.h
HDRINST usr/include/asm/vsyscall.h
HDRINST usr/include/asm/msgbuf.h
HDRINST usr/include/asm/swab.h
HDRINST usr/include/asm/statfs.h
HDRINST usr/include/asm/posix_types_x32.h
HDRINST usr/include/asm/ptrace.h
HDRINST usr/include/asm/unistd.h
HDRINST usr/include/asm/ist.h
HDRINST usr/include/asm/prctl.h
HDRINST usr/include/asm/boot.h
HDRINST usr/include/asm/sigcontext.h
HDRINST usr/include/asm/posix_types_32.h
HDRINST usr/include/asm/kvm_para.h
HDRINST usr/include/asm/a.out.h
HDRINST usr/include/asm/mtrr.h
HDRINST usr/include/asm/amd_hsmp.h
HDRINST usr/include/asm/hwcap2.h
HDRINST usr/include/asm/vm86.h
HDRINST usr/include/asm/ptrace-abi.h
HDRINST usr/include/asm/vmx.h
HDRINST usr/include/asm/ldt.h
HDRINST usr/include/asm/perf_regs.h
HDRINST usr/include/asm/kvm.h
HDRINST usr/include/asm/debugreg.h
HDRINST usr/include/asm/signal.h
HDRINST usr/include/asm/bootparam.h
HDRINST usr/include/asm/siginfo.h
HDRINST usr/include/asm/hw_breakpoint.h
HDRINST usr/include/asm/stat.h
HDRINST usr/include/asm/sembuf.h
HDRINST usr/include/asm/setup.h
HDRINST usr/include/asm/sgx.h
HDRINST usr/include/asm/ucontext.h
HDRINST usr/include/asm/byteorder.h
HDRINST usr/include/asm/unistd_64.h
HDRINST usr/include/asm/ioctls.h
HDRINST usr/include/asm/bpf_perf_event.h
HDRINST usr/include/asm/types.h
HDRINST usr/include/asm/poll.h
HDRINST usr/include/asm/resource.h
HDRINST usr/include/asm/param.h
HDRINST usr/include/asm/sockios.h
HDRINST usr/include/asm/errno.h
HDRINST usr/include/asm/unistd_x32.h
HDRINST usr/include/asm/termios.h
HDRINST usr/include/asm/ioctl.h
HDRINST usr/include/asm/socket.h
HDRINST usr/include/asm/unistd_32.h
HDRINST usr/include/asm/termbits.h
HDRINST usr/include/asm/fcntl.h
HDRINST usr/include/asm/ipcbuf.h
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 ../include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 ../include/linux/atomic/atomic-instrumented.h
CHKSHA1 ../include/linux/atomic/atomic-long.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
LD /kernel/build64/tools/objtool/arch/x86/objtool-in.o
UPD include/generated/asm-offsets.h
CALL ../scripts/checksyscalls.sh
LD /kernel/build64/tools/objtool/objtool-in.o
LINK /kernel/build64/tools/objtool/objtool
LDS scripts/module.lds
CC ipc/compat.o
CC ipc/util.o
CC ipc/msgutil.o
HOSTCC usr/gen_init_cpio
CC ipc/msg.o
CC ipc/sem.o
CC ipc/shm.o
AR certs/built-in.a
CC ipc/syscall.o
CC init/main.o
CC ipc/ipc_sysctl.o
CC io_uring/io_uring.o
CC ipc/mqueue.o
CC init/do_mounts.o
CC security/commoncap.o
CC arch/x86/power/cpu.o
AR arch/x86/video/built-in.a
CC ipc/namespace.o
AS arch/x86/lib/clear_page_64.o
CC io_uring/xattr.o
CC security/min_addr.o
CC arch/x86/pci/i386.o
CC arch/x86/lib/cmdline.o
AR virt/lib/built-in.a
UPD init/utsversion-tmp.h
AR arch/x86/ia32/built-in.a
CC [M] arch/x86/video/fbdev.o
AR arch/x86/net/built-in.a
CC arch/x86/realmode/init.o
CC security/keys/gc.o
CC block/partitions/core.o
CC [M] virt/lib/irqbypass.o
AS arch/x86/crypto/aesni-intel_asm.o
CC arch/x86/events/amd/core.o
AR drivers/irqchip/built-in.a
CC net/core/sock.o
CC io_uring/nop.o
AR sound/isa/ad1816a/built-in.a
CC [M] arch/x86/kvm/../../../virt/kvm/kvm_main.o
CC fs/notify/dnotify/dnotify.o
AR sound/i2c/other/built-in.a
AS arch/x86/lib/cmpxchg16b_emu.o
AR arch/x86/platform/atom/built-in.a
CC arch/x86/mm/pat/set_memory.o
AR sound/pci/ac97/built-in.a
CC arch/x86/kernel/fpu/init.o
CC sound/core/seq/seq.o
AR sound/i2c/built-in.a
AR sound/drivers/opl3/built-in.a
CC fs/notify/inotify/inotify_fsnotify.o
AR sound/isa/ad1848/built-in.a
AR sound/pci/ali5451/built-in.a
AR drivers/bus/mhi/built-in.a
AR arch/x86/platform/ce4100/built-in.a
CC block/partitions/ldm.o
AR drivers/bus/built-in.a
AR sound/drivers/opl4/built-in.a
CC arch/x86/entry/vdso/vma.o
CC lib/kunit/test.o
AR sound/pci/asihpi/built-in.a
AR sound/isa/cs423x/built-in.a
CC arch/x86/platform/efi/memmap.o
AR sound/pci/au88x0/built-in.a
CC arch/x86/events/intel/core.o
AR sound/drivers/mpu401/built-in.a
CC mm/kasan/common.o
AR drivers/phy/allwinner/built-in.a
AR sound/isa/es1688/built-in.a
CC kernel/sched/core.o
AR sound/pci/aw2/built-in.a
AR sound/pci/ctxfi/built-in.a
AR sound/drivers/vx/built-in.a
CC arch/x86/crypto/aesni-intel_glue.o
AR drivers/phy/amlogic/built-in.a
AR sound/isa/galaxy/built-in.a
CC arch/x86/mm/init.o
CC crypto/api.o
AR sound/drivers/pcsp/built-in.a
AR drivers/phy/broadcom/built-in.a
AR sound/pci/ca0106/built-in.a
AR sound/drivers/built-in.a
AR sound/isa/gus/built-in.a
AR sound/pci/cs46xx/built-in.a
CC arch/x86/events/intel/bts.o
AR drivers/phy/cadence/built-in.a
AR sound/isa/msnd/built-in.a
AR sound/pci/cs5535audio/built-in.a
AR drivers/phy/freescale/built-in.a
AR sound/isa/opti9xx/built-in.a
AR sound/pci/lola/built-in.a
CC arch/x86/lib/copy_mc.o
AR sound/pci/lx6464es/built-in.a
AR sound/isa/sb/built-in.a
AR drivers/phy/hisilicon/built-in.a
AR sound/pci/echoaudio/built-in.a
AR sound/isa/wavefront/built-in.a
AR drivers/phy/ingenic/built-in.a
AR sound/pci/emu10k1/built-in.a
AR sound/isa/wss/built-in.a
AR drivers/phy/intel/built-in.a
AR sound/isa/built-in.a
AR sound/pci/hda/built-in.a
AR drivers/phy/lantiq/built-in.a
CC [M] sound/pci/hda/hda_bind.o
CC [M] sound/pci/hda/hda_codec.o
AR drivers/phy/marvell/built-in.a
AR drivers/phy/mediatek/built-in.a
AR drivers/phy/microchip/built-in.a
AR drivers/phy/motorola/built-in.a
AR drivers/phy/mscc/built-in.a
AR drivers/phy/qualcomm/built-in.a
AR drivers/phy/ralink/built-in.a
AR drivers/phy/renesas/built-in.a
AR drivers/phy/rockchip/built-in.a
GEN usr/initramfs_data.cpio
AR drivers/phy/samsung/built-in.a
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
AR drivers/phy/socionext/built-in.a
AR drivers/phy/st/built-in.a
AR usr/built-in.a
AR drivers/phy/sunplus/built-in.a
AR drivers/phy/tegra/built-in.a
CC crypto/cipher.o
AR drivers/phy/ti/built-in.a
AR drivers/phy/xilinx/built-in.a
CC drivers/phy/phy-core.o
AS arch/x86/lib/copy_mc_64.o
AS arch/x86/lib/copy_page_64.o
AR virt/built-in.a
AS arch/x86/lib/copy_user_64.o
CC [M] arch/x86/kvm/../../../virt/kvm/eventfd.o
CC arch/x86/lib/cpu.o
CC kernel/sched/fair.o
CC fs/notify/inotify/inotify_user.o
CC sound/core/seq/seq_lock.o
CC kernel/sched/build_policy.o
CC kernel/sched/build_utility.o
AS arch/x86/realmode/rm/header.o
CC security/inode.o
CC arch/x86/kernel/fpu/bugs.o
AS arch/x86/realmode/rm/trampoline_64.o
AS arch/x86/realmode/rm/stack.o
CC security/keys/key.o
CC arch/x86/entry/vsyscall/vsyscall_64.o
CC fs/notify/fanotify/fanotify.o
AS arch/x86/realmode/rm/reboot.o
AR fs/notify/dnotify/built-in.a
AS arch/x86/realmode/rm/wakeup_asm.o
CC arch/x86/events/amd/lbr.o
CC arch/x86/events/amd/ibs.o
CC arch/x86/pci/init.o
CC arch/x86/realmode/rm/wakemain.o
CC fs/notify/fanotify/fanotify_user.o
CC arch/x86/kernel/fpu/core.o
CC arch/x86/platform/efi/quirks.o
CC lib/kunit/resource.o
CC lib/kunit/static_stub.o
CC lib/math/div64.o
CC arch/x86/realmode/rm/video-mode.o
CC crypto/compress.o
CC arch/x86/entry/vdso/extable.o
CC mm/kasan/report.o
CC lib/math/gcd.o
CC lib/math/lcm.o
CC arch/x86/lib/delay.o
CC arch/x86/power/hibernate_64.o
CC arch/x86/kernel/fpu/regset.o
AS arch/x86/realmode/rm/copy.o
CC sound/core/seq/seq_clientmgr.o
CC arch/x86/kernel/fpu/signal.o
AS arch/x86/realmode/rm/bioscall.o
CC lib/math/int_pow.o
CC arch/x86/kernel/fpu/xstate.o
CC arch/x86/realmode/rm/regs.o
CC lib/math/int_sqrt.o
CC arch/x86/realmode/rm/video-vga.o
AS arch/x86/crypto/aesni-intel_avx-x86_64.o
CC arch/x86/realmode/rm/video-vesa.o
CC [M] sound/pci/hda/hda_jack.o
CC lib/math/reciprocal_div.o
CC block/bdev.o
CC arch/x86/realmode/rm/video-bios.o
CC block/partitions/msdos.o
CC lib/math/rational.o
CC init/do_mounts_initrd.o
CC block/partitions/efi.o
CC arch/x86/entry/vdso/vdso32-setup.o
AS arch/x86/lib/getuser.o
GEN arch/x86/lib/inat-tables.c
CC arch/x86/platform/efi/efi.o
PASYMS arch/x86/realmode/rm/pasyms.h
AS arch/x86/crypto/aes_ctrby8_avx-x86_64.o
LDS arch/x86/realmode/rm/realmode.lds
CC block/fops.o
CC crypto/algapi.o
LD arch/x86/realmode/rm/realmode.elf
RELOCS arch/x86/realmode/rm/realmode.relocs
CC arch/x86/lib/insn-eval.o
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/realmode/rmpiggy.o
CC arch/x86/pci/mmconfig_64.o
CC lib/kunit/string-stream.o
AR arch/x86/realmode/built-in.a
CC arch/x86/lib/insn.o
AR drivers/phy/built-in.a
CC ipc/mq_sysctl.o
AS [M] arch/x86/crypto/ghash-clmulni-intel_asm.o
AR drivers/pinctrl/actions/built-in.a
AR drivers/pinctrl/bcm/built-in.a
AR drivers/pinctrl/cirrus/built-in.a
CC [M] arch/x86/crypto/ghash-clmulni-intel_glue.o
AR drivers/pinctrl/freescale/built-in.a
CC drivers/pinctrl/intel/pinctrl-baytrail.o
CC sound/core/seq/seq_memory.o
AS arch/x86/lib/memcpy_64.o
AS arch/x86/entry/vsyscall/vsyscall_emu_64.o
AS arch/x86/lib/memmove_64.o
AS arch/x86/lib/memset_64.o
CC lib/kunit/assert.o
CC lib/kunit/try-catch.o
CC drivers/pinctrl/intel/pinctrl-intel.o
AR arch/x86/entry/vsyscall/built-in.a
CC security/keys/keyring.o
LDS arch/x86/entry/vdso/vdso.lds
AR fs/notify/inotify/built-in.a
CC security/keys/keyctl.o
AS arch/x86/entry/vdso/vdso-note.o
CC [M] lib/math/prime_numbers.o
CC arch/x86/entry/vdso/vclock_gettime.o
CC arch/x86/events/amd/uncore.o
AS arch/x86/power/hibernate_asm_64.o
CC mm/kasan/init.o
CC arch/x86/mm/pat/memtype.o
CC [M] drivers/pinctrl/intel/pinctrl-cherryview.o
CC arch/x86/power/hibernate.o
AR sound/pci/ice1712/built-in.a
AR sound/pci/korg1212/built-in.a
CC security/device_cgroup.o
CC fs/notify/fsnotify.o
AS arch/x86/entry/entry.o
AS arch/x86/entry/entry_64.o
CC mm/kasan/generic.o
CC arch/x86/entry/syscall_64.o
CC mm/kasan/report_generic.o
CC [M] arch/x86/kvm/../../../virt/kvm/binary_stats.o
CC lib/kunit/executor.o
CC init/initramfs.o
CC arch/x86/kernel/cpu/mce/core.o
CC init/calibrate.o
AS [M] arch/x86/crypto/crc32-pclmul_asm.o
CC [M] arch/x86/crypto/crc32-pclmul_glue.o
CC arch/x86/kernel/cpu/mce/severity.o
CC [M] drivers/pinctrl/intel/pinctrl-broxton.o
CC arch/x86/pci/direct.o
CC arch/x86/entry/common.o
CC sound/core/sound.o
AR block/partitions/built-in.a
CC arch/x86/platform/efi/efi_64.o
CC init/init_task.o
CC arch/x86/entry/vdso/vgetcpu.o
AR lib/math/built-in.a
CC fs/notify/notification.o
AR ipc/built-in.a
AR sound/pci/mixart/built-in.a
HOSTCC arch/x86/entry/vdso/vdso2c
CC drivers/gpio/gpiolib.o
AR fs/notify/fanotify/built-in.a
CC arch/x86/lib/misc.o
CC drivers/gpio/gpiolib-devres.o
CC drivers/gpio/gpiolib-legacy.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC arch/x86/lib/pc-conf-reg.o
AR arch/x86/kernel/fpu/built-in.a
CC drivers/gpio/gpiolib-cdev.o
CC block/bio.o
AR sound/pci/nm256/built-in.a
AR arch/x86/platform/geode/built-in.a
CC lib/kunit/hooks.o
CC arch/x86/mm/init_64.o
CC sound/core/seq/seq_queue.o
AR arch/x86/power/built-in.a
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
CC arch/x86/kernel/acpi/boot.o
CC arch/x86/kernel/apic/apic.o
CC [M] sound/pci/hda/hda_auto_parser.o
AS arch/x86/lib/putuser.o
AS [M] arch/x86/crypto/crct10dif-pcl-asm_64.o
AS arch/x86/lib/retpoline.o
CC [M] arch/x86/crypto/crct10dif-pclmul_glue.o
CC [M] sound/pci/hda/hda_sysfs.o
CC arch/x86/kernel/kprobes/core.o
CC crypto/scatterwalk.o
CC arch/x86/lib/usercopy.o
CC arch/x86/mm/pat/memtype_interval.o
CC arch/x86/kernel/kprobes/opt.o
AR arch/x86/events/amd/built-in.a
CC arch/x86/lib/usercopy_64.o
AS arch/x86/entry/thunk_64.o
CC crypto/proc.o
CC crypto/aead.o
AS arch/x86/entry/vdso/vdso32/note.o
CC arch/x86/mm/fault.o
AR lib/kunit/built-in.a
AS arch/x86/entry/vdso/vdso32/system_call.o
CC lib/crypto/memneq.o
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC lib/crypto/utils.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
CC mm/kasan/shadow.o
CC arch/x86/pci/mmconfig-shared.o
CC crypto/geniv.o
CC [M] arch/x86/kvm/../../../virt/kvm/vfio.o
CC arch/x86/mm/ioremap.o
AR arch/x86/platform/iris/built-in.a
CC arch/x86/mm/extable.o
CC arch/x86/platform/intel/iosf_mbi.o
CC security/keys/permission.o
CC fs/notify/group.o
AR arch/x86/platform/intel-mid/built-in.a
CC init/version.o
CC fs/notify/mark.o
CC security/keys/process_keys.o
CC [M] drivers/pinctrl/intel/pinctrl-geminilake.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC arch/x86/events/intel/ds.o
AS arch/x86/platform/efi/efi_stub_64.o
LD [M] arch/x86/crypto/ghash-clmulni-intel.o
LD [M] arch/x86/crypto/crc32-pclmul.o
AR arch/x86/platform/efi/built-in.a
AR sound/pci/oxygen/built-in.a
CC arch/x86/mm/mmap.o
LD [M] arch/x86/crypto/crct10dif-pclmul.o
AR sound/pci/pcxhr/built-in.a
CC mm/filemap.o
AR arch/x86/crypto/built-in.a
CC [M] drivers/pinctrl/intel/pinctrl-sunrisepoint.o
CC arch/x86/kernel/cpu/mtrr/generic.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
AR init/built-in.a
CC lib/crypto/chacha.o
CC lib/crypto/aes.o
AR sound/ppc/built-in.a
AR sound/arm/built-in.a
AS arch/x86/entry/entry_64_compat.o
AR sound/sh/built-in.a
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC arch/x86/lib/msr-smp.o
AR arch/x86/platform/intel-quark/built-in.a
CC crypto/skcipher.o
CC arch/x86/events/zhaoxin/core.o
CC sound/core/seq/seq_fifo.o
AR arch/x86/mm/pat/built-in.a
CC arch/x86/mm/pgtable.o
CC sound/core/seq/seq_prioq.o
CC net/llc/llc_core.o
CC [M] sound/pci/hda/hda_controller.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC mm/kasan/quarantine.o
CC arch/x86/kernel/apic/apic_common.o
CC arch/x86/events/core.o
CC security/keys/request_key.o
VDSO arch/x86/entry/vdso/vdso64.so.dbg
AR drivers/pwm/built-in.a
VDSO arch/x86/entry/vdso/vdso32.so.dbg
AR sound/pci/riptide/built-in.a
CC arch/x86/kernel/apic/apic_noop.o
OBJCOPY arch/x86/entry/vdso/vdso64.so
OBJCOPY arch/x86/entry/vdso/vdso32.so
CC arch/x86/lib/cache-smp.o
VDSO2C arch/x86/entry/vdso/vdso-image-64.c
CC arch/x86/kernel/kprobes/ftrace.o
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-64.o
AR arch/x86/platform/intel/built-in.a
CC crypto/seqiv.o
AR arch/x86/platform/olpc/built-in.a
AR drivers/pinctrl/intel/built-in.a
AR arch/x86/platform/scx200/built-in.a
CC crypto/echainiv.o
AR arch/x86/platform/ts5500/built-in.a
AR drivers/pinctrl/mediatek/built-in.a
AR arch/x86/platform/uv/built-in.a
AR drivers/pinctrl/mvebu/built-in.a
AR arch/x86/platform/built-in.a
AR drivers/pinctrl/nomadik/built-in.a
CC [M] sound/pci/hda/hda_proc.o
AR drivers/pinctrl/nuvoton/built-in.a
CC net/core/request_sock.o
CC arch/x86/entry/vdso/vdso-image-32.o
CC [M] arch/x86/kvm/../../../virt/kvm/coalesced_mmio.o
AR drivers/pinctrl/sprd/built-in.a
CC [M] arch/x86/kvm/../../../virt/kvm/async_pf.o
CC arch/x86/kernel/acpi/sleep.o
AR drivers/pinctrl/sunplus/built-in.a
AR drivers/pinctrl/ti/built-in.a
CC drivers/pinctrl/core.o
CC drivers/pinctrl/pinctrl-utils.o
AR sound/usb/misc/built-in.a
CC arch/x86/lib/msr.o
AR sound/usb/usx2y/built-in.a
CC arch/x86/kernel/cpu/mce/genpool.o
AR sound/usb/caiaq/built-in.a
AR sound/usb/6fire/built-in.a
CC arch/x86/pci/fixup.o
AR sound/usb/hiface/built-in.a
AR sound/usb/bcd2000/built-in.a
AS arch/x86/lib/msr-reg.o
AR sound/usb/built-in.a
CC arch/x86/kernel/cpu/mce/intel.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC drivers/pinctrl/pinmux.o
CC lib/crypto/gf128mul.o
CC drivers/gpio/gpiolib-sysfs.o
AR arch/x86/entry/vdso/built-in.a
CC sound/core/seq/seq_timer.o
CC arch/x86/entry/syscall_32.o
CC fs/notify/fdinfo.o
CC crypto/ahash.o
CC arch/x86/lib/msr-reg-export.o
CC drivers/gpio/gpiolib-acpi.o
CC net/ethernet/eth.o
CC net/802/p8022.o
CC net/sched/sch_generic.o
CC arch/x86/kernel/cpu/scattered.o
AR arch/x86/events/zhaoxin/built-in.a
CC block/elevator.o
CC net/netlink/af_netlink.o
AR net/bpf/built-in.a
CC net/llc/llc_input.o
CC net/llc/llc_output.o
AR arch/x86/kernel/kprobes/built-in.a
CC drivers/gpio/gpiolib-swnode.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC net/sched/sch_mq.o
AR mm/kasan/built-in.a
CC lib/zlib_inflate/inffast.o
CC arch/x86/mm/physaddr.o
CC lib/zlib_inflate/inflate.o
CC arch/x86/mm/tlb.o
CC arch/x86/kernel/apic/ipi.o
CC security/keys/request_key_auth.o
CC arch/x86/events/intel/knc.o
AS arch/x86/kernel/acpi/wakeup_64.o
CC sound/core/init.o
CC net/sched/sch_frag.o
CC arch/x86/kernel/acpi/apei.o
CC arch/x86/events/probe.o
CC arch/x86/events/utils.o
CC arch/x86/kernel/acpi/cppc.o
CC arch/x86/kernel/acpi/cstate.o
AR arch/x86/entry/built-in.a
CC arch/x86/kernel/cpu/topology.o
CC lib/crypto/blake2s.o
AR fs/notify/built-in.a
AS arch/x86/lib/hweight.o
CC fs/nfs_common/grace.o
CC arch/x86/lib/iomem.o
CC net/core/skbuff.o
CC arch/x86/kernel/apic/vector.o
CC lib/zlib_inflate/infutil.o
CC sound/core/seq/seq_system.o
CC lib/zlib_inflate/inftrees.o
CC arch/x86/pci/acpi.o
CC net/core/datagram.o
CC arch/x86/kernel/cpu/mce/apei.o
CC lib/crypto/blake2s-generic.o
CC drivers/pinctrl/pinconf.o
CC [M] sound/pci/hda/hda_hwdep.o
CC fs/iomap/trace.o
CC arch/x86/mm/cpu_entry_area.o
CC lib/zlib_inflate/inflate_syms.o
CC net/802/psnap.o
CC crypto/shash.o
CC fs/iomap/iter.o
CC [M] arch/x86/kvm/../../../virt/kvm/irqchip.o
CC io_uring/fs.o
AS arch/x86/lib/iomap_copy_64.o
CC net/core/stream.o
CC block/blk-core.o
AR net/llc/built-in.a
CC arch/x86/pci/legacy.o
CC net/802/stp.o
CC arch/x86/events/intel/lbr.o
CC security/keys/user_defined.o
CC arch/x86/lib/inat.o
CC mm/mempool.o
CC lib/zlib_deflate/deflate.o
CC net/ethtool/ioctl.o
CC net/ethtool/common.o
CC net/ethtool/netlink.o
AR drivers/gpio/built-in.a
AR fs/quota/built-in.a
AR arch/x86/kernel/acpi/built-in.a
AR arch/x86/lib/built-in.a
AR sound/firewire/built-in.a
AR sound/sparc/built-in.a
LDS arch/x86/kernel/vmlinux.lds
AS arch/x86/kernel/head_64.o
CC arch/x86/kernel/head64.o
CC arch/x86/events/intel/p4.o
CC crypto/akcipher.o
AR arch/x86/lib/lib.a
CC arch/x86/events/rapl.o
CC net/ethtool/bitset.o
AR lib/zlib_inflate/built-in.a
CC arch/x86/kernel/ebda.o
CC arch/x86/kernel/apic/hw_nmi.o
CC sound/core/seq/seq_ports.o
AR net/ethernet/built-in.a
CC mm/oom_kill.o
CC fs/proc/task_mmu.o
CC sound/core/seq/seq_info.o
AR arch/x86/kernel/cpu/mce/built-in.a
AR fs/nfs_common/built-in.a
CC arch/x86/kernel/cpu/common.o
CC arch/x86/kernel/cpu/rdrand.o
CC drivers/pci/msi/pcidev_msi.o
CC drivers/pinctrl/pinconf-generic.o
CC arch/x86/mm/maccess.o
CC drivers/pci/msi/api.o
CC [M] sound/pci/hda/hda_generic.o
CC lib/crypto/blake2s-selftest.o
CC lib/crypto/des.o
CC lib/crypto/sha1.o
CC drivers/pci/pcie/portdrv.o
CC drivers/pci/hotplug/pci_hotplug_core.o
CC arch/x86/pci/irq.o
CC drivers/pci/pcie/rcec.o
CC security/keys/compat.o
CC arch/x86/mm/pgprot.o
CC io_uring/splice.o
CC lib/lzo/lzo1x_compress.o
CC lib/lzo/lzo1x_decompress_safe.o
AR drivers/pci/controller/dwc/built-in.a
AR drivers/pci/controller/mobiveil/built-in.a
CC fs/iomap/buffered-io.o
CC drivers/pci/controller/vmd.o
CC fs/iomap/direct-io.o
AR net/802/built-in.a
CC [M] arch/x86/kvm/../../../virt/kvm/dirty_ring.o
CC [M] net/netfilter/ipvs/ip_vs_conn.o
CC net/netfilter/core.o
CC lib/crypto/sha256.o
CC crypto/kpp.o
CC [M] net/netfilter/ipvs/ip_vs_core.o
CC [M] lib/crypto/arc4.o
CC drivers/pci/msi/msi.o
CC fs/iomap/fiemap.o
AR drivers/pinctrl/built-in.a
CC arch/x86/kernel/platform-quirks.o
AR drivers/pci/switch/built-in.a
CC drivers/pci/access.o
AR sound/core/seq/built-in.a
CC fs/kernfs/mount.o
CC net/netfilter/nf_log.o
CC sound/core/memory.o
CC lib/zlib_deflate/deftree.o
CC arch/x86/events/intel/p6.o
CC net/ethtool/strset.o
CC [M] arch/x86/kvm/../../../virt/kvm/pfncache.o
CC io_uring/sync.o
CC arch/x86/kernel/process_64.o
CC sound/core/control.o
CC arch/x86/kernel/apic/io_apic.o
CC arch/x86/mm/hugetlbpage.o
CC net/sched/sch_api.o
CC [M] net/netfilter/ipvs/ip_vs_ctl.o
CC [M] net/netfilter/ipvs/ip_vs_sched.o
AR lib/lzo/built-in.a
CC io_uring/advise.o
CC arch/x86/events/intel/pt.o
CC security/keys/proc.o
CC arch/x86/mm/kasan_init_64.o
CC drivers/pci/pcie/aspm.o
CC drivers/pci/hotplug/acpi_pcihp.o
CC lib/zlib_deflate/deflate_syms.o
CC net/ethtool/linkinfo.o
CC arch/x86/mm/pkeys.o
CC sound/core/misc.o
CC io_uring/filetable.o
CC crypto/acompress.o
CC crypto/scompress.o
LD [M] lib/crypto/libarc4.o
AR lib/crypto/built-in.a
CC drivers/pci/hotplug/pciehp_core.o
CC drivers/pci/bus.o
AR kernel/sched/built-in.a
CC kernel/locking/mutex.o
CC fs/kernfs/inode.o
CC kernel/locking/semaphore.o
CC drivers/pci/msi/irqdomain.o
CC fs/kernfs/dir.o
AR lib/zlib_deflate/built-in.a
CC arch/x86/pci/common.o
CC lib/lz4/lz4_compress.o
AR drivers/pci/controller/built-in.a
CC fs/kernfs/file.o
CC lib/lz4/lz4hc_compress.o
CC arch/x86/kernel/cpu/match.o
CC kernel/power/qos.o
CC arch/x86/pci/early.o
CC kernel/power/main.o
CC kernel/power/console.o
CC security/keys/sysctl.o
CC kernel/printk/printk.o
CC net/netlink/genetlink.o
CC [M] arch/x86/kvm/x86.o
CC [M] arch/x86/kvm/emulate.o
CC fs/proc/inode.o
CC arch/x86/mm/pti.o
CC arch/x86/kernel/signal.o
CC kernel/power/process.o
CC mm/fadvise.o
CC kernel/printk/printk_safe.o
CC net/netfilter/nf_queue.o
CC net/netfilter/nf_sockopt.o
CC fs/proc/root.o
CC block/blk-sysfs.o
CC kernel/power/suspend.o
CC arch/x86/kernel/cpu/bugs.o
CC net/core/scm.o
CC crypto/algboss.o
CC drivers/pci/hotplug/pciehp_ctrl.o
CC crypto/testmgr.o
CC fs/iomap/seek.o
CC [M] arch/x86/kvm/i8259.o
CC fs/proc/base.o
AR security/keys/built-in.a
AR security/built-in.a
CC arch/x86/pci/bus_numa.o
AR drivers/pci/msi/built-in.a
CC lib/lz4/lz4_decompress.o
CC drivers/pci/probe.o
CC net/ethtool/linkmodes.o
CC io_uring/openclose.o
CC drivers/pci/pcie/aer.o
CC arch/x86/events/intel/uncore.o
CC fs/kernfs/symlink.o
CC net/sched/sch_blackhole.o
CC drivers/pci/hotplug/pciehp_pci.o
CC kernel/printk/printk_ringbuffer.o
CC crypto/cmac.o
CC kernel/power/hibernate.o
CC net/netlink/policy.o
AR arch/x86/mm/built-in.a
CC arch/x86/events/intel/uncore_nhmex.o
CC net/netlink/diag.o
CC mm/maccess.o
CC sound/core/device.o
CC crypto/hmac.o
CC crypto/vmac.o
CC kernel/locking/rwsem.o
CC arch/x86/kernel/apic/msi.o
CC crypto/xcbc.o
CC kernel/printk/sysctl.o
CC fs/iomap/swapfile.o
CC kernel/power/snapshot.o
CC [M] net/netfilter/ipvs/ip_vs_xmit.o
CC arch/x86/pci/amd_bus.o
AR sound/pci/rme9652/built-in.a
AR fs/kernfs/built-in.a
AR sound/pci/trident/built-in.a
CC kernel/power/swap.o
CC fs/sysfs/file.o
CC drivers/pci/hotplug/pciehp_hpc.o
CC crypto/crypto_null.o
CC block/blk-flush.o
AR net/ipv4/netfilter/built-in.a
CC [M] net/ipv4/netfilter/nf_defrag_ipv4.o
CC net/ipv4/route.o
CC [M] net/ipv4/netfilter/nf_reject_ipv4.o
CC crypto/md5.o
CC net/ipv4/inetpeer.o
CC fs/sysfs/dir.o
CC fs/sysfs/symlink.o
CC sound/core/info.o
CC net/sched/sch_fifo.o
CC net/ethtool/rss.o
AR sound/pci/ymfpci/built-in.a
CC mm/page-writeback.o
AR sound/pci/vx222/built-in.a
CC block/blk-settings.o
CC fs/sysfs/mount.o
CC net/xfrm/xfrm_policy.o
AR lib/lz4/built-in.a
CC lib/zstd/zstd_compress_module.o
CC lib/xz/xz_dec_syms.o
CC lib/xz/xz_dec_stream.o
CC io_uring/uring_cmd.o
CC lib/xz/xz_dec_lzma2.o
AR sound/spi/built-in.a
AR fs/iomap/built-in.a
CC arch/x86/kernel/apic/x2apic_phys.o
AR sound/parisc/built-in.a
CC crypto/sha1_generic.o
AR sound/pcmcia/vx/built-in.a
CC fs/configfs/inode.o
CC arch/x86/kernel/cpu/aperfmperf.o
AR sound/pcmcia/pdaudiocf/built-in.a
CC drivers/pci/pcie/err.o
AR sound/pcmcia/built-in.a
CC fs/configfs/file.o
CC mm/folio-compat.o
CC arch/x86/kernel/signal_64.o
AR net/netlink/built-in.a
CC mm/readahead.o
AR arch/x86/pci/built-in.a
CC drivers/pci/pcie/aer_inject.o
CC mm/swap.o
CC lib/zstd/compress/fse_compress.o
CC fs/configfs/dir.o
CC arch/x86/kernel/traps.o
CC kernel/power/user.o
CC crypto/sha256_generic.o
CC lib/xz/xz_dec_bcj.o
AR kernel/printk/built-in.a
CC arch/x86/kernel/apic/x2apic_cluster.o
CC block/blk-ioc.o
CC lib/zstd/compress/hist.o
CC kernel/locking/percpu-rwsem.o
CC drivers/pci/hotplug/acpiphp_core.o
CC fs/sysfs/group.o
CC arch/x86/events/intel/uncore_snb.o
CC sound/core/isadma.o
CC net/ipv4/protocol.o
CC [M] sound/pci/hda/patch_realtek.o
CC drivers/pci/host-bridge.o
CC [M] arch/x86/kvm/irq.o
CC arch/x86/events/intel/uncore_snbep.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC lib/zstd/compress/huf_compress.o
CC kernel/power/poweroff.o
CC arch/x86/kernel/idt.o
CC arch/x86/kernel/cpu/umwait.o
AR net/sched/built-in.a
CC net/ipv4/ip_input.o
CC net/ethtool/linkstate.o
CC arch/x86/events/msr.o
CC sound/core/vmaster.o
CC drivers/pci/pcie/pme.o
CC net/ipv4/ip_fragment.o
CC arch/x86/events/intel/uncore_discovery.o
CC drivers/pci/remove.o
CC fs/configfs/symlink.o
CC net/unix/af_unix.o
AR lib/xz/built-in.a
CC fs/configfs/mount.o
CC net/ipv4/ip_forward.o
CC fs/devpts/inode.o
CC crypto/sha512_generic.o
CC mm/truncate.o
CC [M] net/ipv4/netfilter/ip_tables.o
CC io_uring/epoll.o
CC block/blk-map.o
CC net/unix/garbage.o
CC arch/x86/kernel/apic/apic_flat_64.o
CC net/core/gen_stats.o
CC kernel/irq/irqdesc.o
CC kernel/locking/irqflag-debug.o
CC lib/raid6/algos.o
AR kernel/power/built-in.a
CC fs/proc/generic.o
CC lib/raid6/recov.o
CC kernel/locking/mutex-debug.o
CC [M] net/netfilter/ipvs/ip_vs_app.o
CC drivers/pci/hotplug/acpiphp_glue.o
CC mm/vmscan.o
AR fs/sysfs/built-in.a
CC [M] net/netfilter/ipvs/ip_vs_sync.o
HOSTCC lib/raid6/mktables
CC [M] arch/x86/kvm/lapic.o
CC drivers/pci/pcie/dpc.o
CC arch/x86/kernel/cpu/proc.o
CC arch/x86/kernel/irq.o
UNROLL lib/raid6/int1.c
CC net/ethtool/debug.o
CC fs/configfs/item.o
CC sound/core/ctljack.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC arch/x86/kernel/cpu/powerflags.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC sound/core/jack.o
CC sound/core/timer.o
CC arch/x86/events/intel/cstate.o
CC [M] net/ipv4/netfilter/iptable_filter.o
CC [M] net/ipv4/netfilter/iptable_mangle.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC arch/x86/kernel/apic/probe_64.o
CC crypto/blake2b_generic.o
CC io_uring/statx.o
CC io_uring/net.o
CC net/ethtool/wol.o
AR fs/devpts/built-in.a
UNROLL lib/raid6/int2.c
UNROLL lib/raid6/int4.c
CC fs/ext4/balloc.o
UNROLL lib/raid6/int8.c
CC fs/ext4/bitmap.o
UNROLL lib/raid6/int16.c
UNROLL lib/raid6/int32.c
CC lib/raid6/recov_ssse3.o
CC kernel/locking/lockdep.o
CC fs/ext4/block_validity.o
AR arch/x86/kernel/apic/built-in.a
CC crypto/ecb.o
CC kernel/irq/handle.o
AR sound/mips/built-in.a
AR fs/configfs/built-in.a
CC sound/core/hrtimer.o
CC arch/x86/kernel/cpu/intel.o
CC sound/core/seq_device.o
CC mm/shmem.o
CC net/core/gen_estimator.o
CC fs/proc/array.o
CC arch/x86/kernel/irq_64.o
CC block/blk-merge.o
CC kernel/irq/manage.o
CC fs/jbd2/transaction.o
CC lib/zstd/compress/zstd_compress.o
AR drivers/pci/pcie/built-in.a
CC fs/jbd2/commit.o
CC arch/x86/kernel/dumpstack_64.o
CC [M] arch/x86/kvm/i8254.o
AR sound/soc/built-in.a
AR sound/atmel/built-in.a
CC mm/util.o
AR sound/hda/built-in.a
CC [M] sound/hda/hda_bus_type.o
CC mm/mmzone.o
CC net/xfrm/xfrm_state.o
AR drivers/pci/hotplug/built-in.a
CC drivers/pci/pci.o
CC crypto/cbc.o
CC net/xfrm/xfrm_hash.o
CC lib/raid6/recov_avx2.o
CC io_uring/msg_ring.o
CC net/ipv4/ip_options.o
CC [M] sound/core/control_led.o
CC io_uring/timeout.o
CC drivers/pci/pci-driver.o
CC kernel/locking/lockdep_proc.o
CC drivers/video/console/dummycon.o
CC drivers/video/logo/logo.o
CC drivers/video/backlight/backlight.o
CC drivers/video/fbdev/core/fb_notify.o
CC drivers/video/aperture.o
CC net/ethtool/features.o
CC arch/x86/kernel/time.o
CC kernel/irq/spurious.o
CC [M] net/ipv4/netfilter/ipt_REJECT.o
CC arch/x86/kernel/ioport.o
CC crypto/pcbc.o
AR arch/x86/events/intel/built-in.a
AR arch/x86/events/built-in.a
CC [M] sound/hda/hdac_bus.o
CC arch/x86/kernel/dumpstack.o
CC net/unix/sysctl_net_unix.o
CC net/netfilter/utils.o
HOSTCC drivers/video/logo/pnmtologo
CC [M] net/netfilter/ipvs/ip_vs_est.o
CC net/core/net_namespace.o
CC lib/raid6/mmx.o
CC kernel/irq/resend.o
CC lib/raid6/sse1.o
CC lib/raid6/sse2.o
CC lib/raid6/avx2.o
CC fs/proc/fd.o
CC drivers/video/console/vgacon.o
CC arch/x86/kernel/cpu/intel_pconfig.o
CC kernel/locking/spinlock.o
CC kernel/locking/osq_lock.o
CC net/ethtool/privflags.o
LOGO drivers/video/logo/logo_linux_clut224.c
CC drivers/video/logo/logo_linux_clut224.o
CC [M] sound/pci/hda/patch_analog.o
CC [M] sound/core/hwdep.o
AR drivers/video/logo/built-in.a
CC fs/jbd2/recovery.o
CC [M] drivers/video/fbdev/core/fbmem.o
CC crypto/cts.o
CC fs/jbd2/checkpoint.o
CC [M] drivers/video/fbdev/core/fbmon.o
CC fs/jbd2/revoke.o
CC fs/ext4/dir.o
CC [M] drivers/video/fbdev/core/fbcmap.o
CC net/ethtool/rings.o
CC net/xfrm/xfrm_input.o
CC block/blk-timeout.o
CC block/blk-lib.o
CC net/xfrm/xfrm_output.o
CC fs/jbd2/journal.o
CC [M] arch/x86/kvm/ioapic.o
CC io_uring/sqpoll.o
CC [M] sound/hda/hdac_device.o
CC io_uring/fdinfo.o
AR drivers/video/backlight/built-in.a
CC arch/x86/kernel/cpu/tsx.o
CC arch/x86/kernel/cpu/intel_epb.o
CC kernel/irq/chip.o
CC net/ethtool/channels.o
CC drivers/video/cmdline.o
CC lib/raid6/avx512.o
CC net/unix/diag.o
CC net/unix/scm.o
CC net/ipv4/ip_output.o
CC net/ipv4/ip_sockglue.o
CC lib/zstd/compress/zstd_compress_literals.o
CC kernel/locking/qspinlock.o
CC fs/proc/proc_tty.o
CC kernel/locking/rtmutex_api.o
CC [M] sound/core/pcm.o
CC [M] net/netfilter/nfnetlink.o
CC arch/x86/kernel/cpu/amd.o
CC crypto/lrw.o
CC fs/proc/cmdline.o
CC arch/x86/kernel/cpu/hygon.o
CC [M] sound/pci/hda/patch_hdmi.o
CC fs/ramfs/inode.o
CC fs/ramfs/file-mmu.o
CC [M] sound/pci/hda/hda_eld.o
AR drivers/video/console/built-in.a
CC [M] arch/x86/kvm/irq_comm.o
CC lib/raid6/recov_avx512.o
CC block/blk-mq.o
CC fs/ext4/ext4_jbd2.o
CC kernel/irq/dummychip.o
CC drivers/video/nomodeset.o
CC fs/ext4/extents.o
CC drivers/video/hdmi.o
CC net/ethtool/coalesce.o
CC kernel/locking/spinlock_debug.o
CC [M] arch/x86/kvm/cpuid.o
CC [M] sound/hda/hdac_sysfs.o
CC [M] net/netfilter/ipvs/ip_vs_proto.o
CC lib/zstd/compress/zstd_compress_sequences.o
CC fs/proc/consoles.o
CC net/core/secure_seq.o
CC kernel/irq/devres.o
CC fs/proc/cpuinfo.o
CC kernel/rcu/update.o
CC fs/hugetlbfs/inode.o
CC fs/fat/cache.o
CC fs/fat/dir.o
CC [M] net/netfilter/ipvs/ip_vs_pe.o
CC [M] arch/x86/kvm/pmu.o
CC [M] net/netfilter/ipvs/ip_vs_proto_tcp.o
CC fs/nfs/client.o
CC io_uring/tctx.o
CC [M] net/netfilter/ipvs/ip_vs_proto_udp.o
CC crypto/xts.o
AR net/unix/built-in.a
CC fs/nfs/dir.o
CC fs/ext4/extents_status.o
CC [M] drivers/video/fbdev/core/fbsysfs.o
AR fs/ramfs/built-in.a
TABLE lib/raid6/tables.c
CC mm/vmstat.o
CC lib/raid6/int1.o
CC [M] sound/core/pcm_native.o
CC fs/nfs/file.o
CC arch/x86/kernel/cpu/centaur.o
CC kernel/locking/qrwlock.o
CC lib/zstd/compress/zstd_compress_superblock.o
CC kernel/irq/autoprobe.o
CC lib/raid6/int2.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC net/xfrm/xfrm_sysctl.o
CC fs/proc/devices.o
CC net/xfrm/xfrm_replay.o
CC kernel/irq/irqdomain.o
CC drivers/pci/search.o
CC net/xfrm/xfrm_device.o
CC io_uring/poll.o
CC fs/fat/fatent.o
CC [M] sound/hda/hdac_regmap.o
CC lib/zstd/compress/zstd_double_fast.o
CC [M] sound/core/pcm_lib.o
CC fs/nfs/getroot.o
CC net/ethtool/pause.o
CC kernel/rcu/sync.o
CC crypto/ctr.o
CC drivers/idle/intel_idle.o
CC lib/raid6/int4.o
CC arch/x86/kernel/nmi.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC lib/raid6/int8.o
CC drivers/pci/pci-sysfs.o
CC crypto/gcm.o
AR kernel/locking/built-in.a
CC mm/backing-dev.o
CC net/core/flow_dissector.o
CC [M] net/netfilter/ipvs/ip_vs_nfct.o
CC fs/proc/interrupts.o
CC [M] drivers/video/fbdev/core/modedb.o
CC [M] net/netfilter/ipvs/ip_vs_rr.o
CC lib/zstd/compress/zstd_fast.o
CC arch/x86/kernel/ldt.o
CC [M] drivers/video/fbdev/core/fbcvt.o
CC [M] drivers/video/fbdev/core/fb_cmdline.o
CC drivers/pci/rom.o
CC mm/mm_init.o
AR fs/hugetlbfs/built-in.a
CC fs/fat/file.o
CC [M] sound/hda/hdac_controller.o
CC net/xfrm/xfrm_algo.o
CC kernel/rcu/srcutree.o
CC crypto/pcrypt.o
CC net/xfrm/xfrm_user.o
CC net/ethtool/eee.o
CC fs/proc/loadavg.o
CC arch/x86/kernel/cpu/vmware.o
AR fs/jbd2/built-in.a
CC fs/exportfs/expfs.o
AR kernel/livepatch/built-in.a
CC fs/lockd/clntlock.o
CC [M] sound/pci/hda/hda_intel.o
CC kernel/dma/mapping.o
CC lib/raid6/int16.o
CC kernel/irq/proc.o
CC net/ipv4/inet_hashtables.o
CC kernel/irq/migration.o
CC [M] sound/hda/hdac_stream.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC arch/x86/kernel/setup.o
CC fs/ext4/file.o
CC fs/ext4/fsmap.o
CC io_uring/cancel.o
CC fs/ext4/fsync.o
CC fs/fat/inode.o
CC kernel/dma/direct.o
CC net/ipv4/inet_timewait_sock.o
CC [M] drivers/video/fbdev/core/fb_defio.o
CC [M] sound/core/pcm_misc.o
CC [M] drivers/video/fbdev/core/fbcon.o
CC kernel/entry/common.o
AR drivers/idle/built-in.a
AR net/ipv6/netfilter/built-in.a
AR drivers/video/fbdev/omap/built-in.a
CC net/ipv6/af_inet6.o
CC [M] net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC crypto/cryptd.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
CC [M] net/ipv6/netfilter/nf_conntrack_reasm.o
CC fs/proc/meminfo.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
AR drivers/video/fbdev/omap2/omapfb/built-in.a
AR drivers/video/fbdev/omap2/built-in.a
CC [M] drivers/video/fbdev/core/bitblit.o
CC arch/x86/kernel/cpu/hypervisor.o
CC mm/percpu.o
LD [M] net/netfilter/ipvs/ip_vs.o
CC drivers/pci/setup-res.o
CC kernel/module/main.o
AR fs/exportfs/built-in.a
CC lib/raid6/int32.o
CC kernel/time/time.o
CC kernel/time/timer.o
CC kernel/time/hrtimer.o
CC [M] net/netfilter/nf_conntrack_core.o
CC mm/slab_common.o
CC arch/x86/kernel/cpu/mshyperv.o
CC kernel/irq/cpuhotplug.o
CC [M] sound/core/pcm_memory.o
CC net/ethtool/tsinfo.o
CC kernel/futex/core.o
CC block/blk-mq-tag.o
CC kernel/rcu/tree.o
CC kernel/futex/syscalls.o
CC io_uring/kbuf.o
CC crypto/des_generic.o
CC [M] sound/hda/array.o
CC kernel/dma/ops_helpers.o
CC fs/lockd/clntproc.o
CC fs/proc/stat.o
CC lib/raid6/tables.o
CC fs/ext4/hash.o
CC block/blk-stat.o
CC kernel/cgroup/cgroup.o
CC drivers/pci/irq.o
CC kernel/entry/syscall_user_dispatch.o
CC fs/ext4/ialloc.o
CC kernel/irq/pm.o
CC mm/compaction.o
CC net/core/sysctl_net_core.o
CC kernel/dma/dummy.o
CC arch/x86/kernel/x86_init.o
CC crypto/aes_generic.o
CC net/packet/af_packet.o
CC arch/x86/kernel/cpu/capflags.o
CC fs/nfs/inode.o
CC [M] sound/core/memalloc.o
CC net/key/af_key.o
AR arch/x86/kernel/cpu/built-in.a
CC fs/fat/misc.o
CC crypto/deflate.o
CC crypto/crc32c_generic.o
LD [M] sound/pci/hda/snd-hda-codec-generic.o
LD [M] sound/pci/hda/snd-hda-codec-realtek.o
CC block/blk-mq-sysfs.o
CC fs/proc/uptime.o
CC [M] sound/hda/hdmi_chmap.o
CC kernel/entry/kvm.o
LD [M] sound/pci/hda/snd-hda-codec-analog.o
CC net/ethtool/cabletest.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
LD [M] sound/pci/hda/snd-hda-intel.o
CC arch/x86/kernel/i8259.o
AR sound/pci/built-in.a
CC net/core/dev.o
CC [M] net/netfilter/nf_conntrack_standalone.o
CC mm/interval_tree.o
LD [M] net/ipv6/netfilter/nf_defrag_ipv6.o
AR lib/raid6/built-in.a
AR net/bridge/netfilter/built-in.a
CC block/blk-mq-cpumap.o
CC net/bridge/br.o
CC block/blk-mq-sched.o
CC kernel/futex/pi.o
CC drivers/pci/vpd.o
CC net/bridge/br_device.o
CC fs/ext4/indirect.o
CC kernel/dma/contiguous.o
CC net/bridge/br_fdb.o
CC net/ipv6/anycast.o
CC [M] net/netfilter/nf_conntrack_expect.o
CC io_uring/rsrc.o
CC kernel/irq/msi.o
CC drivers/pci/setup-bus.o
CC kernel/futex/requeue.o
CC fs/proc/util.o
CC [M] drivers/video/fbdev/core/softcursor.o
CC crypto/crct10dif_common.o
CC net/ipv4/inet_connection_sock.o
CC fs/fat/nfs.o
CC kernel/dma/swiotlb.o
CC arch/x86/kernel/irqinit.o
AR net/xfrm/built-in.a
CC fs/fat/namei_vfat.o
CC fs/lockd/clntxdr.o
CC kernel/module/strict_rwx.o
CC [M] arch/x86/kvm/mtrr.o
CC [M] sound/core/pcm_timer.o
AR kernel/entry/built-in.a
CC net/ipv6/ip6_output.o
CC [M] sound/hda/trace.o
CC net/ipv4/tcp.o
CC kernel/trace/trace_clock.o
CC fs/lockd/host.o
CC crypto/crct10dif_generic.o
CC fs/proc/version.o
CC kernel/time/timekeeping.o
CC kernel/futex/waitwake.o
CC fs/proc/softirqs.o
CC crypto/authenc.o
LD [M] sound/core/snd-ctl-led.o
CC net/ipv4/tcp_input.o
CC net/ethtool/tunnels.o
CC kernel/module/tree_lookup.o
CC fs/lockd/svc.o
CC block/ioctl.o
CC block/genhd.o
CC [M] drivers/video/fbdev/core/tileblit.o
CC kernel/dma/remap.o
CC kernel/trace/ftrace.o
CC kernel/module/debug_kmemleak.o
CC kernel/time/ntp.o
CC fs/proc/namespaces.o
CC arch/x86/kernel/jump_label.o
CC [M] net/netfilter/nf_conntrack_helper.o
LD [M] sound/core/snd-hwdep.o
LD [M] sound/core/snd-pcm.o
CC [M] arch/x86/kvm/hyperv.o
AR sound/core/built-in.a
CC fs/fat/namei_msdos.o
CC net/bridge/br_forward.o
CC net/bridge/br_if.o
CC kernel/rcu/rcu_segcblist.o
AR kernel/futex/built-in.a
CC arch/x86/kernel/irq_work.o
CC fs/nls/nls_base.o
CC lib/zstd/compress/zstd_lazy.o
CC kernel/irq/affinity.o
CC fs/nls/nls_cp437.o
CC net/core/dev_addr_lists.o
CC net/core/dst.o
CC [M] sound/hda/hdac_component.o
CC kernel/trace/ring_buffer.o
CC kernel/trace/trace.o
CC kernel/module/kallsyms.o
CC [M] drivers/video/fbdev/core/cfbfillrect.o
CC fs/nls/nls_ascii.o
AR kernel/dma/built-in.a
CC [M] sound/hda/hdac_i915.o
CC kernel/module/procfs.o
CC fs/ext4/inline.o
CC crypto/authencesn.o
CC block/ioprio.o
CC io_uring/rw.o
CC drivers/pci/vc.o
CC net/core/netevent.o
CC kernel/module/sysfs.o
CC fs/proc/self.o
CC net/core/neighbour.o
CC kernel/irq/matrix.o
CC lib/fonts/fonts.o
CC [M] arch/x86/kvm/debugfs.o
CC io_uring/opdef.o
CC block/badblocks.o
CC net/ethtool/fec.o
CC fs/nls/nls_iso8859-1.o
CC arch/x86/kernel/probe_roms.o
CC fs/nfs/super.o
AR fs/fat/built-in.a
AR fs/unicode/built-in.a
CC fs/lockd/svclock.o
CC fs/ntfs/aops.o
CC kernel/time/clocksource.o
AR net/key/built-in.a
CC kernel/time/jiffies.o
CC kernel/time/timer_list.o
CC fs/ntfs/attrib.o
CC [M] sound/hda/intel-dsp-config.o
CC lib/fonts/font_8x8.o
CC fs/autofs/init.o
CC net/ethtool/eeprom.o
CC lib/fonts/font_8x16.o
CC fs/proc/thread_self.o
CC fs/nls/nls_utf8.o
CC mm/list_lru.o
CC [M] drivers/video/fbdev/core/cfbcopyarea.o
CC [M] net/netfilter/nf_conntrack_proto.o
CC fs/autofs/inode.o
CC fs/autofs/root.o
CC drivers/pci/mmap.o
CC lib/zstd/compress/zstd_ldm.o
AR drivers/char/ipmi/built-in.a
AR kernel/module/built-in.a
CC block/blk-rq-qos.o
CC net/ethtool/stats.o
CC fs/debugfs/inode.o
CC fs/debugfs/file.o
CC net/core/rtnetlink.o
CC net/bridge/br_input.o
CC lib/argv_split.o
CC net/ipv4/tcp_output.o
CC crypto/lzo.o
AR lib/fonts/built-in.a
CC lib/zstd/compress/zstd_opt.o
AR fs/nls/built-in.a
CC arch/x86/kernel/sys_ia32.o
CC drivers/acpi/acpica/dsargs.o
CC drivers/pnp/pnpacpi/core.o
CC drivers/pnp/core.o
CC fs/proc/proc_sysctl.o
CC drivers/pnp/card.o
CC [M] sound/hda/intel-nhlt.o
CC fs/proc/proc_net.o
CC net/packet/diag.o
CC lib/zstd/zstd_decompress_module.o
CC [M] arch/x86/kvm/mmu/mmu.o
AR kernel/irq/built-in.a
CC fs/ntfs/collate.o
AR drivers/amba/built-in.a
CC kernel/time/timeconv.o
AR drivers/clk/actions/built-in.a
AR drivers/clk/analogbits/built-in.a
CC drivers/pci/setup-irq.o
AR drivers/clk/bcm/built-in.a
AR drivers/clk/imgtec/built-in.a
AR drivers/clk/imx/built-in.a
AR drivers/clk/ingenic/built-in.a
AR drivers/clk/mediatek/built-in.a
CC fs/ntfs/compress.o
AR drivers/clk/microchip/built-in.a
AR drivers/clk/mstar/built-in.a
AR drivers/clk/mvebu/built-in.a
AR drivers/clk/ralink/built-in.a
CC crypto/lzo-rle.o
CC drivers/acpi/acpica/dscontrol.o
AR drivers/clk/renesas/built-in.a
CC crypto/lz4.o
AR drivers/clk/socfpga/built-in.a
CC block/disk-events.o
AR drivers/clk/sprd/built-in.a
CC drivers/pci/proc.o
AR drivers/clk/sunxi-ng/built-in.a
CC kernel/time/timecounter.o
AR drivers/clk/ti/built-in.a
AR drivers/clk/versatile/built-in.a
CC [M] drivers/video/fbdev/core/cfbimgblt.o
CC drivers/clk/x86/clk-lpss-atom.o
CC io_uring/notif.o
CC fs/autofs/symlink.o
CC drivers/clk/x86/clk-pmc-atom.o
CC mm/workingset.o
CC block/blk-ia-ranges.o
CC drivers/pnp/pnpacpi/rsparser.o
CC fs/autofs/waitq.o
CC fs/lockd/svcshare.o
CC fs/lockd/svcproc.o
CC kernel/time/alarmtimer.o
CC fs/ext4/inode.o
CC [M] sound/hda/intel-sdw-acpi.o
AR fs/debugfs/built-in.a
CC fs/ntfs/debug.o
CC fs/nfs/io.o
AR kernel/rcu/built-in.a
CC arch/x86/kernel/signal_32.o
CC net/ipv6/ip6_input.o
CC fs/autofs/expire.o
CC fs/autofs/dev-ioctl.o
CC kernel/trace/trace_output.o
LD [M] sound/hda/snd-hda-core.o
CC net/ethtool/phc_vclocks.o
CC kernel/cgroup/rstat.o
CC drivers/acpi/acpica/dsdebug.o
CC drivers/pnp/driver.o
CC fs/ext4/ioctl.o
CC [M] drivers/video/fbdev/uvesafb.o
CC net/ipv6/addrconf.o
CC [M] net/netfilter/nf_conntrack_proto_generic.o
CC crypto/lz4hc.o
CC drivers/pci/slot.o
AR net/packet/built-in.a
CC net/bridge/br_ioctl.o
AR drivers/clk/x86/built-in.a
CC [M] net/sunrpc/auth_gss/auth_gss.o
AR drivers/clk/xilinx/built-in.a
CC drivers/clk/clk-devres.o
CC [M] net/sunrpc/auth_gss/gss_generic_token.o
CC fs/ntfs/dir.o
LD [M] sound/hda/snd-intel-dspcfg.o
CC [M] net/sunrpc/auth_gss/gss_mech_switch.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
CC block/bsg.o
AR sound/x86/built-in.a
AR sound/xen/built-in.a
AR sound/virtio/built-in.a
CC [M] net/sunrpc/auth_gss/svcauth_gss.o
CC sound/sound_core.o
CC drivers/pci/pci-acpi.o
CC fs/ntfs/file.o
CC drivers/acpi/acpica/dsfield.o
CC [M] drivers/video/fbdev/core/sysfillrect.o
CC mm/debug.o
CC crypto/xxhash_generic.o
CC [M] net/netfilter/nf_conntrack_proto_tcp.o
CC io_uring/io-wq.o
CC net/bridge/br_stp.o
CC sound/last.o
AR drivers/pnp/pnpacpi/built-in.a
CC [M] drivers/video/fbdev/core/syscopyarea.o
CC drivers/pnp/resource.o
CC kernel/cgroup/namespace.o
AR fs/autofs/built-in.a
CC [M] net/sunrpc/auth_gss/gss_rpc_upcall.o
CC arch/x86/kernel/sys_x86_64.o
CC drivers/clk/clk-bulk.o
CC fs/proc/kcore.o
CC fs/nfs/direct.o
CC fs/nfs/pagelist.o
CC fs/proc/kmsg.o
CC fs/lockd/svcsubs.o
CC drivers/clk/clkdev.o
CC net/ethtool/mm.o
CC kernel/time/posix-timers.o
AR sound/built-in.a
CC fs/nfs/read.o
CC crypto/rng.o
CC fs/ntfs/index.o
CC mm/gup.o
CC fs/proc/page.o
CC drivers/acpi/acpica/dsinit.o
CC block/bsg-lib.o
CC net/ipv4/tcp_timer.o
CC drivers/clk/clk.o
CC kernel/cgroup/cgroup-v1.o
CC mm/mmap_lock.o
CC crypto/drbg.o
CC [M] net/netfilter/nf_conntrack_proto_udp.o
CC fs/nfs/symlink.o
CC [M] net/sunrpc/auth_gss/gss_rpc_xdr.o
CC arch/x86/kernel/espfix_64.o
CC [M] net/sunrpc/auth_gss/trace.o
CC [M] drivers/video/fbdev/simplefb.o
CC drivers/pci/quirks.o
CC drivers/acpi/acpica/dsmethod.o
CC [M] drivers/video/fbdev/core/sysimgblt.o
CC lib/zstd/decompress/huf_decompress.o
CC crypto/jitterentropy.o
CC drivers/pnp/manager.o
CC crypto/jitterentropy-kcapi.o
CC block/blk-cgroup.o
CC kernel/trace/trace_seq.o
CC net/8021q/vlan_core.o
CC fs/ntfs/inode.o
CC net/dcb/dcbnl.o
CC fs/ntfs/mft.o
CC net/bridge/br_stp_bpdu.o
CC net/dcb/dcbevent.o
CC net/ethtool/module.o
CC kernel/trace/trace_stat.o
CC fs/lockd/mon.o
CC fs/ext4/mballoc.o
AR fs/proc/built-in.a
CC fs/tracefs/inode.o
CC net/ipv4/tcp_ipv4.o
CC drivers/acpi/acpica/dsmthdat.o
AR io_uring/built-in.a
CC crypto/ghash-generic.o
CC net/ethtool/pse-pd.o
CC drivers/pnp/support.o
CC arch/x86/kernel/ksysfs.o
CC kernel/time/posix-cpu-timers.o
CC [M] net/netfilter/nf_conntrack_proto_icmp.o
CC net/bridge/br_stp_if.o
CC arch/x86/kernel/bootflag.o
CC kernel/trace/trace_printk.o
CC net/ipv4/tcp_minisocks.o
CC drivers/clk/clk-divider.o
CC drivers/clk/clk-fixed-factor.o
CC [M] drivers/video/fbdev/core/fb_sys_fops.o
CC [M] net/sunrpc/auth_gss/gss_krb5_mech.o
CC drivers/acpi/acpica/dsobject.o
CC kernel/trace/pid_list.o
CC [M] net/sunrpc/auth_gss/gss_krb5_seal.o
CC arch/x86/kernel/e820.o
CC fs/ntfs/mst.o
CC net/bridge/br_stp_timer.o
CC kernel/cgroup/freezer.o
CC net/bridge/br_netlink.o
CC drivers/pci/ats.o
CC kernel/trace/trace_sched_switch.o
CC drivers/pnp/interface.o
CC net/ipv4/tcp_cong.o
CC drivers/pnp/quirks.o
CC crypto/af_alg.o
AR fs/tracefs/built-in.a
CC net/ipv6/addrlabel.o
CC fs/ext4/migrate.o
CC fs/lockd/xdr.o
CC net/core/utils.o
CC fs/nfs/unlink.o
CC net/core/link_watch.o
CC fs/nfs/write.o
CC kernel/bpf/core.o
CC drivers/acpi/acpica/dsopcode.o
CC lib/bug.o
CC [M] net/8021q/vlan.o
CC fs/ntfs/namei.o
CC net/ethtool/plca.o
CC drivers/dma/dw/core.o
CC drivers/dma/hsu/hsu.o
AR drivers/dma/idxd/built-in.a
CC block/blk-cgroup-rwstat.o
CC drivers/dma/dw/dw.o
CC fs/ntfs/runlist.o
LD [M] drivers/video/fbdev/core/fb.o
CC kernel/trace/trace_functions.o
CC drivers/clk/clk-fixed-rate.o
CC [M] net/netfilter/nf_conntrack_extend.o
CC [M] net/netfilter/nf_conntrack_acct.o
CC mm/highmem.o
AR drivers/video/fbdev/core/built-in.a
AR drivers/video/fbdev/built-in.a
AR drivers/video/built-in.a
CC fs/ext4/mmp.o
CC net/ipv4/tcp_metrics.o
CC drivers/pnp/system.o
CC net/ipv4/tcp_fastopen.o
CC kernel/cgroup/legacy_freezer.o
CC kernel/time/posix-clock.o
CC [M] net/netfilter/nf_conntrack_seqadj.o
CC drivers/acpi/acpica/dspkginit.o
CC [M] net/sunrpc/auth_gss/gss_krb5_unseal.o
CC block/blk-throttle.o
CC net/bridge/br_netlink_tunnel.o
AR net/dcb/built-in.a
CC net/l3mdev/l3mdev.o
CC drivers/pci/iov.o
CC arch/x86/kernel/pci-dma.o
CC [M] net/bluetooth/af_bluetooth.o
CC [M] net/dns_resolver/dns_key.o
CC [M] net/dns_resolver/dns_query.o
CC net/ipv4/tcp_rate.o
CC [M] net/bluetooth/hci_core.o
CC lib/buildid.o
CC block/mq-deadline.o
CC fs/lockd/clnt4xdr.o
AR drivers/pnp/built-in.a
AR drivers/soc/apple/built-in.a
CC drivers/virtio/virtio.o
AR drivers/soc/aspeed/built-in.a
CC drivers/virtio/virtio_ring.o
AR drivers/soc/bcm/bcm63xx/built-in.a
AR drivers/soc/bcm/built-in.a
CC net/core/filter.o
AR drivers/soc/fsl/built-in.a
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/imx/built-in.a
CC drivers/acpi/acpica/dsutils.o
CC mm/memory.o
AR drivers/soc/ixp4xx/built-in.a
AR drivers/dma/hsu/built-in.a
AR drivers/soc/loongson/built-in.a
CC net/core/sock_diag.o
AR drivers/soc/mediatek/built-in.a
AR drivers/soc/microchip/built-in.a
AR net/ethtool/built-in.a
CC kernel/cgroup/pids.o
AR drivers/soc/nuvoton/built-in.a
CC net/devres.o
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
AR drivers/soc/qcom/built-in.a
AR drivers/soc/renesas/built-in.a
AR drivers/soc/rockchip/built-in.a
AR drivers/soc/sifive/built-in.a
AR drivers/soc/sunxi/built-in.a
AR drivers/soc/ti/built-in.a
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC [M] net/sunrpc/auth_gss/gss_krb5_seqnum.o
CC [M] net/8021q/vlan_dev.o
CC [M] net/sunrpc/auth_gss/gss_krb5_wrap.o
CC kernel/time/itimer.o
CC kernel/cgroup/cpuset.o
CC kernel/trace/trace_preemptirq.o
CC fs/ext4/move_extent.o
CC [M] net/netfilter/nf_conntrack_proto_icmpv6.o
CC fs/ntfs/super.o
CC [M] net/sunrpc/auth_gss/gss_krb5_crypto.o
CC [M] net/sunrpc/auth_gss/gss_krb5_keys.o
CC arch/x86/kernel/quirks.o
CC crypto/algif_hash.o
CC drivers/dma/dw/idma32.o
LD [M] net/dns_resolver/dns_resolver.o
CC block/kyber-iosched.o
CC net/bridge/br_arp_nd_proxy.o
CC lib/cmdline.o
LD [M] net/sunrpc/auth_gss/auth_rpcgss.o
CC kernel/trace/trace_nop.o
AR net/l3mdev/built-in.a
CC kernel/trace/trace_functions_graph.o
CC drivers/clk/clk-gate.o
CC drivers/acpi/acpica/dswexec.o
CC kernel/trace/fgraph.o
CC [M] net/netfilter/nf_conntrack_proto_dccp.o
CC drivers/virtio/virtio_anchor.o
CC [M] net/netfilter/nf_conntrack_proto_sctp.o
CC [M] net/netfilter/nf_conntrack_netlink.o
CC net/ipv6/route.o
CC drivers/pci/pci-label.o
CC block/bfq-iosched.o
CC arch/x86/kernel/topology.o
CC drivers/clk/clk-multiplier.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC net/ipv4/tcp_recovery.o
CC crypto/algif_skcipher.o
CC fs/lockd/xdr4.o
CC arch/x86/kernel/kdebugfs.o
CC drivers/pci/pci-stub.o
CC [M] net/bluetooth/hci_conn.o
CC drivers/dma/dw/acpi.o
CC drivers/acpi/acpica/dswload.o
CC lib/cpumask.o
CC lib/ctype.o
CC drivers/pci/vgaarb.o
CC net/ipv4/tcp_ulp.o
CC kernel/time/clockevents.o
CC drivers/dma/dw/pci.o
CC crypto/xor.o
CC kernel/trace/blktrace.o
CC crypto/hash_info.o
CC arch/x86/kernel/alternative.o
CC drivers/clk/clk-mux.o
CC drivers/clk/clk-composite.o
CC fs/ntfs/sysctl.o
CC drivers/tty/vt/vt_ioctl.o
CC drivers/char/hw_random/core.o
CC drivers/clk/clk-fractional-divider.o
CC net/ipv4/tcp_offload.o
CC [M] net/8021q/vlan_netlink.o
CC fs/ntfs/unistr.o
CC drivers/tty/hvc/hvc_console.o
LD [M] net/sunrpc/auth_gss/rpcsec_gss_krb5.o
CC net/sunrpc/clnt.o
CC net/sunrpc/xprt.o
CC net/sunrpc/socklib.o
CC [M] net/netfilter/nf_nat_core.o
CC fs/ntfs/upcase.o
CC drivers/acpi/acpica/dswload2.o
CC drivers/clk/clk-gpio.o
AR kernel/bpf/built-in.a
CC drivers/virtio/virtio_pci_legacy_dev.o
CC fs/nfs/namespace.o
CC net/socket.o
CC [M] net/netfilter/nf_nat_proto.o
CC drivers/acpi/acpica/dswscope.o
CC lib/dec_and_lock.o
CC fs/nfs/mount_clnt.o
CC net/bridge/br_sysfs_if.o
CC kernel/trace/trace_events.o
CC crypto/simd.o
CC [M] crypto/md4.o
AR drivers/dma/dw/built-in.a
AR drivers/dma/mediatek/built-in.a
AR drivers/dma/qcom/built-in.a
CC kernel/time/tick-common.o
AR drivers/dma/ti/built-in.a
AR drivers/dma/xilinx/built-in.a
CC [M] drivers/dma/ioat/init.o
CC drivers/dma/dmaengine.o
CC [M] drivers/dma/ioat/dma.o
CC [M] drivers/dma/ioat/prep.o
CC [M] arch/x86/kvm/mmu/page_track.o
CC [M] crypto/ccm.o
CC kernel/time/tick-broadcast.o
CC kernel/trace/trace_export.o
CC fs/lockd/svc4proc.o
CC [M] arch/x86/kvm/mmu/spte.o
AR drivers/clk/built-in.a
CC fs/btrfs/super.o
CC block/bfq-wf2q.o
CC block/bfq-cgroup.o
CC drivers/acpi/acpica/dswstate.o
CC drivers/char/hw_random/intel-rng.o
CC drivers/acpi/acpica/evevent.o
AR fs/ntfs/built-in.a
CC net/core/dev_ioctl.o
CC drivers/virtio/virtio_mmio.o
AR drivers/pci/built-in.a
CC net/ipv4/tcp_plb.o
CC net/ipv4/datagram.o
CC [M] net/8021q/vlanproc.o
CC drivers/acpi/apei/apei-base.o
CC drivers/tty/vt/vc_screen.o
CC arch/x86/kernel/i8253.o
AR drivers/tty/hvc/built-in.a
CC drivers/tty/serial/8250/8250_core.o
CC net/sunrpc/xprtsock.o
CC drivers/acpi/acpica/evgpe.o
CC drivers/acpi/apei/hest.o
CC fs/pstore/inode.o
CC [M] drivers/dma/ioat/dca.o
CC [M] drivers/dma/ioat/sysfs.o
CC block/blk-mq-pci.o
CC net/bridge/br_sysfs_br.o
CC fs/nfs/nfstrace.o
AR drivers/char/hw_random/built-in.a
CC [M] arch/x86/kvm/mmu/tdp_iter.o
CC drivers/char/agp/backend.o
CC kernel/time/tick-broadcast-hrtimer.o
CC arch/x86/kernel/hw_breakpoint.o
CC drivers/char/agp/generic.o
CC net/core/tso.o
CC [M] crypto/arc4.o
CC net/sunrpc/sched.o
AR drivers/tty/ipwireless/built-in.a
AR kernel/cgroup/built-in.a
CC net/sunrpc/auth.o
CC net/core/sock_reuseport.o
CC [M] crypto/ecc.o
CC kernel/events/core.o
CC drivers/virtio/virtio_pci_modern.o
CC fs/ext4/namei.o
CC fs/nfs/export.o
CC drivers/acpi/acpica/evgpeblk.o
CC fs/nfs/sysfs.o
CC kernel/time/tick-oneshot.o
AR net/8021q/built-in.a
LD [M] net/8021q/8021q.o
CC drivers/tty/tty_io.o
CC fs/lockd/procfs.o
CC kernel/fork.o
CC drivers/tty/vt/selection.o
CC fs/pstore/platform.o
CC [M] net/netfilter/nf_nat_helper.o
CC [M] net/netfilter/nf_nat_redirect.o
CC drivers/acpi/apei/erst.o
CC kernel/events/ring_buffer.o
CC drivers/virtio/virtio_pci_common.o
CC fs/ext4/page-io.o
CC net/ipv4/raw.o
CC drivers/virtio/virtio_pci_legacy.o
LD [M] drivers/dma/ioat/ioatdma.o
CC drivers/char/agp/isoch.o
CC drivers/dma/virt-dma.o
CC [M] net/netfilter/nf_nat_masquerade.o
CC drivers/tty/n_tty.o
CC net/sunrpc/auth_null.o
CC drivers/tty/serial/8250/8250_pnp.o
CC kernel/time/tick-sched.o
CC drivers/acpi/acpica/evgpeinit.o
CC [M] arch/x86/kvm/mmu/tdp_mmu.o
CC [M] net/bluetooth/hci_event.o
CC arch/x86/kernel/tsc.o
CC [M] drivers/virtio/virtio_mem.o
CC fs/pstore/pmsg.o
AR fs/lockd/built-in.a
CC net/compat.o
CC drivers/tty/vt/keyboard.o
CC block/blk-mq-virtio.o
CC block/blk-mq-debugfs.o
CC [M] crypto/essiv.o
CC net/bridge/br_nf_core.o
CC kernel/trace/trace_event_perf.o
CC drivers/acpi/acpica/evgpeutil.o
CC drivers/acpi/acpica/evglock.o
CC kernel/trace/trace_events_filter.o
CC drivers/dma/acpi-dma.o
CC drivers/char/agp/intel-agp.o
CC fs/btrfs/ctree.o
CC mm/mincore.o
CC drivers/tty/serial/8250/8250_port.o
CC drivers/char/tpm/tpm-chip.o
CC drivers/acpi/apei/bert.o
CC drivers/char/tpm/tpm-dev-common.o
CC drivers/acpi/acpica/evhandler.o
CC drivers/char/tpm/tpm-dev.o
CC net/bridge/br_multicast.o
AR fs/pstore/built-in.a
CC fs/ext4/readpage.o
CC drivers/char/tpm/tpm-interface.o
CC drivers/char/tpm/tpm1-cmd.o
CC net/sunrpc/auth_unix.o
CC drivers/char/mem.o
CC drivers/acpi/apei/ghes.o
CC kernel/time/vsyscall.o
CC drivers/char/agp/intel-gtt.o
CC net/sunrpc/svc.o
CC [M] net/netfilter/x_tables.o
CC mm/mlock.o
CC fs/efivarfs/inode.o
CC arch/x86/kernel/tsc_msr.o
AR drivers/dma/built-in.a
CC fs/efivarfs/file.o
CC drivers/acpi/acpica/evmisc.o
CC [M] crypto/ecdh.o
CC arch/x86/kernel/io_delay.o
AR drivers/iommu/amd/built-in.a
CC drivers/iommu/intel/dmar.o
CC drivers/acpi/acpica/evregion.o
CC block/blk-pm.o
CC kernel/events/callchain.o
CC kernel/time/timekeeping_debug.o
CC block/holder.o
AR drivers/iommu/arm/arm-smmu/built-in.a
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
CC net/ipv4/udp.o
AR drivers/iommu/arm/built-in.a
AR drivers/iommu/iommufd/built-in.a
CC drivers/char/tpm/tpm2-cmd.o
CC net/ipv6/ip6_fib.o
CC drivers/char/tpm/tpmrm-dev.o
CC drivers/char/tpm/tpm2-space.o
AR drivers/virtio/built-in.a
CC net/bridge/br_mdb.o
CC fs/nfs/fs_context.o
CC drivers/iommu/iommu.o
CC [M] fs/netfs/buffered_read.o
CC arch/x86/kernel/rtc.o
CC net/bridge/br_multicast_eht.o
CC [M] fs/fscache/cache.o
CC [M] fs/smbfs_common/cifs_arc4.o
CC [M] fs/cifs/trace.o
CC [M] arch/x86/kvm/smm.o
CC drivers/iommu/intel/iommu.o
CC fs/efivarfs/super.o
CC [M] fs/fuse/dev.o
CC [M] fs/overlayfs/super.o
CC drivers/acpi/acpica/evrgnini.o
CC kernel/trace/trace_events_trigger.o
CC drivers/tty/vt/consolemap.o
CC [M] crypto/ecdh_helper.o
CC [M] fs/overlayfs/namei.o
AR drivers/char/agp/built-in.a
AR block/built-in.a
CC [M] fs/overlayfs/util.o
CC kernel/time/namespace.o
CC net/bridge/br_vlan.o
CC [M] fs/smbfs_common/cifs_md4.o
CC kernel/events/hw_breakpoint.o
CC kernel/trace/trace_eprobe.o
CC net/sysctl_net.o
AR drivers/acpi/apei/built-in.a
CC net/ipv4/udplite.o
CC [M] fs/fscache/cookie.o
HOSTCC drivers/tty/vt/conmakehash
CC arch/x86/kernel/resource.o
LD [M] crypto/ecdh_generic.o
AR crypto/built-in.a
CC drivers/char/tpm/tpm-sysfs.o
CC drivers/tty/vt/vt.o
CC drivers/acpi/acpica/evsci.o
CC fs/efivarfs/vars.o
CC drivers/iommu/iommu-traces.o
AS arch/x86/kernel/irqflags.o
CC fs/open.o
CC arch/x86/kernel/static_call.o
CC net/core/fib_notifier.o
CC drivers/tty/serial/8250/8250_dma.o
CC drivers/char/random.o
CC [M] fs/fuse/dir.o
CC [M] fs/netfs/io.o
CC fs/ext4/resize.o
CC mm/mmap.o
AR kernel/time/built-in.a
CC kernel/exec_domain.o
COPY drivers/tty/vt/defkeymap.c
CC drivers/char/misc.o
CC drivers/acpi/acpica/evxface.o
CC fs/read_write.o
CC [M] arch/x86/kvm/vmx/vmx.o
CC arch/x86/kernel/process.o
CC [M] fs/overlayfs/inode.o
CC drivers/iommu/iommu-sysfs.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC drivers/iommu/intel/pasid.o
CC net/core/xdp.o
CC net/sunrpc/svcsock.o
CC drivers/char/tpm/eventlog/common.o
AR fs/efivarfs/built-in.a
CC drivers/char/tpm/eventlog/tpm1.o
CC [M] net/netfilter/xt_tcpudp.o
CC fs/ext4/super.o
CC fs/nfs/sysctl.o
CC drivers/iommu/dma-iommu.o
CC [M] fs/overlayfs/file.o
CC drivers/iommu/ioasid.o
CC drivers/iommu/iova.o
CC kernel/events/uprobes.o
CC drivers/acpi/acpica/evxfevnt.o
CC net/bridge/br_vlan_tunnel.o
CC kernel/trace/trace_kprobe.o
CC mm/mmu_gather.o
CC fs/file_table.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC fs/nfs/nfs2super.o
CC [M] fs/fscache/io.o
CC drivers/iommu/irq_remapping.o
CC net/ipv6/ipv6_sockglue.o
CC [M] fs/netfs/iterator.o
CC kernel/panic.o
CC kernel/cpu.o
CC fs/nfs/proc.o
CC mm/mprotect.o
CC drivers/acpi/acpica/evxfgpe.o
CC drivers/char/tpm/eventlog/tpm2.o
CC drivers/char/tpm/tpm_ppi.o
CC lib/zstd/decompress/zstd_ddict.o
CC net/bridge/br_vlan_options.o
CC net/bridge/br_mst.o
CC [M] fs/fuse/file.o
CC [M] fs/overlayfs/dir.o
CC [M] fs/netfs/main.o
CC drivers/tty/serial/8250/8250_pci.o
CC lib/zstd/decompress/zstd_decompress.o
CC [M] net/netfilter/xt_mark.o
CC fs/btrfs/extent-tree.o
CC mm/mremap.o
CC drivers/iommu/intel/trace.o
CC drivers/tty/serial/8250/8250_exar.o
CC fs/nfs/nfs2xdr.o
CC drivers/tty/serial/8250/8250_early.o
CC fs/nfs/nfs3super.o
CC arch/x86/kernel/ptrace.o
CC drivers/acpi/acpica/evxfregn.o
CC [M] fs/cifs/cifsfs.o
CC [M] fs/fscache/main.o
CC drivers/char/virtio_console.o
CC [M] fs/fuse/inode.o
CC [M] fs/netfs/objects.o
CC [M] net/bluetooth/mgmt.o
CC [M] fs/fuse/control.o
CC [M] net/netfilter/xt_nat.o
CC net/core/flow_offload.o
CC drivers/char/tpm/eventlog/acpi.o
CC drivers/char/tpm/eventlog/efi.o
CC fs/ext4/symlink.o
CC [M] net/netfilter/xt_REDIRECT.o
CC drivers/acpi/acpica/exconcat.o
CC drivers/iommu/intel/cap_audit.o
CC drivers/iommu/intel/irq_remapping.o
CC net/ipv4/udp_offload.o
CC kernel/exit.o
CC net/ipv4/arp.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/tty/vt/defkeymap.o
CC fs/btrfs/print-tree.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC lib/zstd/zstd_common_module.o
CC drivers/tty/vt/consolemap_deftbl.o
CC [M] arch/x86/kvm/kvm-asm-offsets.s
CC drivers/char/tpm/tpm_crb.o
CC [M] net/bridge/br_netfilter_hooks.o
AR drivers/tty/vt/built-in.a
CC drivers/tty/tty_ioctl.o
CC drivers/tty/tty_ldisc.o
CC fs/nfs/nfs3client.o
CC [M] fs/overlayfs/readdir.o
CC net/ipv4/icmp.o
CC kernel/softirq.o
CC fs/ext4/sysfs.o
CC drivers/acpi/acpica/exconfig.o
CC fs/super.o
LD [M] fs/netfs/netfs.o
CC fs/ext4/xattr.o
CC [M] fs/cifs/cifs_debug.o
CC [M] fs/fuse/xattr.o
CC net/ipv4/devinet.o
CC fs/nfs/nfs3proc.o
CC arch/x86/kernel/tls.o
CC kernel/trace/error_report-traces.o
CC drivers/tty/serial/8250/8250_dw.o
CC [M] fs/fuse/acl.o
CC drivers/iommu/intel/perfmon.o
CC lib/zstd/common/debug.o
CC mm/msync.o
CC kernel/resource.o
CC net/sunrpc/svcauth.o
CC [M] fs/fscache/volume.o
CC net/sunrpc/svcauth_unix.o
CC net/ipv6/ndisc.o
CC drivers/acpi/acpica/exconvrt.o
CC net/core/gro.o
CC kernel/sysctl.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC arch/x86/kernel/step.o
CC fs/nfs/nfs3xdr.o
CC lib/zstd/common/entropy_common.o
CC drivers/acpi/acpica/excreate.o
CC [M] fs/fuse/readdir.o
CC lib/decompress.o
AR drivers/char/tpm/built-in.a
CC [M] arch/x86/kvm/vmx/pmu_intel.o
CC drivers/char/hpet.o
CC [M] arch/x86/kvm/vmx/vmcs12.o
CC [M] arch/x86/kvm/vmx/hyperv.o
CC lib/decompress_bunzip2.o
CC kernel/trace/power-traces.o
CC [M] arch/x86/kvm/vmx/nested.o
CC [M] net/netfilter/xt_addrtype.o
CC lib/decompress_inflate.o
CC mm/page_vma_mapped.o
CC drivers/tty/tty_buffer.o
CC fs/btrfs/root-tree.o
CC [M] fs/overlayfs/copy_up.o
CC [M] fs/fuse/ioctl.o
CC drivers/tty/serial/8250/8250_lpss.o
AR drivers/acpi/pmic/built-in.a
CC arch/x86/kernel/i8237.o
CC drivers/acpi/dptf/int340x_thermal.o
CC drivers/acpi/acpica/exdebug.o
CC net/ipv6/udp.o
CC kernel/capability.o
CC kernel/ptrace.o
CC net/ipv6/udplite.o
AR kernel/events/built-in.a
CC net/core/netdev-genl.o
CC [M] fs/fscache/proc.o
CC fs/char_dev.o
CC [M] arch/x86/kvm/vmx/posted_intr.o
CC mm/pagewalk.o
AR drivers/iommu/intel/built-in.a
CC [M] net/bluetooth/hci_sock.o
AR drivers/iommu/built-in.a
CC drivers/acpi/acpica/exdump.o
LD [M] arch/x86/kvm/kvm.o
CC arch/x86/kernel/stacktrace.o
CC [M] net/netfilter/xt_conntrack.o
CC arch/x86/kernel/reboot.o
CC fs/btrfs/dir-item.o
CC drivers/tty/serial/serial_core.o
UPD arch/x86/kvm/kvm-asm-offsets.h
CC drivers/acpi/acpica/exfield.o
AR drivers/acpi/dptf/built-in.a
CC [M] fs/cifs/connect.o
AS [M] arch/x86/kvm/vmx/vmenter.o
AR drivers/gpu/host1x/built-in.a
AR drivers/gpu/drm/tests/built-in.a
CC [M] drivers/gpu/drm/tests/drm_kunit_helpers.o
CC kernel/user.o
AR drivers/gpu/vga/built-in.a
CC [M] drivers/gpu/drm/tests/drm_buddy_test.o
CC [M] drivers/gpu/drm/tests/drm_cmdline_parser_test.o
CC drivers/char/nvram.o
CC drivers/tty/serial/8250/8250_mid.o
LD [M] fs/fuse/fuse.o
CC [M] net/bridge/br_netfilter_ipv6.o
CC [M] net/netfilter/xt_ipvs.o
CC drivers/tty/serial/earlycon.o
CC fs/stat.o
CC fs/exec.o
CC net/sunrpc/addr.o
CC [M] drivers/gpu/drm/tests/drm_connector_test.o
CC lib/zstd/common/error_private.o
LD [M] fs/fscache/fscache.o
CC net/core/netdev-genl-gen.o
CC drivers/tty/tty_port.o
CC drivers/acpi/acpica/exfldio.o
AR net/bridge/built-in.a
CC drivers/tty/tty_mutex.o
CC [M] fs/overlayfs/export.o
CC drivers/tty/tty_ldsem.o
CC fs/ext4/xattr_hurd.o
CC drivers/tty/tty_baudrate.o
CC [M] net/bluetooth/hci_sysfs.o
CC net/ipv4/af_inet.o
CC fs/pipe.o
CC net/ipv4/igmp.o
CC kernel/signal.o
CC kernel/sys.o
AR drivers/gpu/drm/arm/built-in.a
CC fs/btrfs/file-item.o
CC net/core/net-sysfs.o
AR drivers/gpu/drm/display/built-in.a
CC [M] drivers/gpu/drm/display/drm_display_helper_mod.o
CC mm/pgtable-generic.o
CC kernel/trace/rpm-traces.o
CC [M] drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
AR fs/nfs/built-in.a
CC fs/namei.o
AR drivers/char/built-in.a
CC arch/x86/kernel/msr.o
CC [M] drivers/gpu/drm/tests/drm_damage_helper_test.o
CC net/ipv4/fib_frontend.o
CC drivers/connector/cn_queue.o
CC drivers/tty/serial/8250/8250_pericom.o
CC drivers/connector/connector.o
CC drivers/base/power/sysfs.o
CC drivers/acpi/acpica/exmisc.o
CC drivers/base/power/generic_ops.o
CC drivers/base/firmware_loader/builtin/main.o
CC drivers/base/regmap/regmap.o
AR drivers/base/test/built-in.a
CC [M] drivers/gpu/drm/display/drm_dp_helper.o
CC fs/ext4/xattr_trusted.o
CC fs/ext4/xattr_user.o
CC drivers/base/power/common.o
CC drivers/base/regmap/regcache.o
CC fs/ext4/fast_commit.o
CC arch/x86/kernel/cpuid.o
LD [M] fs/overlayfs/overlay.o
CC [M] drivers/gpu/drm/display/drm_dp_mst_topology.o
CC net/sunrpc/rpcb_clnt.o
CC drivers/block/loop.o
CC net/ipv6/raw.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC lib/zstd/common/fse_decompress.o
CC drivers/base/firmware_loader/main.o
LD [M] net/netfilter/nf_conntrack.o
CC net/ipv6/icmp.o
CC drivers/acpi/acpica/exmutex.o
LD [M] net/netfilter/nf_nat.o
CC mm/rmap.o
CC drivers/block/virtio_blk.o
AR net/netfilter/built-in.a
CC drivers/base/power/qos.o
CC fs/btrfs/inode-item.o
LD [M] net/bridge/br_netfilter.o
CC drivers/base/power/runtime.o
CC drivers/tty/tty_jobctrl.o
CC drivers/acpi/acpica/exnames.o
CC net/ipv6/mcast.o
CC kernel/trace/trace_dynevent.o
AR drivers/tty/serial/8250/built-in.a
CC [M] drivers/block/nbd.o
CC net/sunrpc/timer.o
CC drivers/base/power/wakeirq.o
CC arch/x86/kernel/early-quirks.o
CC fs/ext4/orphan.o
CC arch/x86/kernel/smp.o
CC net/ipv6/reassembly.o
CC drivers/tty/n_null.o
CC drivers/connector/cn_proc.o
CC drivers/acpi/acpica/exoparg1.o
CC [M] drivers/gpu/drm/tests/drm_dp_mst_helper_test.o
CC drivers/tty/serial/serial_mctrl_gpio.o
CC drivers/acpi/acpica/exoparg2.o
CC [M] drivers/gpu/drm/display/drm_dsc_helper.o
CC net/ipv6/tcp_ipv6.o
CC mm/vmalloc.o
CC kernel/umh.o
CC kernel/workqueue.o
CC lib/zstd/common/zstd_common.o
CC drivers/base/power/main.o
AR lib/zstd/built-in.a
CC lib/decompress_unlz4.o
CC arch/x86/kernel/smpboot.o
CC kernel/trace/trace_probe.o
CC fs/btrfs/disk-io.o
AR drivers/base/firmware_loader/built-in.a
CC [M] drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/tty/pty.o
CC drivers/base/component.o
CC drivers/base/core.o
CC drivers/acpi/acpica/exoparg3.o
CC net/ipv6/ping.o
CC kernel/trace/trace_uprobe.o
CC net/core/net-procfs.o
CC lib/decompress_unlzma.o
CC net/ipv4/fib_semantics.o
CC drivers/base/power/wakeup.o
AR drivers/tty/serial/built-in.a
AR drivers/misc/eeprom/built-in.a
AR drivers/misc/cb710/built-in.a
CC drivers/mfd/mfd-core.o
AR drivers/misc/ti-st/built-in.a
AR drivers/misc/lis3lv02d/built-in.a
AR drivers/misc/cardreader/built-in.a
CC drivers/mfd/intel-lpss.o
CC [M] drivers/misc/mei/hdcp/mei_hdcp.o
CC [M] drivers/gpu/drm/tests/drm_format_helper_test.o
CC [M] drivers/gpu/drm/tests/drm_format_test.o
CC arch/x86/kernel/tsc_sync.o
CC [M] drivers/misc/mei/pxp/mei_pxp.o
CC [M] drivers/gpu/drm/display/drm_hdmi_helper.o
CC [M] drivers/gpu/drm/display/drm_scdc_helper.o
CC mm/page_alloc.o
CC net/ipv6/exthdrs.o
CC drivers/acpi/acpica/exoparg6.o
CC net/sunrpc/xdr.o
AR drivers/connector/built-in.a
CC [M] drivers/gpu/drm/display/drm_dp_aux_dev.o
CC kernel/pid.o
CC fs/btrfs/transaction.o
CC kernel/task_work.o
CC fs/btrfs/inode.o
CC drivers/tty/sysrq.o
AR drivers/block/built-in.a
CC net/ipv6/datagram.o
CC drivers/acpi/acpica/exprep.o
CC [M] net/bluetooth/l2cap_core.o
CC lib/decompress_unlzo.o
CC net/core/netpoll.o
CC net/ipv4/fib_trie.o
CC [M] drivers/misc/mei/init.o
CC net/ipv6/ip6_flowlabel.o
CC drivers/base/bus.o
CC [M] drivers/misc/mei/hbm.o
CC drivers/mfd/intel-lpss-pci.o
CC net/ipv6/inet6_connection_sock.o
CC net/sunrpc/sunrpc_syms.o
CC drivers/base/power/wakeup_stats.o
CC [M] drivers/misc/mei/interrupt.o
CC net/ipv4/fib_notifier.o
CC net/ipv4/inet_fragment.o
CC arch/x86/kernel/setup_percpu.o
CC kernel/trace/rethook.o
CC [M] fs/cifs/dir.o
CC [M] drivers/gpu/drm/tests/drm_framebuffer_test.o
CC [M] fs/cifs/file.o
CC drivers/acpi/acpica/exregion.o
CC drivers/acpi/acpica/exresnte.o
CC [M] net/bluetooth/l2cap_sock.o
CC net/core/fib_rules.o
CC [M] fs/cifs/inode.o
CC lib/decompress_unxz.o
CC drivers/base/regmap/regcache-rbtree.o
AR drivers/nfc/built-in.a
AR drivers/dax/hmem/built-in.a
CC drivers/dax/super.o
CC [M] drivers/misc/mei/client.o
CC drivers/dax/bus.o
CC fs/fcntl.o
CC drivers/mfd/intel-lpss-acpi.o
CC drivers/base/power/domain.o
CC drivers/mfd/intel_soc_pmic_crc.o
CC drivers/acpi/acpica/exresolv.o
AR drivers/tty/built-in.a
CC drivers/base/power/domain_governor.o
CC [M] drivers/gpu/drm/tests/drm_managed_test.o
CC kernel/extable.o
CC lib/decompress_unzstd.o
LD [M] drivers/gpu/drm/display/drm_display_helper.o
CC arch/x86/kernel/ftrace.o
AR drivers/gpu/drm/rcar-du/built-in.a
AR drivers/gpu/drm/omapdrm/built-in.a
AS arch/x86/kernel/ftrace_64.o
CC drivers/dma-buf/dma-buf.o
CC lib/dump_stack.o
AR kernel/trace/built-in.a
CC drivers/dma-buf/dma-fence.o
CC kernel/params.o
CC drivers/dma-buf/dma-fence-array.o
CC drivers/dma-buf/dma-fence-chain.o
LD [M] arch/x86/kvm/kvm-intel.o
AR drivers/cxl/core/built-in.a
AR drivers/cxl/built-in.a
CC net/sunrpc/cache.o
CC [M] drivers/misc/mei/main.o
CC drivers/base/regmap/regcache-flat.o
CC [M] drivers/gpu/drm/tests/drm_mm_test.o
CC fs/ioctl.o
CC drivers/acpi/acpica/exresop.o
CC [M] fs/cifs/link.o
AR drivers/gpu/drm/tilcdc/built-in.a
CC drivers/dma-buf/dma-fence-unwrap.o
CC [M] drivers/gpu/drm/tests/drm_modes_test.o
CC drivers/dma-buf/dma-resv.o
AR drivers/macintosh/built-in.a
CC drivers/base/regmap/regmap-debugfs.o
CC drivers/scsi/scsi.o
CC lib/earlycpio.o
CC drivers/base/regmap/regmap-i2c.o
CC drivers/scsi/hosts.o
CC net/ipv6/udp_offload.o
CC lib/extable.o
CC [M] drivers/mfd/lpc_sch.o
CC drivers/nvme/host/core.o
CC [M] drivers/mfd/lpc_ich.o
CC drivers/base/power/clock_ops.o
AR drivers/misc/built-in.a
CC drivers/base/regmap/regmap-irq.o
CC drivers/scsi/scsi_ioctl.o
CC arch/x86/kernel/trace_clock.o
CC lib/flex_proportions.o
CC lib/idr.o
CC drivers/acpi/acpica/exserial.o
CC net/core/net-traces.o
CC drivers/ata/libata-core.o
CC mm/init-mm.o
CC drivers/spi/spi.o
CC arch/x86/kernel/trace.o
AR drivers/dax/built-in.a
CC drivers/acpi/acpica/exstore.o
CC drivers/ata/libata-scsi.o
CC drivers/scsi/scsicam.o
CC net/ipv4/ping.o
CC arch/x86/kernel/rethook.o
CC kernel/kthread.o
CC drivers/acpi/acpica/exstoren.o
CC fs/readdir.o
CC drivers/dma-buf/sync_file.o
CC [M] fs/cifs/misc.o
AR fs/ext4/built-in.a
CC arch/x86/kernel/crash_core_64.o
CC arch/x86/kernel/module.o
CC drivers/dma-buf/sw_sync.o
CC drivers/base/dd.o
CC drivers/base/syscore.o
CC net/core/selftests.o
CC drivers/dma-buf/sync_debug.o
CC [M] drivers/misc/mei/dma-ring.o
AR drivers/mfd/built-in.a
CC fs/select.o
CC drivers/acpi/acpica/exstorob.o
CC net/core/ptp_classifier.o
CC arch/x86/kernel/early_printk.o
AR drivers/gpu/drm/imx/built-in.a
AR drivers/gpu/drm/i2c/built-in.a
AR drivers/base/power/built-in.a
AR drivers/gpu/drm/panel/built-in.a
CC [M] net/bluetooth/smp.o
CC [M] fs/cifs/netmisc.o
AR drivers/gpu/drm/hisilicon/built-in.a
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC drivers/acpi/acpica/exsystem.o
CC mm/memblock.o
CC kernel/sys_ni.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
AR drivers/gpu/drm/bridge/imx/built-in.a
CC lib/irq_regs.o
CC kernel/nsproxy.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
AR drivers/gpu/drm/bridge/built-in.a
CC drivers/acpi/acpica/extrace.o
AR drivers/gpu/drm/mxsfb/built-in.a
CC drivers/acpi/acpica/exutils.o
CC [M] net/bluetooth/lib.o
CC fs/btrfs/file.o
CC kernel/notifier.o
CC lib/is_single_threaded.o
CC drivers/acpi/acpica/hwacpi.o
CC drivers/acpi/tables.o
CC net/ipv6/seg6.o
CC fs/dcache.o
CC drivers/scsi/scsi_error.o
CC [M] drivers/dma-buf/selftest.o
CC [M] net/bluetooth/ecdh_helper.o
CC drivers/net/phy/mdio-boardinfo.o
CC [M] fs/cifs/smbencrypt.o
AR drivers/firewire/built-in.a
AR drivers/net/pse-pd/built-in.a
CC net/ipv4/ip_tunnel_core.o
AR drivers/cdrom/built-in.a
CC drivers/net/phy/mdio_devres.o
CC arch/x86/kernel/hpet.o
CC drivers/net/mdio/acpi_mdio.o
CC arch/x86/kernel/amd_nb.o
CC [M] drivers/misc/mei/bus.o
CC [M] fs/cifs/transport.o
AR drivers/base/regmap/built-in.a
CC net/ipv6/fib6_notifier.o
CC lib/klist.o
CC drivers/acpi/acpica/hwesleep.o
CC [M] drivers/dma-buf/st-dma-fence.o
CC drivers/net/phy/phy.o
CC drivers/net/mdio/fwnode_mdio.o
CC fs/inode.o
CC [M] drivers/gpu/drm/tests/drm_plane_helper_test.o
CC drivers/base/driver.o
CC [M] drivers/dma-buf/st-dma-fence-chain.o
CC [M] drivers/misc/mei/bus-fixup.o
CC arch/x86/kernel/kvm.o
CC [M] net/bluetooth/hci_request.o
AR drivers/auxdisplay/built-in.a
CC lib/kobject.o
CC kernel/ksysfs.o
CC [M] drivers/dma-buf/st-dma-fence-unwrap.o
CC lib/kobject_uevent.o
CC drivers/acpi/acpica/hwgpe.o
CC drivers/net/phy/phy-c45.o
CC lib/logic_pio.o
CC [M] drivers/gpu/drm/tests/drm_probe_helper_test.o
CC [M] fs/cifs/cached_dir.o
AR drivers/net/pcs/built-in.a
AR drivers/net/ethernet/adi/built-in.a
AR drivers/net/usb/built-in.a
AR drivers/net/ethernet/alacritech/built-in.a
CC [M] drivers/net/usb/pegasus.o
CC [M] fs/cifs/cifs_unicode.o
AR drivers/net/ethernet/amazon/built-in.a
CC net/sunrpc/rpc_pipe.o
AR drivers/net/ethernet/aquantia/built-in.a
CC [M] fs/cifs/nterr.o
CC net/ipv6/rpl.o
AR drivers/net/ethernet/asix/built-in.a
AR drivers/net/ethernet/cadence/built-in.a
CC kernel/cred.o
AR drivers/net/ethernet/broadcom/built-in.a
CC [M] drivers/net/ethernet/broadcom/b44.o
CC drivers/base/class.o
CC [M] drivers/net/usb/rtl8150.o
AR drivers/gpu/drm/tiny/built-in.a
CC net/sunrpc/sysfs.o
AR drivers/gpu/drm/xlnx/built-in.a
CC [M] drivers/dma-buf/st-dma-resv.o
CC drivers/usb/common/common.o
AR drivers/net/mdio/built-in.a
CC drivers/usb/common/debug.o
CC drivers/input/serio/serio.o
CC [M] drivers/net/ipvlan/ipvlan_core.o
CC [M] drivers/net/vxlan/vxlan_core.o
CC fs/attr.o
CC [M] drivers/net/vxlan/vxlan_multicast.o
CC drivers/acpi/acpica/hwregs.o
CC [M] fs/cifs/cifsencrypt.o
CC [M] fs/cifs/readdir.o
CC [M] drivers/misc/mei/debugfs.o
CC [M] drivers/net/ipvlan/ipvlan_main.o
CC drivers/scsi/scsi_lib.o
CC drivers/input/keyboard/atkbd.o
CC drivers/acpi/blacklist.o
AR drivers/input/mouse/built-in.a
CC lib/maple_tree.o
CC [M] drivers/gpu/drm/tests/drm_rect_test.o
CC net/ipv4/gre_offload.o
CC lib/memcat_p.o
CC arch/x86/kernel/kvmclock.o
AR drivers/dma-buf/built-in.a
LD [M] drivers/dma-buf/dmabuf_selftests.o
CC drivers/rtc/lib.o
CC drivers/base/platform.o
CC mm/memory_hotplug.o
CC drivers/acpi/acpica/hwsleep.o
CC drivers/acpi/acpica/hwvalid.o
AR drivers/nvme/target/built-in.a
CC drivers/net/phy/phy-core.o
CC net/ipv6/ioam6.o
CC net/ipv6/sysctl_net_ipv6.o
CC drivers/net/phy/phy_device.o
CC [M] drivers/misc/mei/mei-trace.o
AR drivers/usb/common/built-in.a
CC drivers/usb/core/usb.o
CC kernel/reboot.o
CC drivers/net/loopback.o
CC drivers/input/serio/i8042.o
CC drivers/usb/core/hub.o
AR drivers/i2c/algos/built-in.a
CC [M] drivers/i2c/algos/i2c-algo-bit.o
AR drivers/i3c/built-in.a
CC drivers/net/netconsole.o
CC drivers/base/cpu.o
CC drivers/i2c/busses/i2c-designware-common.o
CC drivers/i2c/busses/i2c-designware-master.o
CC drivers/acpi/acpica/hwxface.o
CC drivers/rtc/class.o
CC arch/x86/kernel/paravirt.o
CC [M] net/bluetooth/mgmt_util.o
CC net/sunrpc/svc_xprt.o
CC drivers/acpi/osi.o
AR drivers/gpu/drm/gud/built-in.a
CC [M] drivers/net/usb/r8152.o
AR drivers/gpu/drm/solomon/built-in.a
CC [M] drivers/gpu/drm/ttm/ttm_tt.o
CC [M] drivers/gpu/drm/ttm/ttm_bo.o
CC drivers/acpi/acpica/hwxfsleep.o
AR drivers/spi/built-in.a
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
AR drivers/media/common/b2c2/built-in.a
AR drivers/media/common/saa7146/built-in.a
CC [M] fs/cifs/ioctl.o
CC [M] drivers/net/usb/asix_devices.o
AR drivers/media/common/siano/built-in.a
AR drivers/media/common/v4l2-tpg/built-in.a
CC drivers/nvme/host/ioctl.o
AR drivers/media/common/videobuf2/built-in.a
AR drivers/media/common/built-in.a
CC drivers/input/input.o
AR drivers/media/platform/allegro-dvt/built-in.a
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
AR drivers/input/keyboard/built-in.a
AR drivers/media/platform/amlogic/built-in.a
CC drivers/acpi/osl.o
AR drivers/media/platform/amphion/built-in.a
AR drivers/media/platform/aspeed/built-in.a
AR drivers/media/platform/atmel/built-in.a
AR drivers/media/platform/cadence/built-in.a
AR drivers/media/platform/chips-media/built-in.a
AR drivers/media/platform/intel/built-in.a
AR drivers/media/platform/marvell/built-in.a
AR drivers/media/platform/mediatek/jpeg/built-in.a
AR drivers/media/platform/mediatek/mdp/built-in.a
CC drivers/acpi/utils.o
CC drivers/base/firmware.o
CC net/sunrpc/xprtmultipath.o
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
CC drivers/usb/core/hcd.o
AR drivers/media/platform/mediatek/mdp3/built-in.a
CC net/ipv4/metrics.o
AR drivers/media/platform/mediatek/built-in.a
CC [M] drivers/misc/mei/pci-me.o
AR drivers/media/platform/microchip/built-in.a
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
CC [M] drivers/net/ipvlan/ipvlan_l3s.o
AR drivers/media/platform/nvidia/built-in.a
AR drivers/media/platform/nxp/dw100/built-in.a
CC drivers/acpi/acpica/hwpci.o
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/media/platform/nxp/built-in.a
AR drivers/media/platform/qcom/camss/built-in.a
AR drivers/media/platform/qcom/venus/built-in.a
CC drivers/net/virtio_net.o
AR drivers/media/platform/qcom/built-in.a
AR drivers/usb/phy/built-in.a
CC kernel/async.o
CC net/ipv6/xfrm6_policy.o
CC fs/btrfs/defrag.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/platform/renesas/built-in.a
CC kernel/range.o
CC drivers/rtc/interface.o
CC drivers/usb/host/pci-quirks.o
AR drivers/media/platform/rockchip/rga/built-in.a
CC drivers/usb/host/ehci-hcd.o
AR drivers/media/platform/rockchip/rkisp1/built-in.a
CC drivers/usb/host/ehci-pci.o
AR drivers/media/platform/rockchip/built-in.a
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
CC drivers/usb/host/ohci-hcd.o
CC [M] drivers/gpu/drm/ttm/ttm_bo_util.o
CC arch/x86/kernel/pvclock.o
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC [M] drivers/net/ethernet/broadcom/bnx2.o
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC [M] drivers/net/ethernet/broadcom/cnic.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
CC drivers/net/net_failover.o
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC drivers/acpi/acpica/nsaccess.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
AR drivers/media/platform/samsung/built-in.a
CC drivers/base/init.o
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
CC [M] drivers/net/ethernet/broadcom/tg3.o
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/media/platform/st/built-in.a
CC drivers/acpi/reboot.o
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
CC net/core/netprio_cgroup.o
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
CC [M] net/bluetooth/mgmt_config.o
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
CC drivers/input/serio/libps2.o
CC drivers/usb/storage/scsiglue.o
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/sunxi/built-in.a
CC [M] net/bluetooth/hci_codec.o
AR drivers/media/platform/ti/am437x/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
CC drivers/i2c/busses/i2c-designware-platdrv.o
AR drivers/media/platform/ti/vpe/built-in.a
CC drivers/scsi/scsi_lib_dma.o
AR drivers/media/platform/ti/davinci/built-in.a
CC mm/madvise.o
AR drivers/media/platform/ti/omap/built-in.a
CC drivers/acpi/acpica/nsalloc.o
AR drivers/media/platform/ti/omap3isp/built-in.a
AR drivers/media/platform/ti/built-in.a
AR drivers/media/platform/verisilicon/built-in.a
AR drivers/media/platform/via/built-in.a
CC kernel/smpboot.o
AR drivers/media/platform/xilinx/built-in.a
CC kernel/ucount.o
AR drivers/media/platform/built-in.a
AR drivers/media/pci/ttpci/built-in.a
CC drivers/ata/libata-eh.o
CC [M] drivers/misc/mei/hw-me.o
AR drivers/media/pci/b2c2/built-in.a
AR drivers/media/pci/pluto2/built-in.a
AR drivers/media/pci/dm1105/built-in.a
CC drivers/acpi/acpica/nsarguments.o
AR drivers/media/pci/pt1/built-in.a
AR drivers/media/pci/pt3/built-in.a
AR drivers/media/pci/mantis/built-in.a
AR drivers/media/pci/ngene/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/pci/smipcie/built-in.a
CC drivers/acpi/nvs.o
AR drivers/media/pci/netup_unidvb/built-in.a
CC drivers/nvme/host/trace.o
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/pci/built-in.a
CC arch/x86/kernel/pcspeaker.o
CC drivers/usb/host/ohci-pci.o
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/usb/dvb-usb/built-in.a
CC drivers/base/map.o
AR drivers/media/usb/dvb-usb-v2/built-in.a
AR drivers/media/usb/s2255/built-in.a
AR drivers/media/usb/siano/built-in.a
CC drivers/nvme/host/pci.o
AR drivers/media/usb/ttusb-budget/built-in.a
CC fs/bad_inode.o
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/usb/built-in.a
AR drivers/net/ethernet/cavium/common/built-in.a
AR drivers/media/mmc/siano/built-in.a
CC drivers/i2c/busses/i2c-designware-baytrail.o
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/media/mmc/built-in.a
CC net/ipv4/netlink.o
AR drivers/media/firewire/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/media/spi/built-in.a
CC drivers/net/phy/linkmode.o
AR drivers/net/ethernet/cavium/built-in.a
CC [M] drivers/gpu/drm/ttm/ttm_bo_vm.o
AR drivers/media/test-drivers/built-in.a
CC drivers/net/phy/mdio_bus.o
AR drivers/media/built-in.a
CC drivers/net/phy/mdio_device.o
LD [M] drivers/net/ipvlan/ipvlan.o
CC fs/file.o
AR drivers/net/ethernet/cortina/built-in.a
AR drivers/i2c/muxes/built-in.a
AR drivers/net/ethernet/engleder/built-in.a
CC [M] drivers/i2c/muxes/i2c-mux-gpio.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC drivers/scsi/scsi_scan.o
CC [M] fs/cifs/sess.o
CC drivers/acpi/acpica/nsconvert.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
AR drivers/input/serio/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
CC net/ipv6/xfrm6_state.o
CC drivers/i2c/i2c-boardinfo.o
CC arch/x86/kernel/check.o
CC drivers/usb/storage/protocol.o
CC kernel/regset.o
CC net/ipv4/nexthop.o
CC drivers/base/devres.o
CC net/core/dst_cache.o
CC drivers/input/input-compat.o
CC [M] net/bluetooth/eir.o
CC drivers/i2c/i2c-core-base.o
CC drivers/acpi/wakeup.o
CC drivers/usb/serial/usb-serial.o
CC drivers/acpi/sleep.o
CC drivers/usb/host/uhci-hcd.o
CC drivers/rtc/nvmem.o
CC net/ipv4/udp_tunnel_stub.o
CC drivers/acpi/acpica/nsdump.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/i2c/i2c-core-smbus.o
CC kernel/kmod.o
CC [M] drivers/i2c/busses/i2c-scmi.o
CC drivers/usb/host/xhci.o
CC drivers/usb/core/urb.o
CC [M] drivers/gpu/drm/ttm/ttm_module.o
CC arch/x86/kernel/uprobes.o
CC fs/btrfs/extent_map.o
AR drivers/usb/misc/built-in.a
CC net/sunrpc/stats.o
CC [M] drivers/usb/misc/ftdi-elan.o
CC drivers/usb/storage/transport.o
CC drivers/usb/gadget/udc/core.o
CC drivers/i2c/i2c-core-acpi.o
CC drivers/usb/gadget/udc/trace.o
CC drivers/input/input-mt.o
CC drivers/acpi/acpica/nseval.o
CC fs/filesystems.o
CC mm/page_io.o
CC drivers/usb/storage/usb.o
CC drivers/rtc/dev.o
CC net/ipv6/xfrm6_input.o
CC drivers/base/attribute_container.o
CC [M] drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC drivers/net/phy/swphy.o
CC drivers/scsi/scsi_devinfo.o
CC [M] drivers/misc/mei/gsc-me.o
CC net/core/gro_cells.o
CC drivers/acpi/acpica/nsinit.o
CC kernel/groups.o
CC [M] net/bluetooth/hci_sync.o
CC drivers/net/phy/fixed_phy.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC [M] net/bluetooth/sco.o
CC [M] drivers/i2c/busses/i2c-ccgx-ucsi.o
CC [M] net/bluetooth/iso.o
CC drivers/input/input-poller.o
CC net/ipv4/sysctl_net_ipv4.o
CC drivers/usb/core/message.o
CC arch/x86/kernel/perf_regs.o
CC drivers/base/transport_class.o
CC drivers/ata/libata-transport.o
CC [M] drivers/net/vxlan/vxlan_vnifilter.o
CC fs/namespace.o
CC drivers/rtc/proc.o
CC drivers/usb/serial/generic.o
CC drivers/rtc/sysfs.o
CC drivers/usb/host/xhci-mem.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_drv.o
CC drivers/acpi/acpica/nsload.o
CC [M] drivers/gpu/drm/ttm/ttm_range_manager.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_device.o
CC drivers/base/topology.o
CC net/ipv4/proc.o
CC drivers/usb/storage/initializers.o
CC fs/seq_file.o
CC drivers/scsi/scsi_sysctl.o
LD [M] drivers/misc/mei/mei.o
CC mm/swap_state.o
CC drivers/input/ff-core.o
LD [M] drivers/misc/mei/mei-me.o
CC [M] drivers/i2c/busses/i2c-i801.o
LD [M] drivers/misc/mei/mei-gsc.o
CC kernel/kcmp.o
CC [M] drivers/usb/class/usbtmc.o
CC net/core/failover.o
CC fs/btrfs/sysfs.o
AR drivers/nvme/host/built-in.a
CC [M] fs/cifs/export.o
AR drivers/nvme/built-in.a
CC arch/x86/kernel/tracepoint.o
CC drivers/acpi/device_sysfs.o
AR drivers/usb/gadget/udc/built-in.a
AR drivers/usb/gadget/function/built-in.a
CC drivers/acpi/device_pm.o
AR drivers/usb/gadget/legacy/built-in.a
CC drivers/usb/gadget/usbstring.o
CC net/ipv6/xfrm6_output.o
CC drivers/acpi/acpica/nsnames.o
CC [M] drivers/i2c/busses/i2c-isch.o
CC [M] drivers/net/phy/phylink.o
CC net/sunrpc/sysctl.o
CC drivers/ata/libata-trace.o
CC drivers/rtc/rtc-mc146818-lib.o
CC [M] drivers/gpu/drm/ttm/ttm_resource.o
CC drivers/ata/libata-sata.o
CC drivers/base/container.o
CC arch/x86/kernel/itmt.o
CC drivers/scsi/scsi_debugfs.o
CC drivers/base/property.o
CC drivers/usb/serial/bus.o
CC drivers/usb/storage/sierra_ms.o
CC drivers/usb/host/xhci-ext-caps.o
CC drivers/input/touchscreen.o
CC drivers/acpi/acpica/nsobject.o
CC kernel/freezer.o
CC net/ipv4/syncookies.o
CC drivers/usb/gadget/config.o
CC arch/x86/kernel/umip.o
AR net/sunrpc/built-in.a
CC [M] drivers/net/dummy.o
CC drivers/base/cacheinfo.o
CC lib/nmi_backtrace.o
CC drivers/usb/serial/console.o
CC drivers/rtc/rtc-cmos.o
CC drivers/acpi/acpica/nsparse.o
AR net/core/built-in.a
CC drivers/usb/core/driver.o
CC drivers/usb/core/config.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_kms.o
CC [M] fs/cifs/unc.o
CC [M] drivers/net/macvlan.o
CC drivers/usb/host/xhci-ring.o
CC [M] net/bluetooth/a2mp.o
CC net/ipv4/esp4.o
CC drivers/acpi/acpica/nspredef.o
CC drivers/base/swnode.o
CC drivers/acpi/acpica/nsprepkg.o
CC drivers/scsi/scsi_trace.o
CC drivers/usb/host/xhci-hub.o
CC drivers/usb/host/xhci-dbg.o
CC mm/swapfile.o
CC drivers/usb/gadget/epautoconf.o
CC drivers/input/ff-memless.o
CC drivers/usb/storage/option_ms.o
AR drivers/ptp/built-in.a
CC [M] drivers/ptp/ptp_clock.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.o
CC [M] drivers/i2c/busses/i2c-ismt.o
CC [M] drivers/gpu/drm/ttm/ttm_pool.o
CC [M] drivers/net/usb/asix_common.o
CC net/ipv6/xfrm6_protocol.o
CC drivers/usb/storage/usual-tables.o
CC drivers/acpi/proc.o
CC drivers/acpi/bus.o
CC kernel/stacktrace.o
CC arch/x86/kernel/unwind_orc.o
LD [M] drivers/net/vxlan/vxlan.o
CC lib/plist.o
CC fs/btrfs/accessors.o
CC net/ipv6/netfilter.o
CC net/ipv6/fib6_rules.o
CC drivers/ata/libata-sff.o
CC drivers/ata/libata-pmp.o
CC lib/radix-tree.o
CC drivers/usb/serial/ftdi_sio.o
CC drivers/acpi/acpica/nsrepair.o
CC drivers/base/auxiliary.o
CC drivers/acpi/glue.o
CC drivers/usb/host/xhci-trace.o
CC drivers/usb/gadget/composite.o
CC drivers/ata/libata-acpi.o
CC [M] drivers/net/mii.o
CC drivers/scsi/scsi_logging.o
CC kernel/dma.o
CC [M] drivers/net/mdio.o
AR drivers/rtc/built-in.a
CC drivers/input/vivaldi-fmap.o
AR drivers/usb/storage/built-in.a
CC lib/ratelimit.o
CC lib/rbtree.o
CC drivers/ata/libata-pata-timings.o
CC kernel/smp.o
CC drivers/acpi/acpica/nsrepair2.o
CC arch/x86/kernel/callthunks.o
CC drivers/acpi/scan.o
CC [M] fs/cifs/winucase.o
CC [M] drivers/net/tun.o
CC [M] drivers/ptp/ptp_chardev.o
CC [M] fs/cifs/smb2ops.o
CC drivers/usb/core/file.o
CC drivers/usb/serial/pl2303.o
CC drivers/base/devtmpfs.o
CC [M] drivers/gpu/drm/ttm/ttm_device.o
CC drivers/ata/ahci.o
CC [M] drivers/ptp/ptp_sysfs.o
CC drivers/input/input-leds.o
CC [M] drivers/i2c/busses/i2c-piix4.o
CC kernel/uid16.o
CC [M] drivers/net/phy/aquantia_main.o
CC drivers/usb/host/xhci-debugfs.o
CC drivers/acpi/resource.o
CC [M] drivers/net/usb/ax88172a.o
CC [M] drivers/net/usb/ax88179_178a.o
CC drivers/ata/libahci.o
CC lib/seq_buf.o
CC drivers/acpi/acpica/nssearch.o
CC drivers/scsi/scsi_pm.o
CC [M] net/bluetooth/amp.o
CC drivers/ata/ata_piix.o
CC [M] fs/cifs/smb2maperror.o
CC [M] fs/cifs/smb2transport.o
CC drivers/acpi/acpi_processor.o
CC net/ipv4/esp4_offload.o
CC fs/xattr.o
CC net/ipv4/netfilter.o
CC [M] drivers/ptp/ptp_vclock.o
CC drivers/usb/core/buffer.o
CC [M] drivers/gpu/drm/amd/amdgpu/atombios_crtc.o
CC arch/x86/kernel/mmconf-fam10h_64.o
CC net/ipv6/proc.o
CC [M] fs/cifs/smb2misc.o
CC fs/btrfs/xattr.o
CC [M] net/bluetooth/hci_debugfs.o
CC kernel/kallsyms.o
CC net/ipv6/syncookies.o
CC fs/btrfs/ordered-data.o
CC drivers/input/mousedev.o
CC [M] drivers/gpu/drm/ttm/ttm_sys_manager.o
CC drivers/usb/core/sysfs.o
CC drivers/acpi/acpica/nsutils.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.o
CC drivers/base/memory.o
CC [M] fs/cifs/smb2pdu.o
CC lib/show_mem.o
AR drivers/usb/serial/built-in.a
CC lib/siphash.o
CC [M] drivers/gpu/drm/amd/amdgpu/atom.o
CC [M] drivers/gpu/drm/ttm/ttm_agp_backend.o
CC fs/libfs.o
CC drivers/scsi/scsi_bsg.o
CC [M] drivers/net/phy/aquantia_hwmon.o
CC drivers/scsi/scsi_common.o
CC [M] fs/cifs/smb2inode.o
CC drivers/usb/core/endpoint.o
CC drivers/usb/gadget/functions.o
CC [M] drivers/i2c/busses/i2c-designware-pcidrv.o
CC arch/x86/kernel/vsmp_64.o
CC [M] drivers/ptp/ptp_kvm_x86.o
CC kernel/acct.o
CC drivers/acpi/acpica/nswalk.o
CC lib/string.o
CC [M] drivers/net/phy/ax88796b.o
CC [M] drivers/net/phy/bcm7xxx.o
CC [M] drivers/net/phy/bcm87xx.o
CC mm/swap_slots.o
CC drivers/base/module.o
CC drivers/usb/gadget/configfs.o
CC [M] drivers/gpu/drm/i915/i915_driver.o
CC [M] drivers/gpu/drm/i915/i915_drm_client.o
CC mm/dmapool.o
CC [M] drivers/net/usb/cdc_ether.o
LD [M] drivers/gpu/drm/ttm/ttm.o
CC drivers/input/evdev.o
CC drivers/scsi/sd.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_fence.o
CC [M] drivers/gpu/drm/i915/i915_config.o
CC [M] drivers/gpu/drm/xe/tests/xe_bo_test.o
AR arch/x86/kernel/built-in.a
AR arch/x86/built-in.a
CC [M] drivers/gpu/drm/vgem/vgem_drv.o
CC net/ipv4/inet_diag.o
CC [M] drivers/gpu/drm/vgem/vgem_fence.o
CC drivers/acpi/acpica/nsxfeval.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.o
CC [M] drivers/net/usb/cdc_eem.o
CC drivers/usb/core/devio.o
CC [M] drivers/gpu/drm/nouveau/nvif/object.o
CC [M] drivers/gpu/drm/ast/ast_drv.o
CC [M] drivers/gpu/drm/ast/ast_i2c.o
CC drivers/usb/gadget/u_f.o
CC [M] drivers/net/usb/smsc75xx.o
CC [M] drivers/gpu/drm/ast/ast_main.o
CC kernel/crash_core.o
CC net/ipv6/mip6.o
CC [M] drivers/ptp/ptp_kvm_common.o
CC drivers/base/pinctrl.o
CC lib/timerqueue.o
CC drivers/usb/host/xhci-pci.o
CC [M] drivers/gpu/drm/i915/i915_getparam.o
AR drivers/ata/built-in.a
LD [M] drivers/i2c/busses/i2c-designware-pci.o
CC drivers/acpi/acpica/nsxfname.o
AR drivers/i2c/busses/built-in.a
CC drivers/i2c/i2c-core-slave.o
CC [M] drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
CC drivers/i2c/i2c-dev.o
CC drivers/acpi/acpica/nsxfobj.o
CC [M] drivers/net/usb/smsc95xx.o
CC lib/vsprintf.o
CC mm/hugetlb.o
CC [M] drivers/gpu/drm/ast/ast_mm.o
CC fs/fs-writeback.o
CC net/ipv6/addrconf_core.o
LD [M] net/bluetooth/bluetooth.o
CC [M] drivers/net/phy/bcm-phy-lib.o
CC drivers/base/platform-msi.o
CC fs/pnode.o
CC fs/splice.o
CC fs/sync.o
CC drivers/base/physical_location.o
CC fs/btrfs/extent_io.o
LD [M] drivers/gpu/drm/vgem/vgem.o
CC [M] fs/cifs/smb2file.o
CC [M] drivers/gpu/drm/ast/ast_mode.o
CC [M] drivers/gpu/drm/xe/tests/xe_migrate_test.o
AR drivers/power/reset/built-in.a
CC kernel/compat.o
CC drivers/power/supply/power_supply_core.o
AR drivers/net/ethernet/ezchip/built-in.a
LD [M] drivers/ptp/ptp.o
CC drivers/hwmon/hwmon.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_object.o
LD [M] drivers/ptp/ptp_kvm.o
CC drivers/acpi/acpica/psargs.o
CC drivers/power/supply/power_supply_sysfs.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_gart.o
CC drivers/power/supply/power_supply_leds.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_encoders.o
CC [M] drivers/gpu/drm/nouveau/nvif/client.o
CC fs/btrfs/volumes.o
AR drivers/input/built-in.a
CC fs/utimes.o
CC fs/d_path.o
CC drivers/scsi/sg.o
CC drivers/acpi/acpica/psloop.o
CC [M] drivers/gpu/drm/xe/tests/xe_pci_test.o
AR drivers/usb/gadget/built-in.a
CC fs/btrfs/async-thread.o
CC [M] fs/cifs/cifsacl.o
CC drivers/base/trace.o
CC fs/btrfs/ioctl.o
CC drivers/acpi/acpica/psobject.o
CC net/ipv6/exthdrs_core.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_display.o
CC [M] drivers/net/phy/broadcom.o
CC [M] drivers/i2c/i2c-smbus.o
CC fs/stack.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.o
CC drivers/acpi/acpica/psopcode.o
AR drivers/usb/host/built-in.a
CC drivers/power/supply/power_supply_hwmon.o
CC [M] drivers/net/usb/mcs7830.o
CC [M] drivers/gpu/drm/i915/i915_ioctl.o
CC [M] fs/cifs/fs_context.o
CC drivers/usb/core/notify.o
AR drivers/net/ethernet/fungible/built-in.a
AR drivers/net/ethernet/huawei/built-in.a
CC [M] drivers/net/phy/lxt.o
CC kernel/utsname.o
CC [M] drivers/hwmon/acpi_power_meter.o
CC drivers/acpi/acpica/psopinfo.o
CC drivers/usb/core/generic.o
CC net/ipv4/tcp_diag.o
CC fs/fs_struct.o
CC [M] drivers/gpu/drm/nouveau/nvif/conn.o
CC [M] drivers/i2c/i2c-mux.o
CC [M] drivers/gpu/drm/xe/tests/xe_rtp_test.o
CC fs/btrfs/locking.o
CC [M] drivers/net/phy/realtek.o
CC [M] drivers/net/phy/smsc.o
CC [M] drivers/gpu/drm/xe/tests/xe_wa_test.o
CC fs/statfs.o
AR drivers/base/built-in.a
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC [M] drivers/net/veth.o
AR drivers/power/supply/built-in.a
AR drivers/power/built-in.a
CC drivers/gpu/drm/drm_mipi_dsi.o
CC [M] drivers/net/usb/usbnet.o
CC [M] drivers/net/usb/cdc_ncm.o
CC [M] drivers/net/ethernet/intel/e1000/e1000_main.o
AR drivers/net/ethernet/i825xx/built-in.a
CC drivers/acpi/acpica/psparse.o
CC [M] drivers/net/usb/r8153_ecm.o
CC kernel/user_namespace.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_gem.o
CC [M] drivers/net/ethernet/intel/e1000/e1000_hw.o
CC drivers/usb/core/quirks.o
CC [M] drivers/gpu/drm/ast/ast_post.o
CC [M] drivers/gpu/drm/ast/ast_dp501.o
CC [M] fs/cifs/dns_resolve.o
CC net/ipv6/ip6_checksum.o
AR drivers/thermal/broadcom/built-in.a
AR drivers/thermal/samsung/built-in.a
CC drivers/thermal/intel/intel_tcc.o
CC drivers/watchdog/watchdog_core.o
CC [M] drivers/gpu/drm/i915/i915_irq.o
CC drivers/watchdog/watchdog_dev.o
CC [M] drivers/gpu/drm/i915/i915_mitigations.o
CC fs/btrfs/orphan.o
ASN.1 fs/cifs/cifs_spnego_negtokeninit.asn1.[ch]
CC [M] drivers/hwmon/coretemp.o
CC [M] drivers/md/persistent-data/dm-array.o
AR drivers/thermal/st/built-in.a
CC drivers/thermal/intel/therm_throt.o
AR drivers/thermal/qcom/built-in.a
AR drivers/thermal/tegra/built-in.a
AR drivers/thermal/mediatek/built-in.a
CC drivers/thermal/thermal_core.o
CC [M] drivers/md/persistent-data/dm-bitset.o
CC [M] drivers/gpu/drm/nouveau/nvif/device.o
CC fs/fs_pin.o
CC [M] drivers/gpu/drm/i915/i915_module.o
CC drivers/acpi/acpica/psscope.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
AR drivers/i2c/built-in.a
CC fs/btrfs/export.o
CC [M] fs/cifs/smb1ops.o
CC drivers/thermal/thermal_sysfs.o
CC net/ipv6/ip6_icmp.o
CC net/ipv4/udp_diag.o
CC drivers/scsi/scsi_sysfs.o
LD [M] drivers/net/phy/aquantia.o
CC drivers/usb/core/devices.o
CC [M] drivers/gpu/drm/i915/i915_params.o
AR drivers/net/phy/built-in.a
CC [M] drivers/md/persistent-data/dm-block-manager.o
CC lib/win_minmax.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC mm/hugetlb_vmemmap.o
CC drivers/thermal/thermal_trip.o
CC drivers/acpi/acpica/pstree.o
CC fs/btrfs/tree-log.o
CC fs/btrfs/free-space-cache.o
CC kernel/pid_namespace.o
CC [M] fs/cifs/cifssmb.o
CC [M] fs/cifs/cifs_spnego_negtokeninit.asn1.o
CC [M] fs/cifs/asn1.o
CC drivers/watchdog/softdog.o
CC drivers/usb/core/phy.o
CC [M] drivers/thermal/intel/intel_menlow.o
CC lib/xarray.o
CC drivers/md/md.o
CC [M] drivers/gpu/drm/nouveau/nvif/disp.o
AR drivers/hwmon/built-in.a
CC drivers/opp/core.o
CC drivers/opp/cpu.o
CC drivers/opp/debugfs.o
CC mm/sparse.o
CC mm/sparse-vmemmap.o
CC lib/lockref.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ring.o
CC drivers/cpufreq/cpufreq.o
CC drivers/acpi/acpica/psutils.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_cs.o
CC drivers/cpufreq/freq_table.o
CC [M] drivers/gpu/drm/ast/ast_dp.o
CC [M] drivers/md/persistent-data/dm-space-map-common.o
CC mm/mmu_notifier.o
CC mm/ksm.o
CC [M] drivers/gpu/drm/nouveau/nvif/driver.o
CC [M] drivers/gpu/drm/i915/i915_pci.o
AR drivers/watchdog/built-in.a
CC net/ipv6/output_core.o
CC [M] drivers/gpu/drm/nouveau/nvif/event.o
CC drivers/cpuidle/governors/menu.o
CC [M] drivers/gpu/drm/i915/i915_scatterlist.o
CC net/ipv4/tcp_cubic.o
CC drivers/cpuidle/cpuidle.o
CC drivers/mmc/core/core.o
CC drivers/acpi/acpica/pswalk.o
CC drivers/mmc/core/bus.o
CC drivers/acpi/acpica/psxface.o
LD [M] drivers/net/usb/asix.o
CC drivers/mmc/host/sdhci.o
CC drivers/mmc/host/sdhci-pci-core.o
UPD kernel/config_data
CC kernel/stop_machine.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/mmc/host/sdhci-pci-o2micro.o
CC drivers/usb/core/port.o
AR drivers/thermal/intel/built-in.a
CC drivers/thermal/thermal_helpers.o
CC drivers/mmc/host/sdhci-pci-arasan.o
CC drivers/mmc/core/host.o
AR drivers/scsi/built-in.a
CC lib/bcd.o
AR drivers/ufs/built-in.a
AR drivers/leds/trigger/built-in.a
CC [M] drivers/leds/trigger/ledtrig-audio.o
AR drivers/leds/blink/built-in.a
CC lib/sort.o
CC drivers/acpi/acpica/rsaddr.o
CC drivers/cpuidle/governors/haltpoll.o
LD [M] drivers/gpu/drm/ast/ast.o
AR drivers/firmware/arm_ffa/built-in.a
CC [M] drivers/gpu/drm/drm_aperture.o
CC fs/btrfs/zlib.o
AR drivers/firmware/arm_scmi/built-in.a
AR drivers/crypto/stm32/built-in.a
AR drivers/firmware/broadcom/built-in.a
AR drivers/crypto/xilinx/built-in.a
CC drivers/acpi/acpica/rscalc.o
CC drivers/acpi/acpica/rscreate.o
AR drivers/crypto/hisilicon/built-in.a
AR drivers/firmware/cirrus/built-in.a
AR drivers/firmware/meson/built-in.a
CC [M] drivers/md/persistent-data/dm-space-map-disk.o
AR drivers/crypto/keembay/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvif/fifo.o
CC drivers/cpufreq/cpufreq_ondemand.o
AR drivers/crypto/built-in.a
CC fs/btrfs/lzo.o
CC [M] drivers/md/persistent-data/dm-space-map-metadata.o
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC fs/btrfs/zstd.o
CC drivers/firmware/efi/efi.o
CC drivers/acpi/acpica/rsdumpinfo.o
CC [M] drivers/md/persistent-data/dm-transaction-manager.o
CC fs/btrfs/compression.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC [M] drivers/gpu/drm/nouveau/nvif/head.o
CC drivers/thermal/thermal_hwmon.o
AR drivers/leds/simple/built-in.a
CC drivers/leds/led-core.o
CC drivers/usb/core/hcd-pci.o
CC [M] drivers/gpu/drm/i915/i915_suspend.o
CC fs/btrfs/delayed-ref.o
CC net/ipv6/protocol.o
CC kernel/kprobes.o
AR drivers/opp/built-in.a
CC drivers/usb/core/usb-acpi.o
AR drivers/firmware/imx/built-in.a
AR drivers/firmware/psci/built-in.a
CC [M] drivers/gpu/drm/drm_atomic.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC drivers/mmc/host/sdhci-pci-dwc-mshc.o
CC drivers/acpi/acpica/rsinfo.o
CC lib/parser.o
CC drivers/acpi/acpica/rsio.o
AR drivers/firmware/smccc/built-in.a
AR drivers/firmware/tegra/built-in.a
AR drivers/firmware/xilinx/built-in.a
CC kernel/hung_task.o
CC drivers/acpi/acpica/rsirq.o
CC [M] drivers/gpu/drm/i915/i915_switcheroo.o
CC net/ipv4/xfrm4_policy.o
CC [M] drivers/gpu/drm/xe/xe_device.o
CC drivers/mmc/core/mmc.o
CC drivers/clocksource/acpi_pm.o
CC drivers/mmc/core/mmc_ops.o
AR drivers/cpuidle/governors/built-in.a
CC drivers/cpuidle/driver.o
CC drivers/thermal/gov_fair_share.o
CC [M] drivers/md/persistent-data/dm-btree.o
CC kernel/watchdog.o
CC kernel/watchdog_hld.o
CC drivers/cpufreq/cpufreq_governor.o
CC drivers/firmware/efi/libstub/gop.o
CC drivers/leds/led-class.o
CC drivers/firmware/efi/libstub/secureboot.o
CC lib/debug_locks.o
CC drivers/firmware/efi/libstub/tpm.o
CC kernel/seccomp.o
CC drivers/acpi/acpica/rslist.o
CC [M] drivers/gpu/drm/nouveau/nvif/mem.o
CC fs/btrfs/relocation.o
CC drivers/thermal/gov_step_wise.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_bios.o
CC [M] drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC drivers/hid/usbhid/hid-core.o
CC drivers/hid/hid-core.o
CC lib/random32.o
CC drivers/hid/hid-input.o
CC drivers/hid/hid-quirks.o
AR drivers/usb/core/built-in.a
AR drivers/usb/built-in.a
CC drivers/hid/hid-debug.o
CC drivers/cpuidle/governor.o
CC drivers/mmc/core/sd.o
AR drivers/staging/media/built-in.a
AR drivers/staging/built-in.a
CC kernel/relay.o
CC [M] drivers/gpu/drm/i915/i915_sysfs.o
CC drivers/hid/usbhid/hiddev.o
CC net/ipv6/ip6_offload.o
CC drivers/clocksource/i8253.o
CC [M] drivers/gpu/drm/i915/i915_utils.o
CC drivers/acpi/acpica/rsmemory.o
CC drivers/firmware/efi/libstub/file.o
CC drivers/cpuidle/sysfs.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC drivers/leds/led-triggers.o
CC drivers/thermal/gov_user_space.o
CC [M] drivers/gpu/drm/i915/intel_clock_gating.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC lib/bust_spinlocks.o
CC mm/slub.o
CC drivers/firmware/efi/libstub/mem.o
CC lib/kasprintf.o
CC drivers/mmc/host/sdhci-pci-gli.o
CC drivers/hid/hidraw.o
CC kernel/utsname_sysctl.o
CC fs/btrfs/delayed-inode.o
AR drivers/platform/x86/amd/built-in.a
CC net/ipv4/xfrm4_state.o
CC drivers/acpi/processor_core.o
AR drivers/platform/surface/built-in.a
CC drivers/acpi/processor_pdc.o
CC drivers/platform/x86/intel/pmc/core.o
CC kernel/delayacct.o
AR drivers/clocksource/built-in.a
CC drivers/cpuidle/poll_state.o
CC [M] drivers/gpu/drm/nouveau/nvif/mmu.o
CC drivers/acpi/acpica/rsmisc.o
CC [M] drivers/platform/x86/intel/pmt/class.o
CC drivers/platform/x86/intel/turbo_max_3.o
CC fs/btrfs/scrub.o
CC kernel/taskstats.o
CC kernel/tsacct.o
CC drivers/cpufreq/acpi-cpufreq.o
AR drivers/thermal/built-in.a
CC [M] drivers/platform/x86/intel/pmt/telemetry.o
CC drivers/hid/hid-generic.o
CC drivers/firmware/efi/libstub/random.o
CC [M] drivers/md/persistent-data/dm-btree-remove.o
CC lib/bitmap.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC [M] drivers/gpu/drm/xe/xe_engine.o
CC [M] drivers/gpu/drm/i915/intel_device_info.o
CC drivers/firmware/efi/libstub/randomalloc.o
CC [M] drivers/md/persistent-data/dm-btree-spine.o
CC drivers/hid/hid-a4tech.o
CC fs/btrfs/backref.o
CC fs/btrfs/ulist.o
AR drivers/leds/built-in.a
CC drivers/hid/hid-apple.o
CC [M] drivers/gpu/drm/i915/intel_memory_region.o
CC drivers/mailbox/mailbox.o
CC drivers/mailbox/pcc.o
CC [M] drivers/gpu/drm/i915/intel_pcode.o
CC drivers/devfreq/devfreq.o
CC drivers/firmware/efi/libstub/pci.o
CC drivers/acpi/acpica/rsserial.o
CC drivers/acpi/ec.o
CC drivers/mmc/core/sd_ops.o
CC drivers/firmware/efi/vars.o
CC drivers/firmware/efi/reboot.o
CC [M] drivers/devfreq/governor_simpleondemand.o
CC drivers/mmc/core/sdio.o
AR drivers/cpuidle/built-in.a
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC [M] drivers/gpu/drm/nouveau/nvif/outp.o
CC [M] drivers/platform/x86/intel/pmt/crashlog.o
CC net/ipv4/xfrm4_input.o
CC drivers/firmware/efi/libstub/skip_spaces.o
AR drivers/hid/usbhid/built-in.a
CC net/ipv6/tcpv6_offload.o
CC fs/btrfs/qgroup.o
CC drivers/powercap/powercap_sys.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/acpi/dock.o
LD [M] fs/cifs/cifs.o
CC drivers/powercap/intel_rapl_common.o
CC drivers/mmc/host/sdhci-acpi.o
CC drivers/powercap/intel_rapl_msr.o
CC [M] drivers/net/ethernet/intel/e1000/e1000_param.o
CC drivers/md/md-bitmap.o
CC drivers/acpi/acpica/rsutils.o
LD [M] drivers/platform/x86/intel/pmt/pmt_class.o
CC [M] drivers/gpu/drm/i915/intel_region_ttm.o
CC drivers/hid/hid-belkin.o
CC kernel/tracepoint.o
CC drivers/cpufreq/intel_pstate.o
CC kernel/latencytop.o
LD [M] drivers/platform/x86/intel/pmt/pmt_telemetry.o
CC drivers/platform/x86/intel/pmc/spt.o
CC [M] drivers/devfreq/governor_performance.o
LD [M] drivers/md/persistent-data/dm-persistent-data.o
CC fs/btrfs/send.o
AR drivers/mailbox/built-in.a
CC drivers/acpi/pci_root.o
CC drivers/acpi/pci_link.o
CC fs/nsfs.o
CC [M] drivers/gpu/drm/amd/amdgpu/atombios_dp.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/firmware/efi/libstub/alignedmem.o
AR drivers/perf/built-in.a
CC lib/scatterlist.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_trace_points.o
CC lib/list_sort.o
CC [M] drivers/gpu/drm/drm_atomic_uapi.o
LD [M] drivers/platform/x86/intel/pmt/pmt_crashlog.o
CC [M] drivers/platform/x86/intel/vsec.o
CC drivers/mmc/core/sdio_ops.o
CC lib/uuid.o
CC [M] drivers/gpu/drm/i915/intel_runtime_pm.o
CC lib/iov_iter.o
CC drivers/acpi/pci_irq.o
CC drivers/acpi/acpica/rsxface.o
CC [M] drivers/gpu/drm/drm_auth.o
CC drivers/ras/ras.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC kernel/irq_work.o
CC drivers/platform/x86/intel/pmc/cnp.o
CC drivers/ras/debugfs.o
CC [M] drivers/gpu/drm/nouveau/nvif/timer.o
CC [M] drivers/gpu/drm/nouveau/nvif/vmm.o
CC drivers/hid/hid-cherry.o
CC [M] drivers/gpu/drm/nouveau/nvif/user.o
CC net/ipv4/xfrm4_output.o
CC drivers/acpi/acpi_lpss.o
CC drivers/acpi/acpi_apd.o
CC net/ipv4/xfrm4_protocol.o
CC drivers/acpi/acpica/tbdata.o
CC fs/fs_types.o
CC drivers/firmware/efi/libstub/relocate.o
CC drivers/mmc/host/cqhci-core.o
CC net/ipv6/exthdrs_offload.o
CC drivers/acpi/acpica/tbfadt.o
CC drivers/hid/hid-chicony.o
CC [M] net/ipv4/ip_tunnel.o
AR drivers/powercap/built-in.a
CC kernel/static_call.o
CC drivers/mmc/core/sdio_bus.o
CC fs/fs_context.o
CC drivers/acpi/acpi_platform.o
LD [M] drivers/net/ethernet/intel/e1000/e1000.o
CC drivers/platform/x86/intel/pmc/icl.o
CC fs/fs_parser.o
AR drivers/devfreq/built-in.a
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC [M] drivers/gpu/drm/amd/amdgpu/atombios_encoders.o
AR drivers/hwtracing/intel_th/built-in.a
CC drivers/acpi/acpi_pnp.o
CC [M] drivers/net/ethernet/intel/e1000e/82571.o
CC kernel/static_call_inline.o
CC drivers/acpi/power.o
CC [M] drivers/net/ethernet/intel/e1000e/ich8lan.o
CC [M] drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_sa.o
CC kernel/user-return-notifier.o
CC mm/migrate.o
CC [M] drivers/gpu/drm/drm_blend.o
CC [M] drivers/net/ethernet/intel/e1000e/mac.o
CC [M] drivers/gpu/drm/amd/amdgpu/atombios_i2c.o
CC [M] drivers/gpu/drm/nouveau/nvif/userc361.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
CC [M] drivers/gpu/drm/i915/intel_sbi.o
CC mm/migrate_device.o
CC drivers/firmware/efi/libstub/printk.o
CC lib/clz_ctz.o
CC drivers/acpi/acpica/tbfind.o
CC kernel/padata.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/client.o
AR drivers/ras/built-in.a
CC mm/huge_memory.o
CC drivers/hid/hid-cypress.o
CC drivers/platform/x86/p2sb.o
CC drivers/acpi/event.o
CC drivers/platform/x86/intel/pmc/tgl.o
CC drivers/acpi/evged.o
CC [M] drivers/gpu/drm/i915/intel_step.o
CC drivers/hid/hid-ezkey.o
CC net/ipv6/inet6_hashtables.o
CC drivers/android/binderfs.o
CC fs/fsopen.o
CC drivers/nvmem/core.o
CC drivers/hid/hid-kensington.o
CC drivers/mmc/core/sdio_cis.o
CC drivers/acpi/sysfs.o
CC drivers/acpi/acpica/tbinstal.o
CC [M] drivers/mtd/chips/chipreg.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC fs/init.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
AR drivers/cpufreq/built-in.a
CC net/ipv6/mcast_snoop.o
CC [M] net/ipv6/ip6_udp_tunnel.o
CC kernel/jump_label.o
CC drivers/android/binder.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/platform/x86/intel/pmc/adl.o
CC drivers/md/md-autodetect.o
CC drivers/acpi/property.o
CC [M] drivers/mmc/host/sdhci-pltfm.o
CC drivers/android/binder_alloc.o
CC fs/btrfs/dev-replace.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/engine.o
CC drivers/platform/x86/intel/pmc/mtl.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/enum.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
CC drivers/acpi/acpica/tbprint.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC drivers/acpi/acpica/tbutils.o
CC drivers/acpi/acpica/tbxface.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC fs/btrfs/raid56.o
CC mm/khugepaged.o
CC mm/page_counter.o
CC mm/memcontrol.o
CC drivers/hid/hid-lg.o
CC [M] drivers/mtd/mtdcore.o
CC drivers/platform/x86/intel/pmc/pltdrv.o
CC [M] net/ipv4/udp_tunnel_core.o
CC drivers/mmc/core/sdio_io.o
CC lib/bsearch.o
CC [M] drivers/gpu/drm/i915/intel_uncore.o
CC [M] drivers/net/ethernet/intel/e1000e/manage.o
CC fs/kernel_read_file.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC drivers/md/dm-uevent.o
CC kernel/context_tracking.o
CC drivers/mmc/core/sdio_irq.o
CC mm/vmpressure.o
CC drivers/md/dm.o
CC mm/swap_cgroup.o
CC [M] drivers/platform/x86/intel/rst.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.o
CC drivers/acpi/acpica/tbxfload.o
CC fs/btrfs/uuid-tree.o
CC [M] drivers/net/ethernet/intel/e1000e/nvm.o
AR drivers/nvmem/built-in.a
CC [M] drivers/gpu/drm/i915/intel_wakeref.o
LD [M] drivers/platform/x86/intel/intel_vsec.o
AR drivers/mmc/host/built-in.a
CC drivers/md/dm-table.o
CC drivers/acpi/acpi_cmos_rtc.o
CC lib/find_bit.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC drivers/firmware/dmi_scan.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
CC drivers/firmware/dmi-sysfs.o
AR drivers/platform/x86/intel/pmc/built-in.a
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vm.o
CC drivers/acpi/acpica/tbxfroot.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/event.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/firmware.o
AR drivers/platform/x86/intel/built-in.a
CC drivers/acpi/x86/apple.o
CC [M] drivers/net/ethernet/intel/e1000e/phy.o
AR net/ipv6/built-in.a
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC drivers/platform/x86/pmc_atom.o
CC drivers/firmware/efi/memattr.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ib.o
STUBCPY drivers/firmware/efi/libstub/file.stub.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_pll.o
CC lib/llist.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
CC [M] drivers/gpu/drm/xe/xe_guc.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
LD [M] drivers/platform/x86/intel/intel-rst.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
CC drivers/acpi/acpica/utaddress.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
CC drivers/firmware/dmi-id.o
CC [M] drivers/platform/x86/wmi.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
CC kernel/iomem.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
CC lib/memweight.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
AR drivers/firmware/efi/libstub/lib.a
CC drivers/firmware/efi/tpm.o
CC drivers/md/dm-target.o
CC [M] drivers/uio/uio.o
CC drivers/mmc/core/slot-gpio.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.o
CC kernel/rseq.o
CC lib/kfifo.o
CC drivers/md/dm-linear.o
CC [M] drivers/platform/x86/wmi-bmof.o
CC [M] drivers/gpu/drm/drm_bridge.o
CC [M] drivers/gpu/drm/drm_cache.o
CC drivers/hid/hid-lg-g15.o
CC [M] net/ipv4/udp_tunnel_nic.o
CC [M] drivers/vfio/pci/vfio_pci_core.o
CC [M] drivers/pps/pps.o
CC [M] drivers/pps/kapi.o
CC drivers/acpi/acpica/utalloc.o
CC [M] drivers/vfio/pci/vfio_pci_intrs.o
CC drivers/hid/hid-microsoft.o
CC [M] drivers/vfio/vfio_main.o
CC [M] drivers/platform/x86/mxm-wmi.o
CC [M] drivers/vfio/pci/vfio_pci_rdwr.o
CC drivers/hid/hid-monterey.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/gpuobj.o
CC [M] drivers/vfio/group.o
CC fs/btrfs/props.o
CC [M] drivers/vfio/iova_bitmap.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC [M] drivers/vfio/pci/vfio_pci_config.o
CC [M] drivers/pps/sysfs.o
AR net/ipv4/built-in.a
CC fs/btrfs/free-space-tree.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/intr.o
CC drivers/firmware/efi/memmap.o
CC drivers/mmc/core/regulator.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.o
CC [M] drivers/mtd/mtdsuper.o
GZIP kernel/config_data.gz
CC drivers/acpi/acpica/utascii.o
CC [M] drivers/vfio/container.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/ioctl.o
CC [M] drivers/mtd/mtdconcat.o
CC lib/percpu-refcount.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.o
CC fs/btrfs/tree-checker.o
CC drivers/firmware/memmap.o
CC [M] drivers/platform/x86/intel_ips.o
CC drivers/md/dm-stripe.o
CC drivers/md/dm-ioctl.o
CC kernel/configs.o
CC drivers/acpi/acpica/utbuffer.o
CC lib/rhashtable.o
LD [M] drivers/pps/pps_core.o
CC drivers/md/dm-io.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC [M] drivers/vfio/virqfd.o
CC [M] drivers/vfio/vfio_iommu_type1.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/memory.o
CC [M] drivers/gpu/drm/drm_client.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/mm.o
CC [M] drivers/gpu/drm/drm_client_modeset.o
CC [M] drivers/vfio/pci/vfio_pci.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_sync.o
AR drivers/hid/built-in.a
CC fs/mnt_idmapping.o
CC fs/remap_range.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/object.o
CC fs/buffer.o
CC drivers/mmc/core/debugfs.o
CC drivers/firmware/efi/esrt.o
CC [M] drivers/mtd/mtdpart.o
CC drivers/acpi/acpica/utcksum.o
AR kernel/built-in.a
CC drivers/acpi/acpica/utcopy.o
CC [M] drivers/net/ethernet/intel/e1000e/param.o
CC [M] drivers/mtd/mtdchar.o
CC [M] drivers/gpu/drm/drm_color_mgmt.o
CC mm/hugetlb_cgroup.o
CC lib/base64.o
CC drivers/acpi/x86/utils.o
CC [M] drivers/net/ethernet/intel/igb/igb_main.o
CC [M] drivers/net/ethernet/intel/igc/igc_main.o
CC lib/once.o
CC [M] drivers/net/ethernet/intel/igbvf/vf.o
LD [M] net/ipv4/udp_tunnel.o
AR net/built-in.a
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_main.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_common.o
LD [M] drivers/vfio/vfio.o
AR drivers/net/ethernet/microsoft/built-in.a
CC drivers/md/dm-kcopyd.o
CC [M] drivers/net/ethernet/intel/ixgbevf/vf.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/oproxy.o
CC [M] drivers/net/ethernet/intel/ixgbevf/mbx.o
CC [M] drivers/bluetooth/btusb.o
CC fs/mpage.o
CC [M] drivers/bluetooth/btintel.o
CC drivers/acpi/acpica/utexcep.o
CC [M] drivers/dca/dca-core.o
CC [M] drivers/ssb/main.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.o
LD [M] drivers/vfio/pci/vfio-pci-core.o
LD [M] drivers/vfio/pci/vfio-pci.o
CC [M] drivers/ssb/scan.o
CC [M] drivers/gpu/drm/i915/vlv_sideband.o
AR drivers/platform/x86/built-in.a
AR drivers/platform/built-in.a
CC [M] drivers/net/ethernet/intel/ixgbevf/ethtool.o
CC [M] drivers/ssb/sprom.o
CC [M] drivers/ssb/pci.o
CC drivers/mmc/core/block.o
CC [M] drivers/ssb/pcihost_wrapper.o
CC drivers/mmc/core/queue.o
CC drivers/firmware/efi/efi-pstore.o
CC [M] drivers/dca/dca-sysfs.o
CC drivers/acpi/x86/s2idle.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/option.o
CC lib/refcount.o
CC [M] drivers/gpu/drm/drm_connector.o
AR drivers/net/ethernet/litex/built-in.a
CC fs/proc_namespace.o
CC [M] drivers/net/ethernet/intel/igb/igb_ethtool.o
CC [M] drivers/net/ethernet/intel/igb/e1000_82575.o
CC drivers/acpi/acpica/utdebug.o
CC [M] drivers/bluetooth/btbcm.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.o
CC lib/usercopy.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/ramht.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.o
CC [M] drivers/ssb/driver_chipcommon.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
CC [M] drivers/gpu/drm/drm_crtc.o
CC [M] drivers/net/ethernet/intel/igbvf/mbx.o
CC [M] drivers/net/ethernet/intel/e1000e/ethtool.o
CC fs/btrfs/space-info.o
CC fs/btrfs/block-rsv.o
CC drivers/acpi/acpica/utdecode.o
LD [M] drivers/mtd/mtd.o
CC fs/btrfs/delalloc-space.o
CC [M] drivers/ssb/driver_chipcommon_pmu.o
CC [M] drivers/gpu/drm/drm_displayid.o
CC lib/errseq.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
CC drivers/firmware/efi/cper.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC [M] drivers/vhost/net.o
LD [M] drivers/dca/dca.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC [M] drivers/vhost/vhost.o
CC lib/bucket_locks.o
CC mm/kmemleak.o
CC drivers/md/dm-sysfs.o
CC drivers/acpi/acpica/utdelete.o
CC fs/direct-io.o
CC [M] drivers/net/ethernet/intel/igb/e1000_mac.o
CC [M] drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/subdev.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.o
CC drivers/acpi/debugfs.o
CC lib/generic-radix-tree.o
CC [M] drivers/gpu/drm/i915/vlv_suspend.o
CC [M] drivers/gpu/drm/nouveau/nvkm/core/uevent.o
CC fs/eventpoll.o
CC fs/anon_inodes.o
CC [M] drivers/ssb/driver_pcicore.o
CC mm/page_isolation.o
CC [M] drivers/net/ethernet/intel/igbvf/ethtool.o
CC [M] drivers/net/ethernet/intel/e1000e/netdev.o
CC lib/string_helpers.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_virt.o
CC lib/hexdump.o
CC drivers/acpi/acpica/uterror.o
AR drivers/android/built-in.a
CC lib/kstrtox.o
CC [M] drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/firmware/efi/cper_cxl.o
CC [M] drivers/bluetooth/btrtl.o
CC [M] drivers/net/ethernet/intel/ixgb/ixgb_main.o
AR drivers/net/ethernet/intel/built-in.a
CC [M] drivers/gpu/drm/drm_drv.o
CC [M] drivers/net/ethernet/intel/e100.o
CC [M] drivers/net/ethernet/intel/ixgbevf/ipsec.o
CC drivers/md/dm-stats.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vf_error.o
CC lib/debug_info.o
CC fs/btrfs/block-group.o
CC drivers/acpi/acpica/uteval.o
CC [M] drivers/vhost/iotlb.o
CC mm/early_ioremap.o
AR drivers/mmc/core/built-in.a
CC [M] drivers/net/ethernet/intel/ixgb/ixgb_hw.o
AR drivers/mmc/built-in.a
CC [M] drivers/gpu/drm/i915/soc/intel_dram.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_82599.o
CC [M] drivers/net/ethernet/intel/igc/igc_mac.o
CC fs/btrfs/discard.o
CC drivers/md/dm-rq.o
CC drivers/firmware/efi/runtime-wrappers.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_82598.o
LD [M] drivers/ssb/ssb.o
CC [M] drivers/gpu/drm/nouveau/nvkm/nvfw/fw.o
CC [M] drivers/net/ethernet/intel/igbvf/netdev.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_phy.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.o
CC drivers/acpi/acpi_lpat.o
CC mm/cma.o
CC lib/iomap.o
CC drivers/acpi/acpi_lpit.o
CC drivers/acpi/acpica/utglobal.o
CC [M] drivers/net/ethernet/intel/igb/e1000_nvm.o
CC [M] drivers/net/ethernet/intel/igb/e1000_phy.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC [M] drivers/gpu/drm/drm_dumb_buffers.o
CC fs/btrfs/reflink.o
CC [M] drivers/net/ethernet/intel/igc/igc_i225.o
CC [M] drivers/gpu/drm/drm_edid.o
CC [M] drivers/net/ethernet/intel/ixgb/ixgb_ee.o
CC [M] drivers/net/ethernet/intel/ixgb/ixgb_ethtool.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC [M] drivers/net/ethernet/intel/ixgb/ixgb_param.o
CC mm/secretmem.o
CC fs/signalfd.o
CC lib/pci_iomap.o
CC drivers/acpi/acpica/uthex.o
LD [M] drivers/vhost/vhost_net.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_sched.o
LD [M] drivers/vhost/vhost_iotlb.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.o
CC drivers/acpi/prmt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/nvfw/hs.o
CC [M] drivers/gpu/drm/nouveau/nvkm/nvfw/ls.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.o
CC [M] drivers/gpu/drm/drm_encoder.o
CC drivers/acpi/acpi_pcc.o
CC drivers/acpi/acpica/utids.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC drivers/md/dm-io-rewind.o
CC fs/btrfs/subpage.o
CC [M] drivers/gpu/drm/i915/soc/intel_gmch.o
CC drivers/firmware/efi/dev-path-parser.o
CC fs/btrfs/tree-mod-log.o
CC [M] drivers/gpu/drm/drm_file.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_x540.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_x550.o
CC [M] drivers/gpu/drm/i915/soc/intel_pch.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ids.o
CC [M] drivers/net/ethernet/intel/igc/igc_base.o
CC lib/iomap_copy.o
CC fs/btrfs/extent-io-tree.o
CC drivers/md/dm-builtin.o
CC [M] drivers/gpu/drm/i915/i915_memcpy.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.o
CC drivers/acpi/acpica/utinit.o
CC drivers/acpi/acpica/utlock.o
CC drivers/acpi/ac.o
CC drivers/acpi/acpica/utmath.o
CC [M] drivers/gpu/drm/nouveau/nvkm/nvfw/acr.o
CC lib/devres.o
CC mm/userfaultfd.o
CC [M] drivers/md/dm-bufio.o
CC mm/memremap.o
CC fs/btrfs/fs.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.o
CC drivers/acpi/button.o
CC [M] drivers/gpu/drm/i915/i915_mm.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC [M] drivers/gpu/drm/nouveau/nvkm/nvfw/flcn.o
CC drivers/acpi/fan_core.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/base.o
CC drivers/acpi/fan_attr.o
CC fs/timerfd.o
CC drivers/firmware/efi/apple-properties.o
CC fs/eventfd.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC [M] drivers/net/ethernet/intel/igc/igc_nvm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.o
CC drivers/acpi/acpica/utmisc.o
CC drivers/acpi/acpica/utmutex.o
CC [M] drivers/net/ethernet/intel/igb/e1000_mbx.o
CC [M] drivers/net/ethernet/intel/igc/igc_phy.o
CC mm/hmm.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.o
LD [M] drivers/net/ethernet/intel/ixgb/ixgb.o
CC drivers/acpi/processor_driver.o
CC [M] drivers/gpu/drm/i915/i915_sw_fence.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/fw.o
CC lib/check_signature.o
CC [M] drivers/md/dm-bio-prison-v1.o
AR drivers/net/ethernet/microchip/built-in.a
CC [M] drivers/net/ethernet/intel/igc/igc_diag.o
CC fs/btrfs/messages.o
AR drivers/net/ethernet/mscc/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/msgq.o
LD [M] drivers/net/ethernet/intel/igbvf/igbvf.o
CC lib/interval_tree.o
LD [M] drivers/net/ethernet/intel/ixgbevf/ixgbevf.o
CC drivers/firmware/efi/earlycon.o
CC drivers/acpi/acpica/utnonansi.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.o
CC drivers/acpi/processor_thermal.o
CC fs/btrfs/bio.o
CC [M] drivers/net/ethernet/intel/igc/igc_ethtool.o
CC [M] drivers/gpu/drm/i915/i915_sw_fence_work.o
CC lib/assoc_array.o
CC drivers/acpi/processor_idle.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.o
CC [M] drivers/gpu/drm/drm_fourcc.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_csa.o
CC fs/userfaultfd.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ras.o
CC [M] drivers/gpu/drm/i915/i915_syncmap.o
AR drivers/net/ethernet/neterion/built-in.a
CC fs/aio.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.o
AR drivers/net/ethernet/netronome/built-in.a
CC [M] drivers/gpu/drm/i915/i915_user_extensions.o
CC [M] drivers/gpu/drm/i915/i915_ioc32.o
CC [M] drivers/gpu/drm/drm_framebuffer.o
CC drivers/acpi/processor_throttling.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/v1.o
CC [M] drivers/gpu/drm/drm_gem.o
CC drivers/acpi/processor_perflib.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.o
CC drivers/acpi/acpica/utobject.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/gm200.o
CC [M] drivers/net/ethernet/intel/igb/e1000_i210.o
CC [M] drivers/net/ethernet/intel/igb/igb_ptp.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/gp102.o
CC drivers/acpi/container.o
CC [M] drivers/net/ethernet/intel/igc/igc_ptp.o
CC [M] drivers/net/ethernet/intel/igc/igc_dump.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.o
CC lib/list_debug.o
CC mm/memfd.o
CC [M] drivers/gpu/drm/i915/i915_debugfs.o
CC drivers/firmware/efi/cper-x86.o
CC [M] drivers/md/dm-bio-prison-v2.o
CC drivers/acpi/acpica/utosi.o
CC [M] drivers/gpu/drm/i915/i915_debugfs_params.o
CC drivers/acpi/acpica/utownerid.o
CC fs/btrfs/lru_cache.o
CC [M] drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_umc.o
AR drivers/net/ethernet/ni/built-in.a
CC [M] drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC [M] drivers/md/dm-crypt.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_lib.o
CC [M] drivers/gpu/drm/i915/i915_pmu.o
CC lib/debugobjects.o
CC [M] drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC drivers/acpi/thermal.o
CC mm/bootmem_info.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/ga100.o
CC drivers/acpi/acpica/utpredef.o
CC drivers/acpi/acpica/utresdecode.o
CC fs/btrfs/acl.o
CC drivers/acpi/acpica/utresrc.o
AR drivers/net/ethernet/packetengines/built-in.a
AR drivers/net/ethernet/realtek/built-in.a
CC [M] drivers/net/ethernet/realtek/8139cp.o
AR drivers/net/ethernet/renesas/built-in.a
AR drivers/net/ethernet/sfc/built-in.a
AR drivers/net/ethernet/smsc/built-in.a
CC [M] drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.o
AR drivers/net/ethernet/socionext/built-in.a
CC [M] drivers/net/ethernet/smsc/smsc9420.o
CC [M] drivers/net/ethernet/realtek/8139too.o
AR drivers/net/ethernet/vertexcom/built-in.a
CC drivers/acpi/acpi_memhotplug.o
CC [M] drivers/gpu/drm/nouveau/nvkm/falcon/ga102.o
CC [M] drivers/gpu/drm/drm_ioctl.o
AR drivers/firmware/efi/built-in.a
AR drivers/firmware/built-in.a
AR drivers/net/ethernet/wangxun/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.o
CC [M] drivers/net/ethernet/intel/igb/igb_hwmon.o
CC [M] drivers/gpu/drm/drm_lease.o
CC drivers/acpi/acpica/utstate.o
CC drivers/acpi/acpica/utstring.o
CC [M] drivers/gpu/drm/drm_managed.o
CC [M] drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.o
CC [M] drivers/net/ethernet/intel/igc/igc_tsn.o
CC drivers/acpi/acpica/utstrsuppt.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_rap.o
CC [M] drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC drivers/acpi/ioapic.o
CC [M] drivers/md/dm-thin.o
CC [M] drivers/net/ethernet/intel/igc/igc_xdp.o
CC drivers/acpi/battery.o
CC drivers/acpi/acpica/utstrtoul64.o
AR mm/built-in.a
LD [M] drivers/net/ethernet/intel/e1000e/e1000e.o
CC lib/bitrev.o
CC [M] drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC drivers/acpi/hed.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.o
CC [M] drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC lib/crc16.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_fw_attestation.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.o
CC drivers/acpi/bgrt.o
CC [M] drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC drivers/acpi/acpica/utxface.o
CC [M] drivers/gpu/drm/drm_mm.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC fs/locks.o
CC fs/binfmt_script.o
CC lib/crc-t10dif.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o
CC [M] drivers/net/ethernet/realtek/r8169_main.o
CC [M] drivers/gpu/drm/drm_mode_config.o
CC drivers/acpi/cppc_acpi.o
CC [M] drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC [M] drivers/md/dm-thin-metadata.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.o
AR fs/btrfs/built-in.a
CC drivers/acpi/acpica/utxfinit.o
CC [M] drivers/gpu/drm/drm_mode_object.o
CC [M] drivers/net/ethernet/realtek/r8169_firmware.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.o
CC drivers/acpi/spcr.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_mca.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.o
LD [M] drivers/net/ethernet/intel/igb/igb.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_lsdma.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.o
CC [M] drivers/net/ethernet/realtek/r8169_phy_config.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gv100.o
HOSTCC lib/gen_crc32table
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.o
CC [M] drivers/gpu/drm/i915/gt/intel_context.o
LD [M] drivers/net/ethernet/intel/igc/igc.o
CC lib/libcrc32c.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.o
CC drivers/acpi/acpica/utxferror.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.o
CC [M] drivers/gpu/drm/drm_modes.o
CC [M] drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC lib/xxhash.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.o
CC lib/genalloc.o
CC lib/percpu_counter.o
CC [M] drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC fs/binfmt_elf.o
CC drivers/acpi/acpi_pad.o
CC [M] drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC lib/fault-inject.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC [M] drivers/gpu/drm/amd/amdgpu/cik.o
CC [M] drivers/gpu/drm/amd/amdgpu/cik_ih.o
CC [M] drivers/gpu/drm/i915/gt/intel_engine_pm.o
CC drivers/acpi/acpica/utxfmutex.o
CC lib/syscall.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.o
CC [M] drivers/gpu/drm/drm_modeset_lock.o
AR drivers/net/ethernet/xilinx/built-in.a
CC [M] drivers/gpu/drm/drm_plane.o
AR drivers/net/ethernet/synopsys/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.o
AR drivers/net/ethernet/pensando/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.o
CC lib/dynamic_debug.o
CC [M] drivers/gpu/drm/i915/gt/intel_engine_user.o
CC [M] drivers/gpu/drm/amd/amdgpu/dce_v8_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v7_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.o
CC [M] drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC [M] drivers/gpu/drm/xe/xe_module.o
CC [M] drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o
CC [M] drivers/gpu/drm/drm_prime.o
LD [M] drivers/md/dm-bio-prison.o
CC lib/errname.o
CC fs/compat_binfmt_elf.o
AR drivers/md/built-in.a
CC fs/mbcache.o
AR drivers/acpi/acpica/built-in.a
CC [M] drivers/gpu/drm/i915/gt/intel_ggtt.o
CC fs/posix_acl.o
CC [M] drivers/gpu/drm/amd/amdgpu/cik_sdma.o
CC fs/coredump.o
CC lib/nlattr.o
CC fs/drop_caches.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.o
CC [M] drivers/gpu/drm/drm_print.o
CC [M] drivers/acpi/acpi_video.o
CC [M] drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC [M] drivers/acpi/video_detect.o
CC [M] drivers/gpu/drm/amd/amdgpu/uvd_v4_2.o
CC [M] drivers/gpu/drm/amd/amdgpu/vce_v2_0.o
CC lib/checksum.o
CC [M] drivers/gpu/drm/amd/amdgpu/si.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt.o
CC [M] drivers/gpu/drm/drm_property.o
LD [M] drivers/md/dm-thin-pool.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC [M] drivers/gpu/drm/drm_syncobj.o
CC lib/cpu_rmap.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
CC fs/fhandle.o
CC lib/dynamic_queue_limits.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.o
CC lib/glob.o
CC [M] drivers/gpu/drm/drm_sysfs.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC lib/strncpy_from_user.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.o
CC [M] drivers/gpu/drm/drm_trace_points.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC lib/strnlen_user.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v6_0.o
CC lib/net_utils.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC [M] drivers/gpu/drm/amd/amdgpu/si_ih.o
CC [M] drivers/gpu/drm/amd/amdgpu/si_dma.o
CC [M] drivers/gpu/drm/drm_vblank.o
CC lib/sg_pool.o
CC lib/stackdepot.o
LD [M] drivers/net/ethernet/intel/ixgbe/ixgbe.o
CC [M] drivers/gpu/drm/amd/amdgpu/dce_v6_0.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC lib/ucs2_string.o
AR drivers/acpi/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.o
LD [M] drivers/net/ethernet/realtek/r8169.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC [M] drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC [M] drivers/gpu/drm/i915/gt/intel_gtt.o
CC [M] drivers/gpu/drm/drm_vblank_work.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC [M] drivers/gpu/drm/i915/gt/intel_llc.o
AR fs/built-in.a
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC [M] drivers/gpu/drm/i915/gt/intel_lrc.o
CC [M] drivers/gpu/drm/i915/gt/intel_migrate.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
AR drivers/net/ethernet/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/bit.o
LD [M] drivers/acpi/video.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC [M] drivers/gpu/drm/drm_vma_manager.o
CC lib/sbitmap.o
AR drivers/net/built-in.a
CC [M] drivers/gpu/drm/drm_writeback.o
CC [M] drivers/gpu/drm/lib/drm_random.o
CC [M] drivers/gpu/drm/amd/amdgpu/uvd_v3_1.o
CC [M] drivers/gpu/drm/i915/gt/intel_mocs.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/boost.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/conn.o
CC [M] drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC lib/group_cpus.o
CC [M] lib/asn1_decoder.o
CC [M] drivers/gpu/drm/drm_ioc32.o
CC [M] drivers/gpu/drm/amd/amdgpu/vi.o
GEN lib/oid_registry_data.c
CC [M] drivers/gpu/drm/drm_panel.o
CC [M] lib/oid_registry.o
CC [M] drivers/gpu/drm/i915/gt/intel_rc6.o
CC [M] drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC [M] drivers/gpu/drm/i915/gt/intel_renderstate.o
CC [M] drivers/gpu/drm/amd/amdgpu/mxgpu_vi.o
CC [M] drivers/gpu/drm/i915/gt/intel_reset.o
CC [M] drivers/gpu/drm/drm_pci.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v6_1.o
CC [M] drivers/gpu/drm/drm_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC [M] drivers/gpu/drm/i915/gt/intel_ring.o
CC [M] drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC [M] drivers/gpu/drm/i915/gt/intel_rps.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/cstep.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC [M] drivers/gpu/drm/i915/gt/intel_sa_media.o
CC [M] drivers/gpu/drm/i915/gt/intel_sseu.o
CC [M] drivers/gpu/drm/amd/amdgpu/soc15.o
CC [M] drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC [M] drivers/gpu/drm/drm_debugfs_crc.o
CC [M] drivers/gpu/drm/drm_edid_load.o
CC [M] drivers/gpu/drm/i915/gt/intel_timeline.o
CC [M] drivers/gpu/drm/i915/gt/intel_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC [M] drivers/gpu/drm/i915/gt/intel_workarounds.o
AR lib/lib.a
GEN lib/crc32table.h
CC lib/crc32.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.o
CC [M] drivers/gpu/drm/amd/amdgpu/emu_soc.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.o
../drivers/gpu/drm/i915/gt/intel_engine_cs.c:1525: warning: expecting prototype for intel_engines_cleanup_common(). Prototype was for intel_engine_cleanup_common() instead
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC [M] drivers/gpu/drm/i915/gt/shmem_utils.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/sysfs_engines.o
CC [M] drivers/gpu/drm/amd/amdgpu/mxgpu_ai.o
CC [M] drivers/gpu/drm/drm_panel_orientation_quirks.o
CC [M] drivers/gpu/drm/drm_buddy.o
CC [M] drivers/gpu/drm/drm_gem_shmem_helper.o
CC [M] drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v7_0.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC [M] drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC [M] drivers/gpu/drm/i915/gt/gen7_renderstate.o
AR lib/built-in.a
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/dp.o
CC [M] drivers/gpu/drm/xe/xe_vm_madvise.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC [M] drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC [M] drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_display.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC [M] drivers/gpu/drm/amd/amdgpu/vega10_reg_init.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/extdev.o
CC [M] drivers/gpu/drm/drm_atomic_helper.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/fan.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_context.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_create.o
CC [M] drivers/gpu/drm/drm_atomic_state_helper.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC [M] drivers/gpu/drm/amd/amdgpu/vega20_reg_init.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v7_4.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v2_3.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC [M] drivers/gpu/drm/drm_bridge_connector.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_object.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/drm_crtc_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/nv.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_region.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC [M] drivers/gpu/drm/xe/display/ext/intel_clock_gating.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC [M] drivers/gpu/drm/xe/display/ext/intel_device_info.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/gpio.o
CC [M] drivers/gpu/drm/amd/amdgpu/arct_reg_init.o
CC [M] drivers/gpu/drm/xe/display/ext/intel_dram.o
CC [M] drivers/gpu/drm/amd/amdgpu/mxgpu_nv.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v7_2.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC [M] drivers/gpu/drm/xe/display/ext/intel_pch.o
CC [M] drivers/gpu/drm/drm_damage_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/icl_dsi.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC [M] drivers/gpu/drm/amd/amdgpu/hdp_v4_0.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC [M] drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC [M] drivers/gpu/drm/i915/gem/i915_gemfs.o
CC [M] drivers/gpu/drm/i915/i915_active.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.o
CC [M] drivers/gpu/drm/drm_encoder_slave.o
CC [M] drivers/gpu/drm/amd/amdgpu/hdp_v5_0.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC [M] drivers/gpu/drm/i915/i915_cmd_parser.o
CC [M] drivers/gpu/drm/i915/i915_deps.o
CC [M] drivers/gpu/drm/amd/amdgpu/aldebaran_reg_init.o
CC [M] drivers/gpu/drm/i915/i915_gem_evict.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC [M] drivers/gpu/drm/amd/amdgpu/aldebaran.o
CC [M] drivers/gpu/drm/i915/i915_gem_gtt.o
CC [M] drivers/gpu/drm/i915/i915_gem_ww.o
CC [M] drivers/gpu/drm/drm_flip_work.o
CC [M] drivers/gpu/drm/amd/amdgpu/soc21.o
CC [M] drivers/gpu/drm/i915/i915_gem.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC [M] drivers/gpu/drm/amd/amdgpu/sienna_cichlid.o
CC [M] drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/i915/i915_trace_points.o
CC [M] drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC [M] drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.o
CC [M] drivers/gpu/drm/i915/i915_vma.o
CC [M] drivers/gpu/drm/i915/i915_vma_resource.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/image.o
CC [M] drivers/gpu/drm/drm_format_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v4_3.o
CC [M] drivers/gpu/drm/drm_gem_atomic_helper.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/amd/amdgpu/hdp_v6_0.o
CC [M] drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v7_7.o
CC [M] drivers/gpu/drm/amd/amdgpu/hdp_v5_2.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC [M] drivers/gpu/drm/amd/amdgpu/lsdma_v6_0.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
CC [M] drivers/gpu/drm/amd/amdgpu/nbio_v7_9.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC [M] drivers/gpu/drm/drm_kms_helper_common.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.o
CC [M] drivers/gpu/drm/amd/amdgpu/df_v1_7.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC [M] drivers/gpu/drm/drm_modeset_helper.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC [M] drivers/gpu/drm/drm_plane_helper.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_huc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cursor.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_uc.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC [M] drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC [M] drivers/gpu/drm/i915/gt/intel_gsc.o
CC [M] drivers/gpu/drm/i915/i915_hwmon.o
CC [M] drivers/gpu/drm/i915/display/hsw_ips.o
CC [M] drivers/gpu/drm/amd/amdgpu/df_v3_6.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
CC [M] drivers/gpu/drm/i915/display/intel_atomic.o
CC [M] drivers/gpu/drm/drm_probe_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/df_v4_3.o
CC [M] drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/i915/display/intel_bw.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v7_0.o
CC [M] drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/i915/display/intel_color.o
CC [M] drivers/gpu/drm/drm_rect.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC [M] drivers/gpu/drm/i915/display/intel_combo_phy.o
CC [M] drivers/gpu/drm/drm_self_refresh_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v8_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.o
CC [M] drivers/gpu/drm/i915/display/intel_connector.o
CC [M] drivers/gpu/drm/i915/display/intel_crtc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/mxm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.o
CC [M] drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC [M] drivers/gpu/drm/i915/display/intel_cursor.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC [M] drivers/gpu/drm/i915/display/intel_display.o
CC [M] drivers/gpu/drm/i915/display/intel_display_driver.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/npde.o
CC [M] drivers/gpu/drm/i915/display/intel_display_power.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC [M] drivers/gpu/drm/i915/display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC [M] drivers/gpu/drm/i915/display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
CC [M] drivers/gpu/drm/i915/display/intel_display_reset.o
CC [M] drivers/gpu/drm/i915/display/intel_display_rps.o
CC [M] drivers/gpu/drm/drm_simple_kms_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v9_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v1_1.o
CC [M] drivers/gpu/drm/i915/display/intel_dmc.o
CC [M] drivers/gpu/drm/bridge/panel.o
CC [M] drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC [M] drivers/gpu/drm/i915/display/intel_dpll.o
CC [M] drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/i915/display/intel_dpt.o
CC [M] drivers/gpu/drm/i915/display/intel_drrs.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/pcir.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.o
CC [M] drivers/gpu/drm/i915/display/intel_dsb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/i915/display/intel_fb.o
CC [M] drivers/gpu/drm/drm_fbdev_generic.o
CC [M] drivers/gpu/drm/i915/display/intel_fb_pin.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC [M] drivers/gpu/drm/drm_fb_helper.o
LD [M] drivers/gpu/drm/drm.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.o
CC [M] drivers/gpu/drm/i915/display/intel_fbc.o
CC [M] drivers/gpu/drm/i915/display/intel_fdi.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.o
CC [M] drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v10_0.o
CC [M] drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/i915/display/intel_global_state.o
CC [M] drivers/gpu/drm/i915/display/intel_hdcp.o
LD [M] drivers/gpu/drm/drm_shmem_helper.o
CC [M] drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.o
CC [M] drivers/gpu/drm/i915/display/intel_hotplug.o
CC [M] drivers/gpu/drm/i915/display/intel_hti.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/pmu.o
CC [M] drivers/gpu/drm/i915/display/intel_load_detect.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
AR drivers/gpu/drm/built-in.a
CC [M] drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/power_budget.o
CC [M] drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC [M] drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC [M] drivers/gpu/drm/i915/display/intel_overlay.o
CC [M] drivers/gpu/drm/i915/display/intel_pch_display.o
CC [M] drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC [M] drivers/gpu/drm/i915/display/intel_plane_initial.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/i915/display/intel_psr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/ramcfg.o
CC [M] drivers/gpu/drm/i915/display/intel_quirks.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.o
CC [M] drivers/gpu/drm/i915/display/intel_sprite.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.o
CC [M] drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC [M] drivers/gpu/drm/i915/display/intel_tc.o
CC [M] drivers/gpu/drm/i915/display/intel_vblank.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.o
CC [M] drivers/gpu/drm/i915/display/intel_vga.o
CC [M] drivers/gpu/drm/i915/display/intel_wm.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.o
CC [M] drivers/gpu/drm/i915/display/i9xx_plane.o
CC [M] drivers/gpu/drm/i915/display/i9xx_wm.o
CC [M] drivers/gpu/drm/i915/display/skl_scaler.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/i915/display/skl_universal_plane.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.o
CC [M] drivers/gpu/drm/i915/display/skl_watermark.o
LD [M] drivers/gpu/drm/drm_kms_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.o
CC [M] drivers/gpu/drm/i915/display/intel_acpi.o
CC [M] drivers/gpu/drm/i915/display/intel_opregion.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt.o
CC [M] drivers/gpu/drm/i915/display/intel_fbdev.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.o
CC [M] drivers/gpu/drm/i915/display/dvo_ch7017.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.o
CC [M] drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC [M] drivers/gpu/drm/i915/display/dvo_ivch.o
CC [M] drivers/gpu/drm/i915/display/dvo_ns2501.o
CC [M] drivers/gpu/drm/i915/display/dvo_sil164.o
CC [M] drivers/gpu/drm/i915/display/dvo_tfp410.o
CC [M] drivers/gpu/drm/i915/display/g4x_dp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC [M] drivers/gpu/drm/i915/display/g4x_hdmi.o
CC [M] drivers/gpu/drm/amd/amdgpu/gmc_v11_0.o
CC [M] drivers/gpu/drm/i915/display/icl_dsi.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/timing.o
CC [M] drivers/gpu/drm/i915/display/intel_backlight.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/therm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/i915/display/intel_crt.o
CC [M] drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/vmap.o
CC [M] drivers/gpu/drm/i915/display/intel_ddi.o
CC [M] drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/i915/display/intel_display_trace.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC [M] drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.o
CC [M] drivers/gpu/drm/i915/display/intel_dp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0_3.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.o
CC [M] drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.o
CC [M] drivers/gpu/drm/i915/display/intel_dp_aux.o
CC [M] drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC [M] drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/i915/display/intel_dp_mst.o
CC [M] drivers/gpu/drm/amd/amdgpu/umc_v6_0.o
CC [M] drivers/gpu/drm/i915/display/intel_dsi.o
CC [M] drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/vpstate.o
CC [M] drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/i915/display/intel_dvo.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/xpio.o
CC [M] drivers/gpu/drm/i915/display/intel_gmbus.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/i915/display/intel_hdmi.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0203.o
CC [M] drivers/gpu/drm/i915/display/intel_lspcon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0205.o
CC [M] drivers/gpu/drm/amd/amdgpu/umc_v6_1.o
CC [M] drivers/gpu/drm/amd/amdgpu/umc_v6_7.o
CC [M] drivers/gpu/drm/i915/display/intel_lvds.o
CC [M] drivers/gpu/drm/i915/display/intel_panel.o
CC [M] drivers/gpu/drm/i915/display/intel_pps.o
CC [M] drivers/gpu/drm/i915/display/intel_qp_tables.o
CC [M] drivers/gpu/drm/i915/display/intel_sdvo.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0209.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bios/P0260.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/umc_v8_7.o
CC [M] drivers/gpu/drm/amd/amdgpu/umc_v8_10.o
CC [M] drivers/gpu/drm/i915/display/intel_snps_phy.o
CC [M] drivers/gpu/drm/i915/display/intel_tv.o
CC [M] drivers/gpu/drm/i915/display/intel_vdsc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.o
CC [M] drivers/gpu/drm/i915/display/intel_vrr.o
CC [M] drivers/gpu/drm/i915/display/vlv_dsi.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_irq.o
CC [M] drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC [M] drivers/gpu/drm/i915/i915_perf.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_cmd.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_pm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ih.o
CC [M] drivers/gpu/drm/amd/amdgpu/iceland_ih.o
CC [M] drivers/gpu/drm/i915/pxp/intel_pxp_session.o
CC [M] drivers/gpu/drm/i915/i915_gpu_error.o
CC [M] drivers/gpu/drm/amd/amdgpu/tonga_ih.o
CC [M] drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.o
CC [M] drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.o
CC [M] drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.o
CC [M] drivers/gpu/drm/i915/selftests/i915_random.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.o
CC [M] drivers/gpu/drm/i915/selftests/i915_selftest.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC [M] drivers/gpu/drm/amd/amdgpu/cz_ih.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/vega10_ih.o
CC [M] drivers/gpu/drm/i915/selftests/igt_atomic.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.o
CC [M] drivers/gpu/drm/i915/selftests/igt_flush_test.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.o
CC [M] drivers/gpu/drm/i915/selftests/igt_live_test.o
CC [M] drivers/gpu/drm/i915/selftests/igt_mmap.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/i915/selftests/igt_reset.o
CC [M] drivers/gpu/drm/i915/selftests/igt_spinner.o
CC [M] drivers/gpu/drm/i915/selftests/librapl.o
CC [M] drivers/gpu/drm/i915/i915_vgpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/vega20_ih.o
HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy_regs.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
HDRTEST drivers/gpu/drm/i915/display/intel_crtc_state_dump.h
HDRTEST drivers/gpu/drm/i915/display/hsw_ips.h
HDRTEST drivers/gpu/drm/i915/display/g4x_hdmi.h
HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.o
HDRTEST drivers/gpu/drm/i915/display/intel_overlay.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.o
HDRTEST drivers/gpu/drm/i915/display/intel_display.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.o
HDRTEST drivers/gpu/drm/i915/display/skl_watermark_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_dmc.h
HDRTEST drivers/gpu/drm/i915/display/intel_vga.h
HDRTEST drivers/gpu/drm/i915/display/intel_audio.h
CC [M] drivers/gpu/drm/amd/amdgpu/navi10_ih.o
HDRTEST drivers/gpu/drm/i915/display/intel_lvds.h
HDRTEST drivers/gpu/drm/i915/display/intel_modeset_setup.h
HDRTEST drivers/gpu/drm/i915/display/intel_cdclk.h
CC [M] drivers/gpu/drm/amd/amdgpu/ih_v6_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_display_limits.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_psp.o
HDRTEST drivers/gpu/drm/i915/display/intel_hotplug.h
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v3_1.o
HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy.h
HDRTEST drivers/gpu/drm/i915/display/intel_atomic.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_driver.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
HDRTEST drivers/gpu/drm/i915/display/intel_dpll.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_mst.h
HDRTEST drivers/gpu/drm/i915/display/intel_fdi_regs.h
HDRTEST drivers/gpu/drm/i915/display/g4x_dp.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
HDRTEST drivers/gpu/drm/i915/display/intel_tc.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
HDRTEST drivers/gpu/drm/i915/display/intel_frontbuffer.h
HDRTEST drivers/gpu/drm/i915/display/intel_dsi_vbt.h
HDRTEST drivers/gpu/drm/i915/display/intel_psr.h
HDRTEST drivers/gpu/drm/i915/display/intel_crt.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
HDRTEST drivers/gpu/drm/i915/display/intel_opregion.h
HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy_regs.h
HDRTEST drivers/gpu/drm/i915/display/i9xx_wm.h
HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_global_state.h
HDRTEST drivers/gpu/drm/i915/display/intel_lpe_audio.h
HDRTEST drivers/gpu/drm/i915/display/intel_drrs.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_rps.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.o
HDRTEST drivers/gpu/drm/i915/display/intel_fbdev.h
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v10_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_pps_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.o
HDRTEST drivers/gpu/drm/i915/display/intel_hdmi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
HDRTEST drivers/gpu/drm/i915/display/intel_fdi.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
HDRTEST drivers/gpu/drm/i915/display/intel_fb.h
HDRTEST drivers/gpu/drm/i915/display/intel_dsb_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_qp_tables.h
HDRTEST drivers/gpu/drm/i915/display/intel_vdsc.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllnv04.o
HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_core.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllgt215.o
HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll.h
HDRTEST drivers/gpu/drm/i915/display/intel_dvo_dev.h
CC [M] drivers/gpu/drm/xe/i915-display/skl_scaler.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.o
HDRTEST drivers/gpu/drm/i915/display/intel_hdcp.h
CC [M] drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
HDRTEST drivers/gpu/drm/i915/display/intel_sdvo_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_pch_refclk.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_trace.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_power.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_regs.h
HDRTEST drivers/gpu/drm/i915/display/i9xx_plane.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v11_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_dpll_mgr.h
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
HDRTEST drivers/gpu/drm/i915/display/vlv_dsi.h
HDRTEST drivers/gpu/drm/i915/display/intel_plane_initial.h
HDRTEST drivers/gpu/drm/i915/display/intel_fifo_underrun.h
HDRTEST drivers/gpu/drm/i915/display/intel_cursor.h
HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy.h
HDRTEST drivers/gpu/drm/i915/display/skl_scaler.h
HDRTEST drivers/gpu/drm/i915/display/intel_hti.h
HDRTEST drivers/gpu/drm/i915/display/icl_dsi_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_atomic_plane.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.o
HDRTEST drivers/gpu/drm/i915/display/skl_watermark.h
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v12_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_fbc.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_reg_defs.h
../drivers/gpu/drm/i915/display/intel_frontbuffer.h:84: warning: Function parameter or member 'fb' not described in 'intel_frontbuffer_invalidate'
../drivers/gpu/drm/i915/display/intel_frontbuffer.h:84: warning: Excess function parameter 'front' description in 'intel_frontbuffer_invalidate'
../drivers/gpu/drm/i915/display/intel_frontbuffer.h:112: warning: Function parameter or member 'fb' not described in 'intel_frontbuffer_flush'
../drivers/gpu/drm/i915/display/intel_frontbuffer.h:112: warning: Excess function parameter 'front' description in 'intel_frontbuffer_flush'
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v13_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_acpi.h
HDRTEST drivers/gpu/drm/i915/display/intel_connector.h
HDRTEST drivers/gpu/drm/i915/display/intel_dpt.h
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
HDRTEST drivers/gpu/drm/i915/display/intel_quirks.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_link_training.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.o
HDRTEST drivers/gpu/drm/i915/display/intel_color.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.o
CC [M] drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.o
HDRTEST drivers/gpu/drm/i915/display/intel_crtc.h
CC [M] drivers/gpu/drm/amd/amdgpu/dce_v10_0.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbdev.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.o
CC [M] drivers/gpu/drm/amd/amdgpu/dce_v11_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs.h
HDRTEST drivers/gpu/drm/i915/display/intel_modeset_verify.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.o
HDRTEST drivers/gpu/drm/i915/display/intel_display_power_well.h
../drivers/gpu/drm/i915/i915_gpu_error.c:2174: warning: Function parameter or member 'dump_flags' not described in 'i915_capture_error_state'
HDRTEST drivers/gpu/drm/i915/display/intel_psr_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_wm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.o
HDRTEST drivers/gpu/drm/i915/display/intel_pipe_crc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.o
HDRTEST drivers/gpu/drm/i915/display/intel_audio_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_rlc.o
HDRTEST drivers/gpu/drm/i915/display/intel_panel.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.o
HDRTEST drivers/gpu/drm/i915/display/intel_sprite.h
HDRTEST drivers/gpu/drm/i915/display/intel_wm_types.h
HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.o
HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
HDRTEST drivers/gpu/drm/i915/display/intel_tv.h
HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.o
HDRTEST drivers/gpu/drm/i915/display/intel_hti_regs.h
HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
HDRTEST drivers/gpu/drm/i915/display/intel_vrr.h
HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
HDRTEST drivers/gpu/drm/i915/display/intel_load_detect.h
HDRTEST drivers/gpu/drm/i915/display/skl_universal_plane.h
HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
HDRTEST drivers/gpu/drm/i915/display/intel_mg_phy_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.o
HDRTEST drivers/gpu/drm/i915/display/intel_bw.h
HDRTEST drivers/gpu/drm/i915/display/intel_de.h
HDRTEST drivers/gpu/drm/i915/display/intel_lvds_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.o
HDRTEST drivers/gpu/drm/i915/display/intel_gmbus_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
HDRTEST drivers/gpu/drm/i915/display/intel_dvo.h
HDRTEST drivers/gpu/drm/i915/display/intel_sdvo.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux.h
HDRTEST drivers/gpu/drm/i915/display/intel_vdsc_regs.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v8_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.o
HDRTEST drivers/gpu/drm/i915/display/intel_dvo_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_gmbus.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.o
HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v9_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.o
HDRTEST drivers/gpu/drm/i915/display/intel_dsi.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v9_4.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.o
HDRTEST drivers/gpu/drm/i915/display/intel_dmc_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_ddi.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
../drivers/gpu/drm/i915/i915_perf.c:5307: warning: Function parameter or member 'i915' not described in 'i915_perf_ioctl_version'
HDRTEST drivers/gpu/drm/i915/display/intel_tv_regs.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.o
HDRTEST drivers/gpu/drm/i915/display/intel_dsb.h
HDRTEST drivers/gpu/drm/i915/display/intel_bios.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.o
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v10_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_pch_display.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.o
HDRTEST drivers/gpu/drm/i915/display/intel_display_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/imu_v11_0.o
HDRTEST drivers/gpu/drm/i915/display/intel_backlight.h
HDRTEST drivers/gpu/drm/i915/display/intel_vblank.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.o
HDRTEST drivers/gpu/drm/i915/display/intel_backlight_regs.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v11_0.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.o
HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy_regs.h
HDRTEST drivers/gpu/drm/i915/display/intel_display_reset.h
CC [M] drivers/gpu/drm/amd/amdgpu/gfx_v11_0_3.o
HDRTEST drivers/gpu/drm/i915/display/intel_display_power_map.h
HDRTEST drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
CC [M] drivers/gpu/drm/amd/amdgpu/imu_v11_0_3.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.o
HDRTEST drivers/gpu/drm/i915/display/icl_dsi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.o
HDRTEST drivers/gpu/drm/i915/display/intel_lspcon.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pm_types.h
HDRTEST drivers/gpu/drm/i915/display/intel_dpio_phy.h
HDRTEST drivers/gpu/drm/i915/display/intel_dp_hdcp.h
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
HDRTEST drivers/gpu/drm/i915/display/intel_fb_pin.h
HDRTEST drivers/gpu/drm/i915/display/intel_pps.h
HDRTEST drivers/gpu/drm/i915/display/intel_sprite_uapi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_region.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v2_4.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_lmem.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_mman.h
../drivers/gpu/drm/i915/gem/i915_gem_region.h:25: warning: Incorrect use of kernel-doc format: * process_obj - Process the current object
../drivers/gpu/drm/i915/gem/i915_gem_region.h:35: warning: Function parameter or member 'process_obj' not described in 'i915_gem_apply_to_region_ops'
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.o
HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.o
HDRTEST drivers/gpu/drm/xe/display/ext/i915_irq.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_clflush.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_tiling.h
HDRTEST drivers/gpu/drm/xe/display/ext/intel_pch.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.o
HDRTEST drivers/gpu/drm/xe/display/ext/intel_dram.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_stolen.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.h
HDRTEST drivers/gpu/drm/xe/display/ext/intel_device_info.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_create.h
HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_move.h
HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.o
HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_domain.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_internal.h
HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.o
HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h
HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_context.h
HDRTEST drivers/gpu/drm/i915/gem/selftests/huge_gem_object.h
HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_gem_object.h
HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.h
HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v3_0.o
HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.o
HDRTEST drivers/gpu/drm/xe/xe_bb.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v4_0.o
HDRTEST drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_userptr.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_pm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.o
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_shrinker.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gemfs.h
HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v4_4.o
HDRTEST drivers/gpu/drm/i915/gt/intel_timeline_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/tu102.o
HDRTEST drivers/gpu/drm/i915/gt/selftest_engine.h
HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
HDRTEST drivers/gpu/drm/xe/xe_bo.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.o
HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
../drivers/gpu/drm/i915/gem/i915_gem_ttm.h:50: warning: Function parameter or member 'bo' not described in 'i915_ttm_to_gem'
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.o
HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
HDRTEST drivers/gpu/drm/i915/gt/intel_context_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.o
HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v5_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v5_2.o
HDRTEST drivers/gpu/drm/i915/gt/intel_execlists_submission.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm.h
HDRTEST drivers/gpu/drm/i915/gt/selftest_rc6.h
HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
HDRTEST drivers/gpu/drm/xe/xe_device.h
CC [M] drivers/gpu/drm/amd/amdgpu/sdma_v6_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_llc_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_mes.o
CC [M] drivers/gpu/drm/amd/amdgpu/mes_v10_1.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt.h
CC [M] drivers/gpu/drm/amd/amdgpu/mes_v11_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_region_lmem.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_requests.h
HDRTEST drivers/gpu/drm/i915/gt/intel_ggtt_gmch.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_print.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv04.o
HDRTEST drivers/gpu/drm/i915/gt/gen8_ppgtt.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv10.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_mcr.h
HDRTEST drivers/gpu/drm/i915/gt/intel_timeline.h
HDRTEST drivers/gpu/drm/i915/gt/gen6_engine_cs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_workarounds_types.h
HDRTEST drivers/gpu/drm/i915/gt/selftest_rps.h
HDRTEST drivers/gpu/drm/xe/xe_device_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv20.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.o
HDRTEST drivers/gpu/drm/i915/gt/intel_sa_media.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_clock_utils.h
HDRTEST drivers/gpu/drm/i915/gt/intel_rps_types.h
HDRTEST drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.h
HDRTEST drivers/gpu/drm/i915/gt/sysfs_engines.h
HDRTEST drivers/gpu/drm/i915/gt/gen7_renderclear.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv41.o
HDRTEST drivers/gpu/drm/i915/gt/intel_context.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv44.o
HDRTEST drivers/gpu/drm/i915/gt/intel_wopcm.h
HDRTEST drivers/gpu/drm/i915/gt/intel_mocs.h
HDRTEST drivers/gpu/drm/xe/xe_display.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv49.o
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_pm.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.o
HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_rc6.h
HDRTEST drivers/gpu/drm/i915/gt/intel_ring_types.h
HDRTEST drivers/gpu/drm/i915/gt/intel_workarounds.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv4e.o
../drivers/gpu/drm/i915/gem/i915_gem_object.h:93: warning: Function parameter or member 'file' not described in 'i915_gem_object_lookup_rcu'
../drivers/gpu/drm/i915/gem/i915_gem_object.h:93: warning: Excess function parameter 'filp' description in 'i915_gem_object_lookup_rcu'
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_regs.h
HDRTEST drivers/gpu/drm/xe/xe_drv.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.o
HDRTEST drivers/gpu/drm/xe/xe_engine.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm_irq.h
HDRTEST drivers/gpu/drm/i915/gt/shmem_utils.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.o
CC [M] drivers/gpu/drm/amd/amdgpu/uvd_v5_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_engine.h
HDRTEST drivers/gpu/drm/i915/gt/intel_reset_types.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_regs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf108.o
HDRTEST drivers/gpu/drm/i915/gt/intel_reset.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.h
HDRTEST drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h
HDRTEST drivers/gpu/drm/xe/xe_engine_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm107.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_print.h
HDRTEST drivers/gpu/drm/xe/xe_exec.h
CC [M] drivers/gpu/drm/amd/amdgpu/uvd_v6_0.o
HDRTEST drivers/gpu/drm/xe/xe_execlist.h
HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm200.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_fw.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_errors_abi.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.o
HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h
HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h
CC [M] drivers/gpu/drm/amd/amdgpu/uvd_v7_0.o
HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h
HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vce.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramga102.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.h
HDRTEST drivers/gpu/drm/xe/xe_gt.h
HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr2.o
HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr3.o
HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr3.o
HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr5.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.o
HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.o
HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.h
../drivers/gpu/drm/i915/gt/intel_context.h:108: warning: Function parameter or member 'ce' not described in 'intel_context_lock_pinned'
../drivers/gpu/drm/i915/gt/intel_context.h:123: warning: Function parameter or member 'ce' not described in 'intel_context_is_pinned'
../drivers/gpu/drm/i915/gt/intel_context.h:142: warning: Function parameter or member 'ce' not described in 'intel_context_unlock_pinned'
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc_fw.h
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'size' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'data' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'rd' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'wr' not described in '__guc_capture_bufstate'
CC [M] drivers/gpu/drm/amd/amdgpu/vce_v3_0.o
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'link' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'is_partial' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'eng_class' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'eng_inst' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'guc_id' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'lrca' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'reginfo' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:62: warning: wrong kernel-doc identifier on line:
* struct guc_debug_capture_list_header / struct guc_debug_capture_list
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:80: warning: wrong kernel-doc identifier on line:
* struct __guc_mmio_reg_descr / struct __guc_mmio_reg_descr_group
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:105: warning: wrong kernel-doc identifier on line:
* struct guc_state_capture_header_t / struct guc_state_capture_t /
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'is_valid' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'ptr' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'size' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'status' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:216: warning: Function parameter or member 'ads_null_cache' not described in 'intel_guc_state_capture'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:216: warning: Function parameter or member 'max_mmio_per_node' not described in 'intel_guc_state_capture'
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_capture.h
HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_submission.h
HDRTEST drivers/gpu/drm/xe/xe_guc.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h
HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_log.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h
HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
CC [M] drivers/gpu/drm/amd/amdgpu/vce_v4_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_sw_ring.o
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_fw.h
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_v1_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.o
HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_ads.h
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_v2_0.o
HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.o
HDRTEST drivers/gpu/drm/xe/xe_guc_engine_types.h
HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_rc.h
HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.o
HDRTEST drivers/gpu/drm/i915/gt/intel_hwconfig.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.o
HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.o
HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
HDRTEST drivers/gpu/drm/i915/gt/intel_llc.h
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_v2_5.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.o
HDRTEST drivers/gpu/drm/i915/gt/gen8_engine_cs.h
HDRTEST drivers/gpu/drm/i915/gt/intel_sseu_debugfs.h
HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
HDRTEST drivers/gpu/drm/xe/xe_huc.h
HDRTEST drivers/gpu/drm/i915/gt/intel_rc6_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_v3_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/vcn_v4_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.o
HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
../drivers/gpu/drm/i915/gt/uc/intel_guc.h:274: warning: Function parameter or member 'dbgfs_node' not described in 'intel_guc'
CC [M] drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_context_param.h
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'marker' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'read_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'write_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'size' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'sampled_write_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'wrap_offset' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'flush_to_file' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'buffer_full_cnt' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'reserved' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'flags' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'version' not described in 'guc_log_buffer_state'
HDRTEST drivers/gpu/drm/i915/gt/intel_gpu_commands.h
HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_user.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_irq.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gsc.h
CC [M] drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.o
HDRTEST drivers/gpu/drm/i915/gt/intel_rps.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.o
HDRTEST drivers/gpu/drm/i915/gt/selftest_llc.h
HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
HDRTEST drivers/gpu/drm/i915/gt/gen6_ppgtt.h
HDRTEST drivers/gpu/drm/i915/gt/intel_ggtt_fencing.h
CC [M] drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_migrate_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.o
HDRTEST drivers/gpu/drm/i915/gt/selftests/mock_timeline.h
HDRTEST drivers/gpu/drm/i915/gt/intel_lrc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.o
HDRTEST drivers/gpu/drm/i915/gt/intel_lrc_reg.h
CC [M] drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.o
HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.o
HDRTEST drivers/gpu/drm/i915/gt/intel_migrate.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.h
HDRTEST drivers/gpu/drm/xe/xe_irq.h
HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.o
CC [M] drivers/gpu/drm/amd/amdgpu/athub_v1_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.h
HDRTEST drivers/gpu/drm/xe/xe_lrc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv04.o
HDRTEST drivers/gpu/drm/i915/gt/mock_engine.h
CC [M] drivers/gpu/drm/amd/amdgpu/athub_v2_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv4e.o
HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
HDRTEST drivers/gpu/drm/xe/xe_macros.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padg94.o
HDRTEST drivers/gpu/drm/xe/xe_map.h
CC [M] drivers/gpu/drm/amd/amdgpu/athub_v2_1.o
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_stats.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgf119.o
HDRTEST drivers/gpu/drm/xe/xe_migrate.h
CC [M] drivers/gpu/drm/amd/amdgpu/athub_v3_0.o
HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
HDRTEST drivers/gpu/drm/xe/xe_mmio.h
HDRTEST drivers/gpu/drm/xe/xe_mocs.h
HDRTEST drivers/gpu/drm/xe/xe_module.h
HDRTEST drivers/gpu/drm/xe/xe_pat.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgm200.o
HDRTEST drivers/gpu/drm/xe/xe_pci.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gtt.h
HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_buffer_pool_types.h
HDRTEST drivers/gpu/drm/xe/xe_pcode.h
CC [M] drivers/gpu/drm/amd/amdgpu/smuio_v9_0.o
HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
CC [M] drivers/gpu/drm/amd/amdgpu/smuio_v11_0.o
HDRTEST drivers/gpu/drm/i915/gt/intel_ring.h
CC [M] drivers/gpu/drm/amd/amdgpu/smuio_v11_0_6.o
HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
HDRTEST drivers/gpu/drm/xe/xe_pm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.o
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_types.h
HDRTEST drivers/gpu/drm/i915/gt/intel_renderstate.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.o
HDRTEST drivers/gpu/drm/i915/gt/intel_sseu.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bit.o
HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
HDRTEST drivers/gpu/drm/i915/gt/intel_engine_types.h
HDRTEST drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.h
HDRTEST drivers/gpu/drm/i915/gt/gen2_engine_cs.h
HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.o
HDRTEST drivers/gpu/drm/i915/gvt/gvt.h
CC [M] drivers/gpu/drm/amd/amdgpu/smuio_v13_0.o
HDRTEST drivers/gpu/drm/xe/xe_pt.h
HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/smuio_v13_0_6.o
HDRTEST drivers/gpu/drm/i915/gvt/trace.h
HDRTEST drivers/gpu/drm/i915/gvt/debug.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_reset.o
CC [M] drivers/gpu/drm/amd/amdgpu/mca_v3_0.o
HDRTEST drivers/gpu/drm/i915/gvt/edid.h
HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.o
HDRTEST drivers/gpu/drm/xe/xe_query.h
HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgf119.o
HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
HDRTEST drivers/gpu/drm/i915/gvt/page_track.h
HDRTEST drivers/gpu/drm/i915/gvt/mmio.h
HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.o
HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_module.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device.o
HDRTEST drivers/gpu/drm/i915/gvt/sched_policy.h
HDRTEST drivers/gpu/drm/i915/gvt/fb_decoder.h
HDRTEST drivers/gpu/drm/i915/gvt/cmd_parser.h
../drivers/gpu/drm/i915/gt/intel_gtt.h:515: warning: Function parameter or member 'vm' not described in 'i915_vm_resv_put'
../drivers/gpu/drm/i915/gt/intel_gtt.h:515: warning: Excess function parameter 'resv' description in 'i915_vm_resv_put'
HDRTEST drivers/gpu/drm/i915/gvt/dmabuf.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.o
HDRTEST drivers/gpu/drm/i915/gvt/mmio_context.h
HDRTEST drivers/gpu/drm/i915/gvt/display.h
HDRTEST drivers/gpu/drm/i915/gvt/gtt.h
HDRTEST drivers/gpu/drm/i915/gvt/scheduler.h
HDRTEST drivers/gpu/drm/i915/gvt/reg.h
HDRTEST drivers/gpu/drm/i915/gvt/execlist.h
HDRTEST drivers/gpu/drm/i915/gvt/interrupt.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.o
HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
HDRTEST drivers/gpu/drm/i915/i915_active.h
HDRTEST drivers/gpu/drm/i915/i915_active_types.h
HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
HDRTEST drivers/gpu/drm/xe/xe_rtp.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.o
HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
HDRTEST drivers/gpu/drm/i915/i915_cmd_parser.h
HDRTEST drivers/gpu/drm/xe/xe_sa.h
HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
HDRTEST drivers/gpu/drm/i915/i915_config.h
HDRTEST drivers/gpu/drm/i915/i915_debugfs.h
HDRTEST drivers/gpu/drm/i915/i915_debugfs_params.h
HDRTEST drivers/gpu/drm/i915/i915_deps.h
HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
HDRTEST drivers/gpu/drm/i915/i915_driver.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.o
HDRTEST drivers/gpu/drm/i915/i915_drm_client.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_topology.o
HDRTEST drivers/gpu/drm/i915/i915_drv.h
HDRTEST drivers/gpu/drm/i915/i915_file_private.h
HDRTEST drivers/gpu/drm/i915/i915_fixed.h
HDRTEST drivers/gpu/drm/i915/i915_gem.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.o
../drivers/gpu/drm/i915/gt/intel_engine_types.h:293: warning: Function parameter or member 'preempt_hang' not described in 'intel_engine_execlists'
HDRTEST drivers/gpu/drm/i915/i915_gem_evict.h
HDRTEST drivers/gpu/drm/i915/i915_gem_gtt.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_pasid.o
HDRTEST drivers/gpu/drm/i915/i915_gem_ww.h
HDRTEST drivers/gpu/drm/i915/i915_getparam.h
HDRTEST drivers/gpu/drm/i915/i915_gpu_error.h
HDRTEST drivers/gpu/drm/i915/i915_hwmon.h
HDRTEST drivers/gpu/drm/i915/i915_ioc32.h
HDRTEST drivers/gpu/drm/i915/i915_ioctl.h
HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
HDRTEST drivers/gpu/drm/xe/xe_step.h
HDRTEST drivers/gpu/drm/i915/i915_iosf_mbi.h
HDRTEST drivers/gpu/drm/xe/xe_step_types.h
HDRTEST drivers/gpu/drm/xe/xe_sync.h
HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_doorbell.o
HDRTEST drivers/gpu/drm/i915/i915_irq.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_flat_memory.o
HDRTEST drivers/gpu/drm/xe/xe_trace.h
HDRTEST drivers/gpu/drm/i915/i915_memcpy.h
HDRTEST drivers/gpu/drm/i915/i915_mitigations.h
HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.o
HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_queue.o
HDRTEST drivers/gpu/drm/i915/i915_mm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.o
HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
HDRTEST drivers/gpu/drm/i915/i915_params.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_cik.o
HDRTEST drivers/gpu/drm/xe/xe_tuning.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_vi.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.o
HDRTEST drivers/gpu/drm/xe/xe_uc.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v9.o
HDRTEST drivers/gpu/drm/i915/i915_pci.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.o
HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
HDRTEST drivers/gpu/drm/i915/i915_perf.h
HDRTEST drivers/gpu/drm/i915/i915_perf_oa_regs.h
HDRTEST drivers/gpu/drm/i915/i915_perf_types.h
HDRTEST drivers/gpu/drm/i915/i915_pmu.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v10.o
HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v11.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_kernel_queue.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.o
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'active' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'fence' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'fn' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:89: warning: Function parameter or member 'active' not described in 'i915_active_fence_set'
../drivers/gpu/drm/i915/i915_active.h:89: warning: Function parameter or member 'rq' not described in 'i915_active_fence_set'
../drivers/gpu/drm/i915/i915_active.h:102: warning: Function parameter or member 'active' not described in 'i915_active_fence_get'
../drivers/gpu/drm/i915/i915_active.h:122: warning: Function parameter or member 'active' not described in 'i915_active_fence_isset'
HDRTEST drivers/gpu/drm/i915/i915_priolist_types.h
HDRTEST drivers/gpu/drm/i915/i915_pvinfo.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_vi.o
HDRTEST drivers/gpu/drm/i915/i915_query.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.o
HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
HDRTEST drivers/gpu/drm/i915/i915_reg.h
HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
HDRTEST drivers/gpu/drm/xe/xe_vm.h
HDRTEST drivers/gpu/drm/i915/i915_reg_defs.h
HDRTEST drivers/gpu/drm/i915/i915_request.h
HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
HDRTEST drivers/gpu/drm/i915/i915_scatterlist.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/ltc/ga102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_v9.o
HDRTEST drivers/gpu/drm/i915/i915_scheduler.h
HDRTEST drivers/gpu/drm/i915/i915_scheduler_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process_queue_manager.o
HDRTEST drivers/gpu/drm/i915/i915_selftest.h
HDRTEST drivers/gpu/drm/xe/xe_vm_madvise.h
HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager.o
../drivers/gpu/drm/i915/i915_pmu.h:21: warning: cannot understand function prototype: 'enum i915_pmu_tracked_events '
../drivers/gpu/drm/i915/i915_pmu.h:32: warning: cannot understand function prototype: 'enum '
../drivers/gpu/drm/i915/i915_pmu.h:41: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
* How many different events we track in the global PMU mask.
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_cik.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_vi.o
HDRTEST drivers/gpu/drm/i915/i915_suspend.h
HDRTEST drivers/gpu/drm/xe/xe_wa.h
HDRTEST drivers/gpu/drm/i915/i915_sw_fence.h
HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.o
LD [M] drivers/gpu/drm/xe/xe.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v9.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v10.o
HDRTEST drivers/gpu/drm/i915/i915_sw_fence_work.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.o
HDRTEST drivers/gpu/drm/i915/i915_switcheroo.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v11.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_interrupt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_events.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/cik_event_interrupt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.o
HDRTEST drivers/gpu/drm/i915/i915_syncmap.h
../drivers/gpu/drm/i915/i915_scatterlist.h:160: warning: Incorrect use of kernel-doc format: * release() - Free the memory of the struct i915_refct_sgt
../drivers/gpu/drm/i915/i915_scatterlist.h:164: warning: Function parameter or member 'release' not described in 'i915_refct_sgt_ops'
../drivers/gpu/drm/i915/i915_scatterlist.h:187: warning: Function parameter or member 'rsgt' not described in 'i915_refct_sgt_put'
../drivers/gpu/drm/i915/i915_scatterlist.h:198: warning: Function parameter or member 'rsgt' not described in 'i915_refct_sgt_get'
../drivers/gpu/drm/i915/i915_scatterlist.h:214: warning: Function parameter or member 'rsgt' not described in '__i915_refct_sgt_init'
HDRTEST drivers/gpu/drm/i915/i915_sysfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.o
HDRTEST drivers/gpu/drm/i915/i915_tasklet.h
HDRTEST drivers/gpu/drm/i915/i915_trace.h
HDRTEST drivers/gpu/drm/i915/i915_ttm_buddy_manager.h
../drivers/gpu/drm/i915/i915_request.h:176: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
* Request queue structure.
../drivers/gpu/drm/i915/i915_request.h:477: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
* Returns true if seq1 is later than seq2.
HDRTEST drivers/gpu/drm/i915/i915_user_extensions.h
HDRTEST drivers/gpu/drm/i915/i915_utils.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v9.o
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v11.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o
HDRTEST drivers/gpu/drm/i915/i915_vgpu.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_smi_events.o
HDRTEST drivers/gpu/drm/i915/i915_vma.h
HDRTEST drivers/gpu/drm/i915/i915_vma_resource.h
HDRTEST drivers/gpu/drm/i915/i915_vma_types.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_crat.o
HDRTEST drivers/gpu/drm/i915/intel_clock_gating.h
HDRTEST drivers/gpu/drm/i915/intel_device_info.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debugfs.o
HDRTEST drivers/gpu/drm/i915/intel_gvt.h
HDRTEST drivers/gpu/drm/i915/intel_mchbar_regs.h
HDRTEST drivers/gpu/drm/i915/intel_memory_region.h
HDRTEST drivers/gpu/drm/i915/intel_pci_config.h
drivers/gpu/drm/xe/xe.o: warning: objtool: intel_set_cpu_fifo_underrun_reporting+0x2a0: unreachable instruction
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_svm.o
HDRTEST drivers/gpu/drm/i915/intel_pcode.h
HDRTEST drivers/gpu/drm/i915/intel_region_ttm.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.o
HDRTEST drivers/gpu/drm/i915/intel_runtime_pm.h
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'OP' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'COND' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'US' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'Wmin' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'Wmax' not described in '__wait_for'
HDRTEST drivers/gpu/drm/i915/intel_sbi.h
CC [M] drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_migrate.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.o
HDRTEST drivers/gpu/drm/i915/intel_step.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.o
HDRTEST drivers/gpu/drm/i915/intel_uncore.h
HDRTEST drivers/gpu/drm/i915/intel_wakeref.h
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_tee.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_irq.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_session.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd.h
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_types.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_huc.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.o
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_pm.h
../drivers/gpu/drm/i915/i915_vma_resource.h:91: warning: Incorrect use of kernel-doc format: * struct i915_vma_bindinfo - Information needed for async bind
../drivers/gpu/drm/i915/i915_vma_resource.h:129: warning: Function parameter or member 'wakeref' not described in 'i915_vma_resource'
../drivers/gpu/drm/i915/i915_vma_resource.h:129: warning: Function parameter or member 'bi' not described in 'i915_vma_resource'
HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h
HDRTEST drivers/gpu/drm/i915/selftests/igt_live_test.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.o
HDRTEST drivers/gpu/drm/i915/selftests/igt_atomic.h
HDRTEST drivers/gpu/drm/i915/selftests/mock_gem_device.h
HDRTEST drivers/gpu/drm/i915/selftests/mock_drm.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.o
HDRTEST drivers/gpu/drm/i915/selftests/igt_reset.h
HDRTEST drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.h
../drivers/gpu/drm/i915/i915_vma.h:145: warning: expecting prototype for i915_vma_offset(). Prototype was for i915_vma_size() instead
HDRTEST drivers/gpu/drm/i915/selftests/lib_sw_fence.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv04.o
HDRTEST drivers/gpu/drm/i915/selftests/i915_perf_selftests.h
../drivers/gpu/drm/i915/pxp/intel_pxp_types.h:96: warning: Function parameter or member 'dev_link' not described in 'intel_pxp'
HDRTEST drivers/gpu/drm/i915/selftests/mock_uncore.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.o
HDRTEST drivers/gpu/drm/i915/selftests/mock_gtt.h
HDRTEST drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.o
HDRTEST drivers/gpu/drm/i915/selftests/mock_request.h
HDRTEST drivers/gpu/drm/i915/selftests/i915_random.h
HDRTEST drivers/gpu/drm/i915/selftests/igt_spinner.h
HDRTEST drivers/gpu/drm/i915/selftests/librapl.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_job.o
HDRTEST drivers/gpu/drm/i915/selftests/mock_region.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_acp.o
CC [M] drivers/gpu/drm/amd/amdgpu/../acp/acp_hw.o
HDRTEST drivers/gpu/drm/i915/selftests/i915_live_selftests.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memgf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_ioc32.o
HDRTEST drivers/gpu/drm/i915/selftests/igt_mmap.h
HDRTEST drivers/gpu/drm/i915/selftests/igt_flush_test.h
HDRTEST drivers/gpu/drm/i915/soc/intel_pch.h
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.o
HDRTEST drivers/gpu/drm/i915/soc/intel_dram.h
HDRTEST drivers/gpu/drm/i915/soc/intel_gmch.h
HDRTEST drivers/gpu/drm/i915/vlv_sideband.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.o
HDRTEST drivers/gpu/drm/i915/vlv_sideband_reg.h
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv44.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/arcturus_ppt.o
HDRTEST drivers/gpu/drm/i915/vlv_suspend.h
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/navi10_ppt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmmcp77.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.o
LD [M] drivers/gpu/drm/i915/i915.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk104.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/vangogh_ppt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm200.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk20a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm20b.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgv100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/cyan_skillfish_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/smu_v11_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/renoir_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/smu_v12_0.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/aldebaran_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/yellow_carp_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_0_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_4_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_5_ppt.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_7_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/amdgpu_smu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu_cmn.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mxm/mxms.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/tonga_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/fiji_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/polaris10_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/iceland_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu7_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega10_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu10_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/ci_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega12_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vegam_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu9_smumgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega20_smumgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hwmgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/processpptables.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hardwaremanager.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu8_hwmgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pppcielanes.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/process_pptables_v1_0.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomctrl.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomfwctrl.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_hwmgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_powertune.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_thermal.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_clockpowergating.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_processpptables.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_hwmgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_powertune.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_thermal.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu10_hwmgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_psm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_processpptables.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_hwmgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_thermal.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_overdriver.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_processpptables.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_hwmgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_powertune.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_thermal.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/ic.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/common_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu9_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/tonga_baco.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/polaris_baco.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/fiji_baco.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ci_baco.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_baco.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/powerplay/amd_powerplay.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/legacy_dpm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_smc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_dpm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_smc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_pm.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.o
CC [M] drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm_internal.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crtc.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_color.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/dc_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_services.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/top/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_helpers.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_pp_smu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_psr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_hdcp.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/vfn/gv100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crc.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/vfn/tu102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/vfn/ga100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_debugfs.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/basics/conversion.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/basics/vector.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dc_common.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_interface.o
CC [M] drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_common.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table2.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/falcon.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/xtensa.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper2.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser2.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce60/command_table_helper_dce60.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce80/command_table_helper_dce80.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce110/command_table_helper_dce110.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper_dce112.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper2_dce112.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dce_calcs.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/custom_float.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/bw_fixed.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_lib.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_rq_dlg_helpers.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dml1_display_rq_dlg_calc.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn10/dcn10_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/dcn20_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_vba.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20v2.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20v2.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_rq_dlg_calc_21.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_mode_vba_21.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/pci.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/dcn30_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_rq_dlg_calc_30.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/device/user.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/base.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_rq_dlg_calc_31.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmi.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_rq_dlg_calc_314.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/head.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_rq_dlg_calc_32.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_util_32.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/dcn31_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/dcn32_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn321/dcn321_fpu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn301/dcn301_fpu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn302/dcn302_fpu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn303/dcn303_fpu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/dcn314_fpu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dsc/rc_calc_fpu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calcs.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_math.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_auto.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/clk_mgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce60/dce60_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce100/dce_clk_mgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce110/dce110_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/disp/uhead.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce112/dce112_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce120/dce120_clk_mgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv2_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn20/dcn20_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/user.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn201/dcn201_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr_vbios_smu.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/vg_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/dcn301_smu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_smu.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_clk_mgr.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.o
CC [M] drivers/gpu/drm/nouveau/nvkm/engine/fifo/g98.o
CC [M] drivers/gpu/drm/amd/amdgpu/../display/dc/clk_
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-xe] ○ CI.BAT: info for Fixed-width mask/bit helpers (rev2)
2023-05-09 5:14 ` Lucas De Marchi
` (12 preceding siblings ...)
(?)
@ 2023-05-09 16:27 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-05-09 16:27 UTC (permalink / raw)
To: Lucas De Marchi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 331 bytes --]
== Series Details ==
Series: Fixed-width mask/bit helpers (rev2)
URL : https://patchwork.freedesktop.org/series/117489/
State : info
== Summary ==
Participating hosts:
bat-atsm-2
bat-dg2-oem2
bat-adlp-7
Missing hosts results[0]:
Results: [xe-pw-117489v2](https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-117489v2/index.html)
[-- Attachment #2: Type: text/html, Size: 841 bytes --]
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 14:00 ` Gustavo Sousa
(?)
@ 2023-05-09 21:34 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 21:34 UTC (permalink / raw)
To: Gustavo Sousa
Cc: dri-devel, intel-gfx, intel-xe, Andrew Morton, Masahiro Yamada,
Kevin Brodsky, linux-kernel, Alex Deucher, Thomas Gleixner,
Andy Shevchenko, Christian König
On Tue, May 09, 2023 at 11:00:36AM -0300, Gustavo Sousa wrote:
>Quoting Lucas De Marchi (2023-05-09 02:14:02)
>>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>>masks for fixed-width types and also the corresponding BIT_U32(),
>>BIT_U16() and BIT_U8().
>>
>>All of those depend on a new "U" suffix added to the integer constant.
>>Due to naming clashes it's better to call the macro U32. Since C doesn't
>>have a proper suffix for short and char types, the U16 and U18 variants
>>just use U32 with one additional check in the BIT_* macros to make
>>sure the compiler gives an error when the those types overflow.
>>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>>as otherwise they would allow an invalid bit to be passed. Hence
>>implement them in include/linux/bits.h rather than together with
>>the other BIT* variants.
>>
>>The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>>diff --git a/include/linux/bits.h b/include/linux/bits.h
>>index 7c0cf5031abe..ff4786c99b8c 100644
>>--- a/include/linux/bits.h
>>+++ b/include/linux/bits.h
>>@@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>>+#define __GENMASK_U32(h, l) \
>>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>>+ (~U32(0) >> (32 - 1 - (h))))
>>+#define GENMASK_U32(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>>+
>>+#define __GENMASK_U16(h, l) \
>>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xffff) >> (16 - 1 - (h))))
>>+#define GENMASK_U16(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>>+
>>+#define __GENMASK_U8(h, l) \
>>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xff) >> (8 - 1 - (h))))
>>+#define GENMASK_U8(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>I wonder if we should use BIT_U* variants in the above to ensure the values are
>valid. If so, we get a nice boundary check and we also can use a single
>definition for the mask generation:
>
> #define __GENMASK_U32(h, l) \
> (((~U32(0)) - (U32(1) << (l)) + 1) & \
> (~U32(0) >> (32 - 1 - (h))))
the boundary for h and l are already covered here because (32 - 1 - (h))
would lead to a negative value if h >= 32. Similar reason for l
Doing ~U32(0) didn't work for me as it wouldn't catch the invalid values
due to expanding to U32_MAX
> #define GENMASK_U32(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
^^^^
that doesn't really work as BIT_U32(h) would expand here,
creating the equivalent of
~U32(0) >> (32 - 1 - (BIT_U32(h))),
which is not what we want
> #define GENMASK_U16(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
> #define GENMASK_U8(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>
>>+
>>+#define BIT_U32(nr) _BITU32(nr)
>>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
>
>Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
ugh, good catch. Thanks
I will think if I can come up with something that reuses a single
__GENMASK_U(). Meanwhile I improved my negative tests to cover more
cases.
Lucas De Marchi
>
>--
>Gustavo Sousa
>
>>+
>> #endif /* __LINUX_BITS_H */
>>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>>index a429381e7ca5..3a4e152520f4 100644
>>--- a/include/uapi/linux/const.h
>>+++ b/include/uapi/linux/const.h
>>@@ -22,9 +22,11 @@
>> #define _AT(T,X) ((T)(X))
>> #endif
>>
>>+#define _U32(x) (_AC(x, U))
>> #define _UL(x) (_AC(x, UL))
>> #define _ULL(x) (_AC(x, ULL))
>>
>>+#define _BITU32(x) (_U32(1) << (x))
>> #define _BITUL(x) (_UL(1) << (x))
>> #define _BITULL(x) (_ULL(1) << (x))
>>
>>diff --git a/include/vdso/const.h b/include/vdso/const.h
>>index 94b385ad438d..417384a9795b 100644
>>--- a/include/vdso/const.h
>>+++ b/include/vdso/const.h
>>@@ -4,6 +4,7 @@
>>
>> #include <uapi/linux/const.h>
>>
>>+#define U32(x) (_U32(x))
>> #define UL(x) (_UL(x))
>> #define ULL(x) (_ULL(x))
>>
>>--
>>2.40.1
>>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 21:34 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 21:34 UTC (permalink / raw)
To: Gustavo Sousa
Cc: Christian König, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Andy Shevchenko, Masahiro Yamada
On Tue, May 09, 2023 at 11:00:36AM -0300, Gustavo Sousa wrote:
>Quoting Lucas De Marchi (2023-05-09 02:14:02)
>>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>>masks for fixed-width types and also the corresponding BIT_U32(),
>>BIT_U16() and BIT_U8().
>>
>>All of those depend on a new "U" suffix added to the integer constant.
>>Due to naming clashes it's better to call the macro U32. Since C doesn't
>>have a proper suffix for short and char types, the U16 and U18 variants
>>just use U32 with one additional check in the BIT_* macros to make
>>sure the compiler gives an error when the those types overflow.
>>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>>as otherwise they would allow an invalid bit to be passed. Hence
>>implement them in include/linux/bits.h rather than together with
>>the other BIT* variants.
>>
>>The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>>diff --git a/include/linux/bits.h b/include/linux/bits.h
>>index 7c0cf5031abe..ff4786c99b8c 100644
>>--- a/include/linux/bits.h
>>+++ b/include/linux/bits.h
>>@@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>>+#define __GENMASK_U32(h, l) \
>>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>>+ (~U32(0) >> (32 - 1 - (h))))
>>+#define GENMASK_U32(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>>+
>>+#define __GENMASK_U16(h, l) \
>>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xffff) >> (16 - 1 - (h))))
>>+#define GENMASK_U16(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>>+
>>+#define __GENMASK_U8(h, l) \
>>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xff) >> (8 - 1 - (h))))
>>+#define GENMASK_U8(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>I wonder if we should use BIT_U* variants in the above to ensure the values are
>valid. If so, we get a nice boundary check and we also can use a single
>definition for the mask generation:
>
> #define __GENMASK_U32(h, l) \
> (((~U32(0)) - (U32(1) << (l)) + 1) & \
> (~U32(0) >> (32 - 1 - (h))))
the boundary for h and l are already covered here because (32 - 1 - (h))
would lead to a negative value if h >= 32. Similar reason for l
Doing ~U32(0) didn't work for me as it wouldn't catch the invalid values
due to expanding to U32_MAX
> #define GENMASK_U32(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
^^^^
that doesn't really work as BIT_U32(h) would expand here,
creating the equivalent of
~U32(0) >> (32 - 1 - (BIT_U32(h))),
which is not what we want
> #define GENMASK_U16(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
> #define GENMASK_U8(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>
>>+
>>+#define BIT_U32(nr) _BITU32(nr)
>>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
>
>Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
ugh, good catch. Thanks
I will think if I can come up with something that reuses a single
__GENMASK_U(). Meanwhile I improved my negative tests to cover more
cases.
Lucas De Marchi
>
>--
>Gustavo Sousa
>
>>+
>> #endif /* __LINUX_BITS_H */
>>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>>index a429381e7ca5..3a4e152520f4 100644
>>--- a/include/uapi/linux/const.h
>>+++ b/include/uapi/linux/const.h
>>@@ -22,9 +22,11 @@
>> #define _AT(T,X) ((T)(X))
>> #endif
>>
>>+#define _U32(x) (_AC(x, U))
>> #define _UL(x) (_AC(x, UL))
>> #define _ULL(x) (_AC(x, ULL))
>>
>>+#define _BITU32(x) (_U32(1) << (x))
>> #define _BITUL(x) (_UL(1) << (x))
>> #define _BITULL(x) (_ULL(1) << (x))
>>
>>diff --git a/include/vdso/const.h b/include/vdso/const.h
>>index 94b385ad438d..417384a9795b 100644
>>--- a/include/vdso/const.h
>>+++ b/include/vdso/const.h
>>@@ -4,6 +4,7 @@
>>
>> #include <uapi/linux/const.h>
>>
>>+#define U32(x) (_U32(x))
>> #define UL(x) (_UL(x))
>> #define ULL(x) (_ULL(x))
>>
>>--
>>2.40.1
>>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-09 21:34 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-09 21:34 UTC (permalink / raw)
To: Gustavo Sousa
Cc: Christian König, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Andy Shevchenko, Masahiro Yamada
On Tue, May 09, 2023 at 11:00:36AM -0300, Gustavo Sousa wrote:
>Quoting Lucas De Marchi (2023-05-09 02:14:02)
>>Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>>masks for fixed-width types and also the corresponding BIT_U32(),
>>BIT_U16() and BIT_U8().
>>
>>All of those depend on a new "U" suffix added to the integer constant.
>>Due to naming clashes it's better to call the macro U32. Since C doesn't
>>have a proper suffix for short and char types, the U16 and U18 variants
>>just use U32 with one additional check in the BIT_* macros to make
>>sure the compiler gives an error when the those types overflow.
>>The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>>as otherwise they would allow an invalid bit to be passed. Hence
>>implement them in include/linux/bits.h rather than together with
>>the other BIT* variants.
>>
>>The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>>Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>>---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>>diff --git a/include/linux/bits.h b/include/linux/bits.h
>>index 7c0cf5031abe..ff4786c99b8c 100644
>>--- a/include/linux/bits.h
>>+++ b/include/linux/bits.h
>>@@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>>+#define __GENMASK_U32(h, l) \
>>+ (((~U32(0)) - (U32(1) << (l)) + 1) & \
>>+ (~U32(0) >> (32 - 1 - (h))))
>>+#define GENMASK_U32(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>>+
>>+#define __GENMASK_U16(h, l) \
>>+ ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xffff) >> (16 - 1 - (h))))
>>+#define GENMASK_U16(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>>+
>>+#define __GENMASK_U8(h, l) \
>>+ (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>>+ (U32(0xff) >> (8 - 1 - (h))))
>>+#define GENMASK_U8(h, l) \
>>+ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>I wonder if we should use BIT_U* variants in the above to ensure the values are
>valid. If so, we get a nice boundary check and we also can use a single
>definition for the mask generation:
>
> #define __GENMASK_U32(h, l) \
> (((~U32(0)) - (U32(1) << (l)) + 1) & \
> (~U32(0) >> (32 - 1 - (h))))
the boundary for h and l are already covered here because (32 - 1 - (h))
would lead to a negative value if h >= 32. Similar reason for l
Doing ~U32(0) didn't work for me as it wouldn't catch the invalid values
due to expanding to U32_MAX
> #define GENMASK_U32(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U32(h), BIT_U32(l)))
^^^^
that doesn't really work as BIT_U32(h) would expand here,
creating the equivalent of
~U32(0) >> (32 - 1 - (BIT_U32(h))),
which is not what we want
> #define GENMASK_U16(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U16(h), BIT_U16(l)))
> #define GENMASK_U8(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(BIT_U8(h), BIT_U8(l)))
>
>>+
>>+#define BIT_U32(nr) _BITU32(nr)
>>+#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr)))
>>+#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr)))
>
>Shouldn't this be GENMASK_INPUT_CHECK(8 - 1, nr)?
ugh, good catch. Thanks
I will think if I can come up with something that reuses a single
__GENMASK_U(). Meanwhile I improved my negative tests to cover more
cases.
Lucas De Marchi
>
>--
>Gustavo Sousa
>
>>+
>> #endif /* __LINUX_BITS_H */
>>diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h
>>index a429381e7ca5..3a4e152520f4 100644
>>--- a/include/uapi/linux/const.h
>>+++ b/include/uapi/linux/const.h
>>@@ -22,9 +22,11 @@
>> #define _AT(T,X) ((T)(X))
>> #endif
>>
>>+#define _U32(x) (_AC(x, U))
>> #define _UL(x) (_AC(x, UL))
>> #define _ULL(x) (_AC(x, ULL))
>>
>>+#define _BITU32(x) (_U32(1) << (x))
>> #define _BITUL(x) (_UL(1) << (x))
>> #define _BITULL(x) (_ULL(1) << (x))
>>
>>diff --git a/include/vdso/const.h b/include/vdso/const.h
>>index 94b385ad438d..417384a9795b 100644
>>--- a/include/vdso/const.h
>>+++ b/include/vdso/const.h
>>@@ -4,6 +4,7 @@
>>
>> #include <uapi/linux/const.h>
>>
>>+#define U32(x) (_U32(x))
>> #define UL(x) (_UL(x))
>> #define ULL(x) (_ULL(x))
>>
>>--
>>2.40.1
>>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-10 12:18 ` kernel test robot
-1 siblings, 0 replies; 114+ messages in thread
From: kernel test robot @ 2023-05-10 12:18 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: llvm, oe-kbuild-all, Andy Shevchenko, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton,
Linux Memory Management List, Kevin Brodsky, Alex Deucher,
Christian König, Jani Nikula, Lucas De Marchi
Hi Lucas,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-intel/for-linux-next-fixes drm-tip/drm-tip linus/master v6.4-rc1 next-20230510]
[cannot apply to drm-misc/drm-misc-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/20230509051403.2748545-3-lucas.demarchi%40intel.com
patch subject: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
config: arm64-randconfig-r021-20230509 (https://download.01.org/0day-ci/archive/20230510/202305102048.2O5u4Wia-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project b0fb98227c90adf2536c9ad644a74d5e92961111)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
git checkout dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash lib/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305102048.2O5u4Wia-lkp@intel.com/
All errors (new ones prefixed by >>):
>> lib/zstd/compress/zstd_opt.c:785:9: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
typedef U32 (*ZSTD_getAllMatchesFn)(
~~~~~~~ ^
int
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:851:8: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
static ZSTD_getAllMatchesFn
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:854:5: error: use of undeclared identifier 'ZSTD_getAllMatchesFn'
ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
^
>> lib/zstd/compress/zstd_opt.c:862:12: error: use of undeclared identifier 'getAllMatchesFns'
return getAllMatchesFns[(int)dictMode][mls - 3];
^
lib/zstd/compress/zstd_opt.c:1054:5: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
ZSTD_getAllMatchesFn getAllMatches = ZSTD_selectBtGetAllMatches(ms, dictMode);
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
5 errors generated.
vim +/int +785 lib/zstd/compress/zstd_opt.c
e0c1b49f5b674c Nick Terrell 2020-09-11 784
2aa14b1ab2c41a Nick Terrell 2022-10-17 @785 typedef U32 (*ZSTD_getAllMatchesFn)(
2aa14b1ab2c41a Nick Terrell 2022-10-17 786 ZSTD_match_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 787 ZSTD_matchState_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 788 U32*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 789 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 790 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 791 const U32 rep[ZSTD_REP_NUM],
2aa14b1ab2c41a Nick Terrell 2022-10-17 792 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 793 U32 const lengthToBeat);
e0c1b49f5b674c Nick Terrell 2020-09-11 794
2aa14b1ab2c41a Nick Terrell 2022-10-17 795 FORCE_INLINE_TEMPLATE U32 ZSTD_btGetAllMatches_internal(
2aa14b1ab2c41a Nick Terrell 2022-10-17 796 ZSTD_match_t* matches,
e0c1b49f5b674c Nick Terrell 2020-09-11 797 ZSTD_matchState_t* ms,
e0c1b49f5b674c Nick Terrell 2020-09-11 798 U32* nextToUpdate3,
2aa14b1ab2c41a Nick Terrell 2022-10-17 799 const BYTE* ip,
2aa14b1ab2c41a Nick Terrell 2022-10-17 800 const BYTE* const iHighLimit,
e0c1b49f5b674c Nick Terrell 2020-09-11 801 const U32 rep[ZSTD_REP_NUM],
e0c1b49f5b674c Nick Terrell 2020-09-11 802 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 803 U32 const lengthToBeat,
2aa14b1ab2c41a Nick Terrell 2022-10-17 804 const ZSTD_dictMode_e dictMode,
2aa14b1ab2c41a Nick Terrell 2022-10-17 805 const U32 mls)
e0c1b49f5b674c Nick Terrell 2020-09-11 806 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 807 assert(BOUNDED(3, ms->cParams.minMatch, 6) == mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 808 DEBUGLOG(8, "ZSTD_BtGetAllMatches(dictMode=%d, mls=%u)", (int)dictMode, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 809 if (ip < ms->window.base + ms->nextToUpdate)
2aa14b1ab2c41a Nick Terrell 2022-10-17 810 return 0; /* skipped area */
2aa14b1ab2c41a Nick Terrell 2022-10-17 811 ZSTD_updateTree_internal(ms, ip, iHighLimit, mls, dictMode);
2aa14b1ab2c41a Nick Terrell 2022-10-17 812 return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 813 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 814
2aa14b1ab2c41a Nick Terrell 2022-10-17 815 #define ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls) ZSTD_btGetAllMatches_##dictMode##_##mls
2aa14b1ab2c41a Nick Terrell 2022-10-17 816
2aa14b1ab2c41a Nick Terrell 2022-10-17 817 #define GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, mls) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 818 static U32 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls)( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 819 ZSTD_match_t* matches, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 820 ZSTD_matchState_t* ms, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 821 U32* nextToUpdate3, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 822 const BYTE* ip, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 823 const BYTE* const iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 824 const U32 rep[ZSTD_REP_NUM], \
2aa14b1ab2c41a Nick Terrell 2022-10-17 825 U32 const ll0, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 826 U32 const lengthToBeat) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 827 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 828 return ZSTD_btGetAllMatches_internal( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 829 matches, ms, nextToUpdate3, ip, iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 830 rep, ll0, lengthToBeat, ZSTD_##dictMode, mls); \
2aa14b1ab2c41a Nick Terrell 2022-10-17 831 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 832
2aa14b1ab2c41a Nick Terrell 2022-10-17 833 #define GEN_ZSTD_BT_GET_ALL_MATCHES(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 834 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 3) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 835 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 4) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 836 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 5) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 837 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 6)
2aa14b1ab2c41a Nick Terrell 2022-10-17 838
2aa14b1ab2c41a Nick Terrell 2022-10-17 839 GEN_ZSTD_BT_GET_ALL_MATCHES(noDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 840 GEN_ZSTD_BT_GET_ALL_MATCHES(extDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 841 GEN_ZSTD_BT_GET_ALL_MATCHES(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 842
2aa14b1ab2c41a Nick Terrell 2022-10-17 843 #define ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 844 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 845 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 3), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 846 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 4), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 847 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 5), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 848 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 6) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 849 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 850
2aa14b1ab2c41a Nick Terrell 2022-10-17 @851 static ZSTD_getAllMatchesFn
2aa14b1ab2c41a Nick Terrell 2022-10-17 852 ZSTD_selectBtGetAllMatches(ZSTD_matchState_t const* ms, ZSTD_dictMode_e const dictMode)
e0c1b49f5b674c Nick Terrell 2020-09-11 853 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 @854 ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
2aa14b1ab2c41a Nick Terrell 2022-10-17 855 ZSTD_BT_GET_ALL_MATCHES_ARRAY(noDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 856 ZSTD_BT_GET_ALL_MATCHES_ARRAY(extDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 857 ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 858 };
2aa14b1ab2c41a Nick Terrell 2022-10-17 859 U32 const mls = BOUNDED(3, ms->cParams.minMatch, 6);
2aa14b1ab2c41a Nick Terrell 2022-10-17 860 assert((U32)dictMode < 3);
2aa14b1ab2c41a Nick Terrell 2022-10-17 861 assert(mls - 3 < 4);
2aa14b1ab2c41a Nick Terrell 2022-10-17 @862 return getAllMatchesFns[(int)dictMode][mls - 3];
e0c1b49f5b674c Nick Terrell 2020-09-11 863 }
e0c1b49f5b674c Nick Terrell 2020-09-11 864
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-10 12:18 ` kernel test robot
0 siblings, 0 replies; 114+ messages in thread
From: kernel test robot @ 2023-05-10 12:18 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Kevin Brodsky, Masahiro Yamada, llvm, Lucas De Marchi,
linux-kernel, Christian König, Linux Memory Management List,
oe-kbuild-all, Alex Deucher, Thomas Gleixner, Andy Shevchenko,
Andrew Morton
Hi Lucas,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-intel/for-linux-next-fixes drm-tip/drm-tip linus/master v6.4-rc1 next-20230510]
[cannot apply to drm-misc/drm-misc-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/20230509051403.2748545-3-lucas.demarchi%40intel.com
patch subject: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
config: arm64-randconfig-r021-20230509 (https://download.01.org/0day-ci/archive/20230510/202305102048.2O5u4Wia-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project b0fb98227c90adf2536c9ad644a74d5e92961111)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
git checkout dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash lib/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305102048.2O5u4Wia-lkp@intel.com/
All errors (new ones prefixed by >>):
>> lib/zstd/compress/zstd_opt.c:785:9: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
typedef U32 (*ZSTD_getAllMatchesFn)(
~~~~~~~ ^
int
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:851:8: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
static ZSTD_getAllMatchesFn
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:854:5: error: use of undeclared identifier 'ZSTD_getAllMatchesFn'
ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
^
>> lib/zstd/compress/zstd_opt.c:862:12: error: use of undeclared identifier 'getAllMatchesFns'
return getAllMatchesFns[(int)dictMode][mls - 3];
^
lib/zstd/compress/zstd_opt.c:1054:5: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
ZSTD_getAllMatchesFn getAllMatches = ZSTD_selectBtGetAllMatches(ms, dictMode);
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
5 errors generated.
vim +/int +785 lib/zstd/compress/zstd_opt.c
e0c1b49f5b674c Nick Terrell 2020-09-11 784
2aa14b1ab2c41a Nick Terrell 2022-10-17 @785 typedef U32 (*ZSTD_getAllMatchesFn)(
2aa14b1ab2c41a Nick Terrell 2022-10-17 786 ZSTD_match_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 787 ZSTD_matchState_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 788 U32*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 789 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 790 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 791 const U32 rep[ZSTD_REP_NUM],
2aa14b1ab2c41a Nick Terrell 2022-10-17 792 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 793 U32 const lengthToBeat);
e0c1b49f5b674c Nick Terrell 2020-09-11 794
2aa14b1ab2c41a Nick Terrell 2022-10-17 795 FORCE_INLINE_TEMPLATE U32 ZSTD_btGetAllMatches_internal(
2aa14b1ab2c41a Nick Terrell 2022-10-17 796 ZSTD_match_t* matches,
e0c1b49f5b674c Nick Terrell 2020-09-11 797 ZSTD_matchState_t* ms,
e0c1b49f5b674c Nick Terrell 2020-09-11 798 U32* nextToUpdate3,
2aa14b1ab2c41a Nick Terrell 2022-10-17 799 const BYTE* ip,
2aa14b1ab2c41a Nick Terrell 2022-10-17 800 const BYTE* const iHighLimit,
e0c1b49f5b674c Nick Terrell 2020-09-11 801 const U32 rep[ZSTD_REP_NUM],
e0c1b49f5b674c Nick Terrell 2020-09-11 802 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 803 U32 const lengthToBeat,
2aa14b1ab2c41a Nick Terrell 2022-10-17 804 const ZSTD_dictMode_e dictMode,
2aa14b1ab2c41a Nick Terrell 2022-10-17 805 const U32 mls)
e0c1b49f5b674c Nick Terrell 2020-09-11 806 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 807 assert(BOUNDED(3, ms->cParams.minMatch, 6) == mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 808 DEBUGLOG(8, "ZSTD_BtGetAllMatches(dictMode=%d, mls=%u)", (int)dictMode, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 809 if (ip < ms->window.base + ms->nextToUpdate)
2aa14b1ab2c41a Nick Terrell 2022-10-17 810 return 0; /* skipped area */
2aa14b1ab2c41a Nick Terrell 2022-10-17 811 ZSTD_updateTree_internal(ms, ip, iHighLimit, mls, dictMode);
2aa14b1ab2c41a Nick Terrell 2022-10-17 812 return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 813 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 814
2aa14b1ab2c41a Nick Terrell 2022-10-17 815 #define ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls) ZSTD_btGetAllMatches_##dictMode##_##mls
2aa14b1ab2c41a Nick Terrell 2022-10-17 816
2aa14b1ab2c41a Nick Terrell 2022-10-17 817 #define GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, mls) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 818 static U32 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls)( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 819 ZSTD_match_t* matches, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 820 ZSTD_matchState_t* ms, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 821 U32* nextToUpdate3, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 822 const BYTE* ip, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 823 const BYTE* const iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 824 const U32 rep[ZSTD_REP_NUM], \
2aa14b1ab2c41a Nick Terrell 2022-10-17 825 U32 const ll0, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 826 U32 const lengthToBeat) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 827 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 828 return ZSTD_btGetAllMatches_internal( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 829 matches, ms, nextToUpdate3, ip, iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 830 rep, ll0, lengthToBeat, ZSTD_##dictMode, mls); \
2aa14b1ab2c41a Nick Terrell 2022-10-17 831 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 832
2aa14b1ab2c41a Nick Terrell 2022-10-17 833 #define GEN_ZSTD_BT_GET_ALL_MATCHES(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 834 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 3) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 835 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 4) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 836 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 5) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 837 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 6)
2aa14b1ab2c41a Nick Terrell 2022-10-17 838
2aa14b1ab2c41a Nick Terrell 2022-10-17 839 GEN_ZSTD_BT_GET_ALL_MATCHES(noDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 840 GEN_ZSTD_BT_GET_ALL_MATCHES(extDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 841 GEN_ZSTD_BT_GET_ALL_MATCHES(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 842
2aa14b1ab2c41a Nick Terrell 2022-10-17 843 #define ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 844 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 845 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 3), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 846 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 4), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 847 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 5), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 848 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 6) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 849 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 850
2aa14b1ab2c41a Nick Terrell 2022-10-17 @851 static ZSTD_getAllMatchesFn
2aa14b1ab2c41a Nick Terrell 2022-10-17 852 ZSTD_selectBtGetAllMatches(ZSTD_matchState_t const* ms, ZSTD_dictMode_e const dictMode)
e0c1b49f5b674c Nick Terrell 2020-09-11 853 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 @854 ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
2aa14b1ab2c41a Nick Terrell 2022-10-17 855 ZSTD_BT_GET_ALL_MATCHES_ARRAY(noDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 856 ZSTD_BT_GET_ALL_MATCHES_ARRAY(extDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 857 ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 858 };
2aa14b1ab2c41a Nick Terrell 2022-10-17 859 U32 const mls = BOUNDED(3, ms->cParams.minMatch, 6);
2aa14b1ab2c41a Nick Terrell 2022-10-17 860 assert((U32)dictMode < 3);
2aa14b1ab2c41a Nick Terrell 2022-10-17 861 assert(mls - 3 < 4);
2aa14b1ab2c41a Nick Terrell 2022-10-17 @862 return getAllMatchesFns[(int)dictMode][mls - 3];
e0c1b49f5b674c Nick Terrell 2020-09-11 863 }
e0c1b49f5b674c Nick Terrell 2020-09-11 864
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-10 12:18 ` kernel test robot
0 siblings, 0 replies; 114+ messages in thread
From: kernel test robot @ 2023-05-10 12:18 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Kevin Brodsky, Masahiro Yamada, llvm, Lucas De Marchi,
linux-kernel, Christian König, Linux Memory Management List,
oe-kbuild-all, Alex Deucher, Thomas Gleixner, Andy Shevchenko,
Andrew Morton
Hi Lucas,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-intel/for-linux-next-fixes drm-tip/drm-tip linus/master v6.4-rc1 next-20230510]
[cannot apply to drm-misc/drm-misc-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/20230509051403.2748545-3-lucas.demarchi%40intel.com
patch subject: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
config: arm64-randconfig-r021-20230509 (https://download.01.org/0day-ci/archive/20230510/202305102048.2O5u4Wia-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project b0fb98227c90adf2536c9ad644a74d5e92961111)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
git checkout dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash lib/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305102048.2O5u4Wia-lkp@intel.com/
All errors (new ones prefixed by >>):
>> lib/zstd/compress/zstd_opt.c:785:9: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
typedef U32 (*ZSTD_getAllMatchesFn)(
~~~~~~~ ^
int
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:851:8: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
static ZSTD_getAllMatchesFn
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:854:5: error: use of undeclared identifier 'ZSTD_getAllMatchesFn'
ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
^
>> lib/zstd/compress/zstd_opt.c:862:12: error: use of undeclared identifier 'getAllMatchesFns'
return getAllMatchesFns[(int)dictMode][mls - 3];
^
lib/zstd/compress/zstd_opt.c:1054:5: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
ZSTD_getAllMatchesFn getAllMatches = ZSTD_selectBtGetAllMatches(ms, dictMode);
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
5 errors generated.
vim +/int +785 lib/zstd/compress/zstd_opt.c
e0c1b49f5b674c Nick Terrell 2020-09-11 784
2aa14b1ab2c41a Nick Terrell 2022-10-17 @785 typedef U32 (*ZSTD_getAllMatchesFn)(
2aa14b1ab2c41a Nick Terrell 2022-10-17 786 ZSTD_match_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 787 ZSTD_matchState_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 788 U32*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 789 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 790 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 791 const U32 rep[ZSTD_REP_NUM],
2aa14b1ab2c41a Nick Terrell 2022-10-17 792 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 793 U32 const lengthToBeat);
e0c1b49f5b674c Nick Terrell 2020-09-11 794
2aa14b1ab2c41a Nick Terrell 2022-10-17 795 FORCE_INLINE_TEMPLATE U32 ZSTD_btGetAllMatches_internal(
2aa14b1ab2c41a Nick Terrell 2022-10-17 796 ZSTD_match_t* matches,
e0c1b49f5b674c Nick Terrell 2020-09-11 797 ZSTD_matchState_t* ms,
e0c1b49f5b674c Nick Terrell 2020-09-11 798 U32* nextToUpdate3,
2aa14b1ab2c41a Nick Terrell 2022-10-17 799 const BYTE* ip,
2aa14b1ab2c41a Nick Terrell 2022-10-17 800 const BYTE* const iHighLimit,
e0c1b49f5b674c Nick Terrell 2020-09-11 801 const U32 rep[ZSTD_REP_NUM],
e0c1b49f5b674c Nick Terrell 2020-09-11 802 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 803 U32 const lengthToBeat,
2aa14b1ab2c41a Nick Terrell 2022-10-17 804 const ZSTD_dictMode_e dictMode,
2aa14b1ab2c41a Nick Terrell 2022-10-17 805 const U32 mls)
e0c1b49f5b674c Nick Terrell 2020-09-11 806 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 807 assert(BOUNDED(3, ms->cParams.minMatch, 6) == mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 808 DEBUGLOG(8, "ZSTD_BtGetAllMatches(dictMode=%d, mls=%u)", (int)dictMode, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 809 if (ip < ms->window.base + ms->nextToUpdate)
2aa14b1ab2c41a Nick Terrell 2022-10-17 810 return 0; /* skipped area */
2aa14b1ab2c41a Nick Terrell 2022-10-17 811 ZSTD_updateTree_internal(ms, ip, iHighLimit, mls, dictMode);
2aa14b1ab2c41a Nick Terrell 2022-10-17 812 return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 813 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 814
2aa14b1ab2c41a Nick Terrell 2022-10-17 815 #define ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls) ZSTD_btGetAllMatches_##dictMode##_##mls
2aa14b1ab2c41a Nick Terrell 2022-10-17 816
2aa14b1ab2c41a Nick Terrell 2022-10-17 817 #define GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, mls) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 818 static U32 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls)( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 819 ZSTD_match_t* matches, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 820 ZSTD_matchState_t* ms, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 821 U32* nextToUpdate3, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 822 const BYTE* ip, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 823 const BYTE* const iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 824 const U32 rep[ZSTD_REP_NUM], \
2aa14b1ab2c41a Nick Terrell 2022-10-17 825 U32 const ll0, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 826 U32 const lengthToBeat) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 827 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 828 return ZSTD_btGetAllMatches_internal( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 829 matches, ms, nextToUpdate3, ip, iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 830 rep, ll0, lengthToBeat, ZSTD_##dictMode, mls); \
2aa14b1ab2c41a Nick Terrell 2022-10-17 831 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 832
2aa14b1ab2c41a Nick Terrell 2022-10-17 833 #define GEN_ZSTD_BT_GET_ALL_MATCHES(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 834 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 3) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 835 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 4) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 836 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 5) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 837 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 6)
2aa14b1ab2c41a Nick Terrell 2022-10-17 838
2aa14b1ab2c41a Nick Terrell 2022-10-17 839 GEN_ZSTD_BT_GET_ALL_MATCHES(noDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 840 GEN_ZSTD_BT_GET_ALL_MATCHES(extDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 841 GEN_ZSTD_BT_GET_ALL_MATCHES(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 842
2aa14b1ab2c41a Nick Terrell 2022-10-17 843 #define ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 844 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 845 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 3), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 846 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 4), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 847 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 5), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 848 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 6) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 849 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 850
2aa14b1ab2c41a Nick Terrell 2022-10-17 @851 static ZSTD_getAllMatchesFn
2aa14b1ab2c41a Nick Terrell 2022-10-17 852 ZSTD_selectBtGetAllMatches(ZSTD_matchState_t const* ms, ZSTD_dictMode_e const dictMode)
e0c1b49f5b674c Nick Terrell 2020-09-11 853 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 @854 ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
2aa14b1ab2c41a Nick Terrell 2022-10-17 855 ZSTD_BT_GET_ALL_MATCHES_ARRAY(noDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 856 ZSTD_BT_GET_ALL_MATCHES_ARRAY(extDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 857 ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 858 };
2aa14b1ab2c41a Nick Terrell 2022-10-17 859 U32 const mls = BOUNDED(3, ms->cParams.minMatch, 6);
2aa14b1ab2c41a Nick Terrell 2022-10-17 860 assert((U32)dictMode < 3);
2aa14b1ab2c41a Nick Terrell 2022-10-17 861 assert(mls - 3 < 4);
2aa14b1ab2c41a Nick Terrell 2022-10-17 @862 return getAllMatchesFns[(int)dictMode][mls - 3];
e0c1b49f5b674c Nick Terrell 2020-09-11 863 }
e0c1b49f5b674c Nick Terrell 2020-09-11 864
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-10 12:18 ` kernel test robot
0 siblings, 0 replies; 114+ messages in thread
From: kernel test robot @ 2023-05-10 12:18 UTC (permalink / raw)
To: Lucas De Marchi, intel-gfx, intel-xe, dri-devel
Cc: Kevin Brodsky, Masahiro Yamada, llvm, Lucas De Marchi,
linux-kernel, Christian König, Linux Memory Management List,
oe-kbuild-all, Alex Deucher, Thomas Gleixner, Andy Shevchenko,
Andrew Morton
Hi Lucas,
kernel test robot noticed the following build errors:
[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-intel/for-linux-next-fixes drm-tip/drm-tip linus/master v6.4-rc1 next-20230510]
[cannot apply to drm-misc/drm-misc-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
base: git://anongit.freedesktop.org/drm-intel for-linux-next
patch link: https://lore.kernel.org/r/20230509051403.2748545-3-lucas.demarchi%40intel.com
patch subject: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
config: arm64-randconfig-r021-20230509 (https://download.01.org/0day-ci/archive/20230510/202305102048.2O5u4Wia-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project b0fb98227c90adf2536c9ad644a74d5e92961111)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Lucas-De-Marchi/drm-amd-Remove-wrapper-macros-over-get_u-32-16-8/20230509-131544
git checkout dc308f14f76fa2d6c1698a701dfbe0f1b247e6bd
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash lib/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202305102048.2O5u4Wia-lkp@intel.com/
All errors (new ones prefixed by >>):
>> lib/zstd/compress/zstd_opt.c:785:9: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
typedef U32 (*ZSTD_getAllMatchesFn)(
~~~~~~~ ^
int
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:851:8: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
static ZSTD_getAllMatchesFn
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
>> lib/zstd/compress/zstd_opt.c:854:5: error: use of undeclared identifier 'ZSTD_getAllMatchesFn'
ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
^
>> lib/zstd/compress/zstd_opt.c:862:12: error: use of undeclared identifier 'getAllMatchesFns'
return getAllMatchesFns[(int)dictMode][mls - 3];
^
lib/zstd/compress/zstd_opt.c:1054:5: error: unknown type name 'ZSTD_getAllMatchesFn'; did you mean 'ZSTD_getAllMatchesFnU'?
ZSTD_getAllMatchesFn getAllMatches = ZSTD_selectBtGetAllMatches(ms, dictMode);
^~~~~~~~~~~~~~~~~~~~
ZSTD_getAllMatchesFnU
lib/zstd/compress/zstd_opt.c:785:9: note: 'ZSTD_getAllMatchesFnU' declared here
typedef U32 (*ZSTD_getAllMatchesFn)(
^
include/vdso/const.h:7:18: note: expanded from macro 'U32'
#define U32(x) (_U32(x))
^
include/uapi/linux/const.h:25:19: note: expanded from macro '_U32'
#define _U32(x) (_AC(x, U))
^
include/uapi/linux/const.h:21:18: note: expanded from macro '_AC'
#define _AC(X,Y) __AC(X,Y)
^
include/uapi/linux/const.h:20:20: note: expanded from macro '__AC'
#define __AC(X,Y) (X##Y)
^
<scratch space>:178:1: note: expanded from here
ZSTD_getAllMatchesFnU
^
5 errors generated.
vim +/int +785 lib/zstd/compress/zstd_opt.c
e0c1b49f5b674c Nick Terrell 2020-09-11 784
2aa14b1ab2c41a Nick Terrell 2022-10-17 @785 typedef U32 (*ZSTD_getAllMatchesFn)(
2aa14b1ab2c41a Nick Terrell 2022-10-17 786 ZSTD_match_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 787 ZSTD_matchState_t*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 788 U32*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 789 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 790 const BYTE*,
2aa14b1ab2c41a Nick Terrell 2022-10-17 791 const U32 rep[ZSTD_REP_NUM],
2aa14b1ab2c41a Nick Terrell 2022-10-17 792 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 793 U32 const lengthToBeat);
e0c1b49f5b674c Nick Terrell 2020-09-11 794
2aa14b1ab2c41a Nick Terrell 2022-10-17 795 FORCE_INLINE_TEMPLATE U32 ZSTD_btGetAllMatches_internal(
2aa14b1ab2c41a Nick Terrell 2022-10-17 796 ZSTD_match_t* matches,
e0c1b49f5b674c Nick Terrell 2020-09-11 797 ZSTD_matchState_t* ms,
e0c1b49f5b674c Nick Terrell 2020-09-11 798 U32* nextToUpdate3,
2aa14b1ab2c41a Nick Terrell 2022-10-17 799 const BYTE* ip,
2aa14b1ab2c41a Nick Terrell 2022-10-17 800 const BYTE* const iHighLimit,
e0c1b49f5b674c Nick Terrell 2020-09-11 801 const U32 rep[ZSTD_REP_NUM],
e0c1b49f5b674c Nick Terrell 2020-09-11 802 U32 const ll0,
2aa14b1ab2c41a Nick Terrell 2022-10-17 803 U32 const lengthToBeat,
2aa14b1ab2c41a Nick Terrell 2022-10-17 804 const ZSTD_dictMode_e dictMode,
2aa14b1ab2c41a Nick Terrell 2022-10-17 805 const U32 mls)
e0c1b49f5b674c Nick Terrell 2020-09-11 806 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 807 assert(BOUNDED(3, ms->cParams.minMatch, 6) == mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 808 DEBUGLOG(8, "ZSTD_BtGetAllMatches(dictMode=%d, mls=%u)", (int)dictMode, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 809 if (ip < ms->window.base + ms->nextToUpdate)
2aa14b1ab2c41a Nick Terrell 2022-10-17 810 return 0; /* skipped area */
2aa14b1ab2c41a Nick Terrell 2022-10-17 811 ZSTD_updateTree_internal(ms, ip, iHighLimit, mls, dictMode);
2aa14b1ab2c41a Nick Terrell 2022-10-17 812 return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, mls);
2aa14b1ab2c41a Nick Terrell 2022-10-17 813 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 814
2aa14b1ab2c41a Nick Terrell 2022-10-17 815 #define ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls) ZSTD_btGetAllMatches_##dictMode##_##mls
2aa14b1ab2c41a Nick Terrell 2022-10-17 816
2aa14b1ab2c41a Nick Terrell 2022-10-17 817 #define GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, mls) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 818 static U32 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls)( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 819 ZSTD_match_t* matches, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 820 ZSTD_matchState_t* ms, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 821 U32* nextToUpdate3, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 822 const BYTE* ip, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 823 const BYTE* const iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 824 const U32 rep[ZSTD_REP_NUM], \
2aa14b1ab2c41a Nick Terrell 2022-10-17 825 U32 const ll0, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 826 U32 const lengthToBeat) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 827 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 828 return ZSTD_btGetAllMatches_internal( \
2aa14b1ab2c41a Nick Terrell 2022-10-17 829 matches, ms, nextToUpdate3, ip, iHighLimit, \
2aa14b1ab2c41a Nick Terrell 2022-10-17 830 rep, ll0, lengthToBeat, ZSTD_##dictMode, mls); \
2aa14b1ab2c41a Nick Terrell 2022-10-17 831 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 832
2aa14b1ab2c41a Nick Terrell 2022-10-17 833 #define GEN_ZSTD_BT_GET_ALL_MATCHES(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 834 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 3) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 835 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 4) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 836 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 5) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 837 GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 6)
2aa14b1ab2c41a Nick Terrell 2022-10-17 838
2aa14b1ab2c41a Nick Terrell 2022-10-17 839 GEN_ZSTD_BT_GET_ALL_MATCHES(noDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 840 GEN_ZSTD_BT_GET_ALL_MATCHES(extDict)
2aa14b1ab2c41a Nick Terrell 2022-10-17 841 GEN_ZSTD_BT_GET_ALL_MATCHES(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 842
2aa14b1ab2c41a Nick Terrell 2022-10-17 843 #define ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMode) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 844 { \
2aa14b1ab2c41a Nick Terrell 2022-10-17 845 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 3), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 846 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 4), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 847 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 5), \
2aa14b1ab2c41a Nick Terrell 2022-10-17 848 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 6) \
2aa14b1ab2c41a Nick Terrell 2022-10-17 849 }
2aa14b1ab2c41a Nick Terrell 2022-10-17 850
2aa14b1ab2c41a Nick Terrell 2022-10-17 @851 static ZSTD_getAllMatchesFn
2aa14b1ab2c41a Nick Terrell 2022-10-17 852 ZSTD_selectBtGetAllMatches(ZSTD_matchState_t const* ms, ZSTD_dictMode_e const dictMode)
e0c1b49f5b674c Nick Terrell 2020-09-11 853 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 @854 ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
2aa14b1ab2c41a Nick Terrell 2022-10-17 855 ZSTD_BT_GET_ALL_MATCHES_ARRAY(noDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 856 ZSTD_BT_GET_ALL_MATCHES_ARRAY(extDict),
2aa14b1ab2c41a Nick Terrell 2022-10-17 857 ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMatchState)
2aa14b1ab2c41a Nick Terrell 2022-10-17 858 };
2aa14b1ab2c41a Nick Terrell 2022-10-17 859 U32 const mls = BOUNDED(3, ms->cParams.minMatch, 6);
2aa14b1ab2c41a Nick Terrell 2022-10-17 860 assert((U32)dictMode < 3);
2aa14b1ab2c41a Nick Terrell 2022-10-17 861 assert(mls - 3 < 4);
2aa14b1ab2c41a Nick Terrell 2022-10-17 @862 return getAllMatchesFns[(int)dictMode][mls - 3];
e0c1b49f5b674c Nick Terrell 2020-09-11 863 }
e0c1b49f5b674c Nick Terrell 2020-09-11 864
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-05-12 11:14 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:14 UTC (permalink / raw)
To: Lucas De Marchi
Cc: intel-gfx, intel-xe, dri-devel, Thomas Gleixner, linux-kernel,
Masahiro Yamada, Andrew Morton, Kevin Brodsky, Alex Deucher,
Christian König, Jani Nikula
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Why?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
So, we have _Generic() in case you still wish to implement this.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:14 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:14 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Why?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
So, we have _Generic() in case you still wish to implement this.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:14 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:14 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Why?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
So, we have _Generic() in case you still wish to implement this.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:14 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:14 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Why?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
So, we have _Generic() in case you still wish to implement this.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 11:14 ` Andy Shevchenko
(?)
(?)
@ 2023-05-12 11:25 ` Jani Nikula
-1 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:25 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
> Why?
The main reason is that GENMASK() and BIT() size varies for 32/64 bit
builds.
BR,
Jani.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
> So, we have _Generic() in case you still wish to implement this.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:25 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:25 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: intel-gfx, intel-xe, dri-devel, Thomas Gleixner, linux-kernel,
Masahiro Yamada, Andrew Morton, Kevin Brodsky, Alex Deucher,
Christian König
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
> Why?
The main reason is that GENMASK() and BIT() size varies for 32/64 bit
builds.
BR,
Jani.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
> So, we have _Generic() in case you still wish to implement this.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:25 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:25 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
> Why?
The main reason is that GENMASK() and BIT() size varies for 32/64 bit
builds.
BR,
Jani.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
> So, we have _Generic() in case you still wish to implement this.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:25 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:25 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
> Why?
The main reason is that GENMASK() and BIT() size varies for 32/64 bit
builds.
BR,
Jani.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
> So, we have _Generic() in case you still wish to implement this.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 11:25 ` Jani Nikula
(?)
(?)
@ 2023-05-12 11:32 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:32 UTC (permalink / raw)
To: Jani Nikula
Cc: Lucas De Marchi, intel-gfx, intel-xe, dri-devel, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> BIT_U16() and BIT_U8().
> >
> > Why?
>
> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> builds.
When needed GENMASK_ULL() can be used (with respective castings perhaps)
and BIT_ULL(), no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:32 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:32 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> BIT_U16() and BIT_U8().
> >
> > Why?
>
> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> builds.
When needed GENMASK_ULL() can be used (with respective castings perhaps)
and BIT_ULL(), no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:32 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:32 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> BIT_U16() and BIT_U8().
> >
> > Why?
>
> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> builds.
When needed GENMASK_ULL() can be used (with respective castings perhaps)
and BIT_ULL(), no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:32 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-05-12 11:32 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> BIT_U16() and BIT_U8().
> >
> > Why?
>
> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> builds.
When needed GENMASK_ULL() can be used (with respective castings perhaps)
and BIT_ULL(), no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 11:32 ` Andy Shevchenko
(?)
(?)
@ 2023-05-12 11:45 ` Jani Nikula
-1 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:45 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Lucas De Marchi, intel-gfx, intel-xe, dri-devel, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> BIT_U16() and BIT_U8().
>> >
>> > Why?
>>
>> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> builds.
>
> When needed GENMASK_ULL() can be used (with respective castings perhaps)
> and BIT_ULL(), no?
How does that help with making them the same 32-bit size on both 32 and
64 bit builds?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:45 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:45 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> BIT_U16() and BIT_U8().
>> >
>> > Why?
>>
>> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> builds.
>
> When needed GENMASK_ULL() can be used (with respective castings perhaps)
> and BIT_ULL(), no?
How does that help with making them the same 32-bit size on both 32 and
64 bit builds?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:45 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:45 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> BIT_U16() and BIT_U8().
>> >
>> > Why?
>>
>> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> builds.
>
> When needed GENMASK_ULL() can be used (with respective castings perhaps)
> and BIT_ULL(), no?
How does that help with making them the same 32-bit size on both 32 and
64 bit builds?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 11:45 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-05-12 11:45 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> BIT_U16() and BIT_U8().
>> >
>> > Why?
>>
>> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> builds.
>
> When needed GENMASK_ULL() can be used (with respective castings perhaps)
> and BIT_ULL(), no?
How does that help with making them the same 32-bit size on both 32 and
64 bit builds?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 11:14 ` Andy Shevchenko
(?)
(?)
@ 2023-05-12 16:29 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-12 16:29 UTC (permalink / raw)
To: Andy Shevchenko
Cc: intel-gfx, intel-xe, dri-devel, Thomas Gleixner, linux-kernel,
Masahiro Yamada, Andrew Morton, Kevin Brodsky, Alex Deucher,
Christian König, Jani Nikula
On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Why?
to create the masks/values for device registers that are
of a certain width, preventing mistakes like:
#define REG1 0x10
#define REG1_ENABLE BIT(17)
#define REG1_FOO GENMASK(16, 15);
register_write(REG1_ENABLE, REG1);
... if REG1 is a 16bit register for example. There were mistakes in the
past in the i915 source leading to the creation of the REG_* variants on
top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
contents")
We are preparing another driver (xe), still to be merged but already
open (https://gitlab.freedesktop.org/drm/xe/kernel), that has
similar requirements.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>So, we have _Generic() in case you still wish to implement this.
humn... how would a _Generic() help here? The input is 1 or 2 integer
literals (h and l) so the compiler can check it is correct at build
time. See example above.
Lucas De Marchi
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 16:29 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-12 16:29 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Why?
to create the masks/values for device registers that are
of a certain width, preventing mistakes like:
#define REG1 0x10
#define REG1_ENABLE BIT(17)
#define REG1_FOO GENMASK(16, 15);
register_write(REG1_ENABLE, REG1);
... if REG1 is a 16bit register for example. There were mistakes in the
past in the i915 source leading to the creation of the REG_* variants on
top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
contents")
We are preparing another driver (xe), still to be merged but already
open (https://gitlab.freedesktop.org/drm/xe/kernel), that has
similar requirements.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>So, we have _Generic() in case you still wish to implement this.
humn... how would a _Generic() help here? The input is 1 or 2 integer
literals (h and l) so the compiler can check it is correct at build
time. See example above.
Lucas De Marchi
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 16:29 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-12 16:29 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Why?
to create the masks/values for device registers that are
of a certain width, preventing mistakes like:
#define REG1 0x10
#define REG1_ENABLE BIT(17)
#define REG1_FOO GENMASK(16, 15);
register_write(REG1_ENABLE, REG1);
... if REG1 is a 16bit register for example. There were mistakes in the
past in the i915 source leading to the creation of the REG_* variants on
top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
contents")
We are preparing another driver (xe), still to be merged but already
open (https://gitlab.freedesktop.org/drm/xe/kernel), that has
similar requirements.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>So, we have _Generic() in case you still wish to implement this.
humn... how would a _Generic() help here? The input is 1 or 2 integer
literals (h and l) so the compiler can check it is correct at build
time. See example above.
Lucas De Marchi
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-05-12 16:29 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-05-12 16:29 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Why?
to create the masks/values for device registers that are
of a certain width, preventing mistakes like:
#define REG1 0x10
#define REG1_ENABLE BIT(17)
#define REG1_FOO GENMASK(16, 15);
register_write(REG1_ENABLE, REG1);
... if REG1 is a 16bit register for example. There were mistakes in the
past in the i915 source leading to the creation of the REG_* variants on
top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
contents")
We are preparing another driver (xe), still to be merged but already
open (https://gitlab.freedesktop.org/drm/xe/kernel), that has
similar requirements.
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>So, we have _Generic() in case you still wish to implement this.
humn... how would a _Generic() help here? The input is 1 or 2 integer
literals (h and l) so the compiler can check it is correct at build
time. See example above.
Lucas De Marchi
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 11:45 ` Jani Nikula
(?)
(?)
@ 2023-06-15 15:53 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:53 UTC (permalink / raw)
To: Jani Nikula
Cc: Lucas De Marchi, intel-gfx, intel-xe, dri-devel, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> BIT_U16() and BIT_U8().
> >> >
> >> > Why?
> >>
> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> builds.
> >
> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > and BIT_ULL(), no?
>
> How does that help with making them the same 32-bit size on both 32 and
> 64 bit builds?
u32 x = GENMASK();
u64 y = GENMASK_ULL();
No? Then use in your code either x or y. Note that I assume that the parameters
to GENMASK*() are built-time constants. Is it the case for you?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:53 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:53 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> BIT_U16() and BIT_U8().
> >> >
> >> > Why?
> >>
> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> builds.
> >
> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > and BIT_ULL(), no?
>
> How does that help with making them the same 32-bit size on both 32 and
> 64 bit builds?
u32 x = GENMASK();
u64 y = GENMASK_ULL();
No? Then use in your code either x or y. Note that I assume that the parameters
to GENMASK*() are built-time constants. Is it the case for you?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:53 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:53 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> BIT_U16() and BIT_U8().
> >> >
> >> > Why?
> >>
> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> builds.
> >
> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > and BIT_ULL(), no?
>
> How does that help with making them the same 32-bit size on both 32 and
> 64 bit builds?
u32 x = GENMASK();
u64 y = GENMASK_ULL();
No? Then use in your code either x or y. Note that I assume that the parameters
to GENMASK*() are built-time constants. Is it the case for you?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:53 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:53 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> BIT_U16() and BIT_U8().
> >> >
> >> > Why?
> >>
> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> builds.
> >
> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > and BIT_ULL(), no?
>
> How does that help with making them the same 32-bit size on both 32 and
> 64 bit builds?
u32 x = GENMASK();
u64 y = GENMASK_ULL();
No? Then use in your code either x or y. Note that I assume that the parameters
to GENMASK*() are built-time constants. Is it the case for you?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-12 16:29 ` Lucas De Marchi
(?)
(?)
@ 2023-06-15 15:58 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:58 UTC (permalink / raw)
To: Lucas De Marchi
Cc: intel-gfx, intel-xe, dri-devel, Thomas Gleixner, linux-kernel,
Masahiro Yamada, Andrew Morton, Kevin Brodsky, Alex Deucher,
Christian König, Jani Nikula
On Fri, May 12, 2023 at 09:29:23AM -0700, Lucas De Marchi wrote:
> On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Why?
>
> to create the masks/values for device registers that are
> of a certain width, preventing mistakes like:
>
> #define REG1 0x10
> #define REG1_ENABLE BIT(17)
> #define REG1_FOO GENMASK(16, 15);
>
> register_write(REG1_ENABLE, REG1);
>
>
> ... if REG1 is a 16bit register for example. There were mistakes in the
> past in the i915 source leading to the creation of the REG_* variants on
> top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
> ("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
> contents")
Doesn't it look like something for bitfield.h candidate?
If your definition doesn't fit the given mask, bail out.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:58 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:58 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 09:29:23AM -0700, Lucas De Marchi wrote:
> On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Why?
>
> to create the masks/values for device registers that are
> of a certain width, preventing mistakes like:
>
> #define REG1 0x10
> #define REG1_ENABLE BIT(17)
> #define REG1_FOO GENMASK(16, 15);
>
> register_write(REG1_ENABLE, REG1);
>
>
> ... if REG1 is a 16bit register for example. There were mistakes in the
> past in the i915 source leading to the creation of the REG_* variants on
> top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
> ("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
> contents")
Doesn't it look like something for bitfield.h candidate?
If your definition doesn't fit the given mask, bail out.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:58 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:58 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 09:29:23AM -0700, Lucas De Marchi wrote:
> On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Why?
>
> to create the masks/values for device registers that are
> of a certain width, preventing mistakes like:
>
> #define REG1 0x10
> #define REG1_ENABLE BIT(17)
> #define REG1_FOO GENMASK(16, 15);
>
> register_write(REG1_ENABLE, REG1);
>
>
> ... if REG1 is a 16bit register for example. There were mistakes in the
> past in the i915 source leading to the creation of the REG_* variants on
> top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
> ("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
> contents")
Doesn't it look like something for bitfield.h candidate?
If your definition doesn't fit the given mask, bail out.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-15 15:58 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-15 15:58 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, Christian König, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, intel-xe, Alex Deucher, Thomas Gleixner,
Masahiro Yamada
On Fri, May 12, 2023 at 09:29:23AM -0700, Lucas De Marchi wrote:
> On Fri, May 12, 2023 at 02:14:19PM +0300, Andy Shevchenko wrote:
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Why?
>
> to create the masks/values for device registers that are
> of a certain width, preventing mistakes like:
>
> #define REG1 0x10
> #define REG1_ENABLE BIT(17)
> #define REG1_FOO GENMASK(16, 15);
>
> register_write(REG1_ENABLE, REG1);
>
>
> ... if REG1 is a 16bit register for example. There were mistakes in the
> past in the i915 source leading to the creation of the REG_* variants on
> top of normal GENMASK/BIT (see last patch and commit 09b434d4f6d2
> ("drm/i915: introduce REG_BIT() and REG_GENMASK() to define register
> contents")
Doesn't it look like something for bitfield.h candidate?
If your definition doesn't fit the given mask, bail out.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-15 15:53 ` Andy Shevchenko
(?)
(?)
@ 2023-06-20 14:47 ` Jani Nikula
-1 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 14:47 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Lucas De Marchi, intel-gfx, intel-xe, dri-devel, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> BIT_U16() and BIT_U8().
>> >> >
>> >> > Why?
>> >>
>> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> builds.
>> >
>> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > and BIT_ULL(), no?
>>
>> How does that help with making them the same 32-bit size on both 32 and
>> 64 bit builds?
>
> u32 x = GENMASK();
> u64 y = GENMASK_ULL();
>
> No? Then use in your code either x or y. Note that I assume that the parameters
> to GENMASK*() are built-time constants. Is it the case for you?
What's wrong with wanting to define macros with specific size, depending
on e.g. hardware registers instead of build size?
What would you use for printk format if you wanted to to print
GENMASK()?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:47 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 14:47 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> BIT_U16() and BIT_U8().
>> >> >
>> >> > Why?
>> >>
>> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> builds.
>> >
>> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > and BIT_ULL(), no?
>>
>> How does that help with making them the same 32-bit size on both 32 and
>> 64 bit builds?
>
> u32 x = GENMASK();
> u64 y = GENMASK_ULL();
>
> No? Then use in your code either x or y. Note that I assume that the parameters
> to GENMASK*() are built-time constants. Is it the case for you?
What's wrong with wanting to define macros with specific size, depending
on e.g. hardware registers instead of build size?
What would you use for printk format if you wanted to to print
GENMASK()?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:47 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 14:47 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> BIT_U16() and BIT_U8().
>> >> >
>> >> > Why?
>> >>
>> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> builds.
>> >
>> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > and BIT_ULL(), no?
>>
>> How does that help with making them the same 32-bit size on both 32 and
>> 64 bit builds?
>
> u32 x = GENMASK();
> u64 y = GENMASK_ULL();
>
> No? Then use in your code either x or y. Note that I assume that the parameters
> to GENMASK*() are built-time constants. Is it the case for you?
What's wrong with wanting to define macros with specific size, depending
on e.g. hardware registers instead of build size?
What would you use for printk format if you wanted to to print
GENMASK()?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:47 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 14:47 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> BIT_U16() and BIT_U8().
>> >> >
>> >> > Why?
>> >>
>> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> builds.
>> >
>> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > and BIT_ULL(), no?
>>
>> How does that help with making them the same 32-bit size on both 32 and
>> 64 bit builds?
>
> u32 x = GENMASK();
> u64 y = GENMASK_ULL();
>
> No? Then use in your code either x or y. Note that I assume that the parameters
> to GENMASK*() are built-time constants. Is it the case for you?
What's wrong with wanting to define macros with specific size, depending
on e.g. hardware registers instead of build size?
What would you use for printk format if you wanted to to print
GENMASK()?
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-20 14:47 ` Jani Nikula
(?)
(?)
@ 2023-06-20 14:55 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 14:55 UTC (permalink / raw)
To: Jani Nikula
Cc: Lucas De Marchi, intel-gfx, intel-xe, dri-devel, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König
On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> >> BIT_U16() and BIT_U8().
> >> >> >
> >> >> > Why?
> >> >>
> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> >> builds.
> >> >
> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> >> > and BIT_ULL(), no?
> >>
> >> How does that help with making them the same 32-bit size on both 32 and
> >> 64 bit builds?
> >
> > u32 x = GENMASK();
> > u64 y = GENMASK_ULL();
> >
> > No? Then use in your code either x or y. Note that I assume that the parameters
> > to GENMASK*() are built-time constants. Is it the case for you?
>
> What's wrong with wanting to define macros with specific size, depending
> on e.g. hardware registers instead of build size?
Nothing, but I think the problem is smaller than it's presented.
And there are already header for bitfields with a lot of helpers
for (similar) cases if not yours.
> What would you use for printk format if you wanted to to print
> GENMASK()?
%lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:55 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 14:55 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> >> BIT_U16() and BIT_U8().
> >> >> >
> >> >> > Why?
> >> >>
> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> >> builds.
> >> >
> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> >> > and BIT_ULL(), no?
> >>
> >> How does that help with making them the same 32-bit size on both 32 and
> >> 64 bit builds?
> >
> > u32 x = GENMASK();
> > u64 y = GENMASK_ULL();
> >
> > No? Then use in your code either x or y. Note that I assume that the parameters
> > to GENMASK*() are built-time constants. Is it the case for you?
>
> What's wrong with wanting to define macros with specific size, depending
> on e.g. hardware registers instead of build size?
Nothing, but I think the problem is smaller than it's presented.
And there are already header for bitfields with a lot of helpers
for (similar) cases if not yours.
> What would you use for printk format if you wanted to to print
> GENMASK()?
%lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:55 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 14:55 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> >> BIT_U16() and BIT_U8().
> >> >> >
> >> >> > Why?
> >> >>
> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> >> builds.
> >> >
> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> >> > and BIT_ULL(), no?
> >>
> >> How does that help with making them the same 32-bit size on both 32 and
> >> 64 bit builds?
> >
> > u32 x = GENMASK();
> > u64 y = GENMASK_ULL();
> >
> > No? Then use in your code either x or y. Note that I assume that the parameters
> > to GENMASK*() are built-time constants. Is it the case for you?
>
> What's wrong with wanting to define macros with specific size, depending
> on e.g. hardware registers instead of build size?
Nothing, but I think the problem is smaller than it's presented.
And there are already header for bitfields with a lot of helpers
for (similar) cases if not yours.
> What would you use for printk format if you wanted to to print
> GENMASK()?
%lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 14:55 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 14:55 UTC (permalink / raw)
To: Jani Nikula
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, Lucas De Marchi,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> >> >> >> BIT_U16() and BIT_U8().
> >> >> >
> >> >> > Why?
> >> >>
> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> >> >> builds.
> >> >
> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> >> > and BIT_ULL(), no?
> >>
> >> How does that help with making them the same 32-bit size on both 32 and
> >> 64 bit builds?
> >
> > u32 x = GENMASK();
> > u64 y = GENMASK_ULL();
> >
> > No? Then use in your code either x or y. Note that I assume that the parameters
> > to GENMASK*() are built-time constants. Is it the case for you?
>
> What's wrong with wanting to define macros with specific size, depending
> on e.g. hardware registers instead of build size?
Nothing, but I think the problem is smaller than it's presented.
And there are already header for bitfields with a lot of helpers
for (similar) cases if not yours.
> What would you use for printk format if you wanted to to print
> GENMASK()?
%lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-20 14:55 ` Andy Shevchenko
(?)
@ 2023-06-20 17:25 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 17:25 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Jani Nikula, Andrew Morton, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> >> BIT_U16() and BIT_U8().
>> >> >> >
>> >> >> > Why?
>> >> >>
>> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> >> builds.
>> >> >
>> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> >> > and BIT_ULL(), no?
>> >>
>> >> How does that help with making them the same 32-bit size on both 32 and
>> >> 64 bit builds?
>> >
>> > u32 x = GENMASK();
>> > u64 y = GENMASK_ULL();
>> >
>> > No? Then use in your code either x or y. Note that I assume that the parameters
>> > to GENMASK*() are built-time constants. Is it the case for you?
>>
>> What's wrong with wanting to define macros with specific size, depending
>> on e.g. hardware registers instead of build size?
>
>Nothing, but I think the problem is smaller than it's presented.
not sure about big/small problem you are talking about. It's a problem
for when the *device* register is a 32b fixed width, which is
independent from the CPU you are running on. We also have registers that
are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
mistakes like below. Just to use one example, the diff below builds
fine on my 64b machine, yet it's obviously wrong:
$ git diff
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index 0b414eae1683..692a0ad9a768 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
* No need to save old steering reg value.
*/
intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
- REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
- REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
+ FIELD_PREP(MTL_MCR_GROUPID, group) |
+ FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
(rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
} else if (GRAPHICS_VER(uncore->i915) >= 11) {
mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
index 718cb2c80f79..c42bc2900c6a 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
@@ -80,8 +80,8 @@
#define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
#define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
#define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
-#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
-#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
+#define MTL_MCR_GROUPID GENMASK(32, 8)
+#define MTL_MCR_INSTANCEID GENMASK(3, 0)
#define IPEIR_I965 _MMIO(0x2064)
#define IPEHR_I965 _MMIO(0x2068)
If the driver didn't support 32b CPUs, this would even go unnoticed.
Lucas De Marchi
>And there are already header for bitfields with a lot of helpers
>for (similar) cases if not yours.
>
>> What would you use for printk format if you wanted to to print
>> GENMASK()?
>
>%lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 17:25 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 17:25 UTC (permalink / raw)
To: Andy Shevchenko
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> >> BIT_U16() and BIT_U8().
>> >> >> >
>> >> >> > Why?
>> >> >>
>> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> >> builds.
>> >> >
>> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> >> > and BIT_ULL(), no?
>> >>
>> >> How does that help with making them the same 32-bit size on both 32 and
>> >> 64 bit builds?
>> >
>> > u32 x = GENMASK();
>> > u64 y = GENMASK_ULL();
>> >
>> > No? Then use in your code either x or y. Note that I assume that the parameters
>> > to GENMASK*() are built-time constants. Is it the case for you?
>>
>> What's wrong with wanting to define macros with specific size, depending
>> on e.g. hardware registers instead of build size?
>
>Nothing, but I think the problem is smaller than it's presented.
not sure about big/small problem you are talking about. It's a problem
for when the *device* register is a 32b fixed width, which is
independent from the CPU you are running on. We also have registers that
are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
mistakes like below. Just to use one example, the diff below builds
fine on my 64b machine, yet it's obviously wrong:
$ git diff
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index 0b414eae1683..692a0ad9a768 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
* No need to save old steering reg value.
*/
intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
- REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
- REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
+ FIELD_PREP(MTL_MCR_GROUPID, group) |
+ FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
(rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
} else if (GRAPHICS_VER(uncore->i915) >= 11) {
mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
index 718cb2c80f79..c42bc2900c6a 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
@@ -80,8 +80,8 @@
#define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
#define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
#define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
-#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
-#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
+#define MTL_MCR_GROUPID GENMASK(32, 8)
+#define MTL_MCR_INSTANCEID GENMASK(3, 0)
#define IPEIR_I965 _MMIO(0x2064)
#define IPEHR_I965 _MMIO(0x2068)
If the driver didn't support 32b CPUs, this would even go unnoticed.
Lucas De Marchi
>And there are already header for bitfields with a lot of helpers
>for (similar) cases if not yours.
>
>> What would you use for printk format if you wanted to to print
>> GENMASK()?
>
>%lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 17:25 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 17:25 UTC (permalink / raw)
To: Andy Shevchenko
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> >> >> >> BIT_U16() and BIT_U8().
>> >> >> >
>> >> >> > Why?
>> >> >>
>> >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> >> >> builds.
>> >> >
>> >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> >> > and BIT_ULL(), no?
>> >>
>> >> How does that help with making them the same 32-bit size on both 32 and
>> >> 64 bit builds?
>> >
>> > u32 x = GENMASK();
>> > u64 y = GENMASK_ULL();
>> >
>> > No? Then use in your code either x or y. Note that I assume that the parameters
>> > to GENMASK*() are built-time constants. Is it the case for you?
>>
>> What's wrong with wanting to define macros with specific size, depending
>> on e.g. hardware registers instead of build size?
>
>Nothing, but I think the problem is smaller than it's presented.
not sure about big/small problem you are talking about. It's a problem
for when the *device* register is a 32b fixed width, which is
independent from the CPU you are running on. We also have registers that
are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
mistakes like below. Just to use one example, the diff below builds
fine on my 64b machine, yet it's obviously wrong:
$ git diff
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
index 0b414eae1683..692a0ad9a768 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
@@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
* No need to save old steering reg value.
*/
intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
- REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
- REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
+ FIELD_PREP(MTL_MCR_GROUPID, group) |
+ FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
(rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
} else if (GRAPHICS_VER(uncore->i915) >= 11) {
mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
index 718cb2c80f79..c42bc2900c6a 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
@@ -80,8 +80,8 @@
#define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
#define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
#define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
-#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
-#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
+#define MTL_MCR_GROUPID GENMASK(32, 8)
+#define MTL_MCR_INSTANCEID GENMASK(3, 0)
#define IPEIR_I965 _MMIO(0x2064)
#define IPEHR_I965 _MMIO(0x2068)
If the driver didn't support 32b CPUs, this would even go unnoticed.
Lucas De Marchi
>And there are already header for bitfields with a lot of helpers
>for (similar) cases if not yours.
>
>> What would you use for printk format if you wanted to to print
>> GENMASK()?
>
>%lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-20 17:25 ` Lucas De Marchi
(?)
@ 2023-06-20 17:41 ` Andy Shevchenko
-1 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 17:41 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Jani Nikula, Andrew Morton, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> > > >> >> >> BIT_U16() and BIT_U8().
> > > >> >> > Why?
> > > >> >>
> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> > > >> >> builds.
> > > >> >
> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > > >> > and BIT_ULL(), no?
> > > >>
> > > >> How does that help with making them the same 32-bit size on both 32 and
> > > >> 64 bit builds?
> > > >
> > > > u32 x = GENMASK();
> > > > u64 y = GENMASK_ULL();
> > > >
> > > > No? Then use in your code either x or y. Note that I assume that the parameters
> > > > to GENMASK*() are built-time constants. Is it the case for you?
> > >
> > > What's wrong with wanting to define macros with specific size, depending
> > > on e.g. hardware registers instead of build size?
> >
> > Nothing, but I think the problem is smaller than it's presented.
>
> not sure about big/small problem you are talking about. It's a problem
> for when the *device* register is a 32b fixed width, which is
> independent from the CPU you are running on. We also have registers that
> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
> mistakes like below. Just to use one example, the diff below builds
> fine on my 64b machine, yet it's obviously wrong:
>
> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index 0b414eae1683..692a0ad9a768 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
> * No need to save old steering reg value.
> */
> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> + FIELD_PREP(MTL_MCR_GROUPID, group) |
> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> index 718cb2c80f79..c42bc2900c6a 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> @@ -80,8 +80,8 @@
> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
> +#define MTL_MCR_GROUPID GENMASK(32, 8)
> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
> #define IPEIR_I965 _MMIO(0x2064)
> #define IPEHR_I965 _MMIO(0x2068)
>
> If the driver didn't support 32b CPUs, this would even go unnoticed.
So, what does prevent you from using GENMASK_ULL()?
Another point, you may teach GENMASK() to issue a warning if hi and/or lo
bigger than BITS_PER_LONG.
I still don't see the usefulness of that churn.
> Lucas De Marchi
>
> > And there are already header for bitfields with a lot of helpers
> > for (similar) cases if not yours.
> >
> > > What would you use for printk format if you wanted to to print
> > > GENMASK()?
> >
> > %lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 17:41 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 17:41 UTC (permalink / raw)
To: Lucas De Marchi
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> > > >> >> >> BIT_U16() and BIT_U8().
> > > >> >> > Why?
> > > >> >>
> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> > > >> >> builds.
> > > >> >
> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > > >> > and BIT_ULL(), no?
> > > >>
> > > >> How does that help with making them the same 32-bit size on both 32 and
> > > >> 64 bit builds?
> > > >
> > > > u32 x = GENMASK();
> > > > u64 y = GENMASK_ULL();
> > > >
> > > > No? Then use in your code either x or y. Note that I assume that the parameters
> > > > to GENMASK*() are built-time constants. Is it the case for you?
> > >
> > > What's wrong with wanting to define macros with specific size, depending
> > > on e.g. hardware registers instead of build size?
> >
> > Nothing, but I think the problem is smaller than it's presented.
>
> not sure about big/small problem you are talking about. It's a problem
> for when the *device* register is a 32b fixed width, which is
> independent from the CPU you are running on. We also have registers that
> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
> mistakes like below. Just to use one example, the diff below builds
> fine on my 64b machine, yet it's obviously wrong:
>
> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index 0b414eae1683..692a0ad9a768 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
> * No need to save old steering reg value.
> */
> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> + FIELD_PREP(MTL_MCR_GROUPID, group) |
> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> index 718cb2c80f79..c42bc2900c6a 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> @@ -80,8 +80,8 @@
> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
> +#define MTL_MCR_GROUPID GENMASK(32, 8)
> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
> #define IPEIR_I965 _MMIO(0x2064)
> #define IPEHR_I965 _MMIO(0x2068)
>
> If the driver didn't support 32b CPUs, this would even go unnoticed.
So, what does prevent you from using GENMASK_ULL()?
Another point, you may teach GENMASK() to issue a warning if hi and/or lo
bigger than BITS_PER_LONG.
I still don't see the usefulness of that churn.
> Lucas De Marchi
>
> > And there are already header for bitfields with a lot of helpers
> > for (similar) cases if not yours.
> >
> > > What would you use for printk format if you wanted to to print
> > > GENMASK()?
> >
> > %lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 17:41 ` Andy Shevchenko
0 siblings, 0 replies; 114+ messages in thread
From: Andy Shevchenko @ 2023-06-20 17:41 UTC (permalink / raw)
To: Lucas De Marchi
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
> > > >> >> >> BIT_U16() and BIT_U8().
> > > >> >> > Why?
> > > >> >>
> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
> > > >> >> builds.
> > > >> >
> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
> > > >> > and BIT_ULL(), no?
> > > >>
> > > >> How does that help with making them the same 32-bit size on both 32 and
> > > >> 64 bit builds?
> > > >
> > > > u32 x = GENMASK();
> > > > u64 y = GENMASK_ULL();
> > > >
> > > > No? Then use in your code either x or y. Note that I assume that the parameters
> > > > to GENMASK*() are built-time constants. Is it the case for you?
> > >
> > > What's wrong with wanting to define macros with specific size, depending
> > > on e.g. hardware registers instead of build size?
> >
> > Nothing, but I think the problem is smaller than it's presented.
>
> not sure about big/small problem you are talking about. It's a problem
> for when the *device* register is a 32b fixed width, which is
> independent from the CPU you are running on. We also have registers that
> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
> mistakes like below. Just to use one example, the diff below builds
> fine on my 64b machine, yet it's obviously wrong:
>
> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> index 0b414eae1683..692a0ad9a768 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
> * No need to save old steering reg value.
> */
> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> + FIELD_PREP(MTL_MCR_GROUPID, group) |
> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> index 718cb2c80f79..c42bc2900c6a 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
> @@ -80,8 +80,8 @@
> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
> +#define MTL_MCR_GROUPID GENMASK(32, 8)
> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
> #define IPEIR_I965 _MMIO(0x2064)
> #define IPEHR_I965 _MMIO(0x2068)
>
> If the driver didn't support 32b CPUs, this would even go unnoticed.
So, what does prevent you from using GENMASK_ULL()?
Another point, you may teach GENMASK() to issue a warning if hi and/or lo
bigger than BITS_PER_LONG.
I still don't see the usefulness of that churn.
> Lucas De Marchi
>
> > And there are already header for bitfields with a lot of helpers
> > for (similar) cases if not yours.
> >
> > > What would you use for printk format if you wanted to to print
> > > GENMASK()?
> >
> > %lu, no?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-20 17:41 ` Andy Shevchenko
(?)
@ 2023-06-20 18:02 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 18:02 UTC (permalink / raw)
To: Andy Shevchenko
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 08:41:10PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
>> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> > > >> >> >> BIT_U16() and BIT_U8().
>
>> > > >> >> > Why?
>> > > >> >>
>> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> > > >> >> builds.
>> > > >> >
>> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > > >> > and BIT_ULL(), no?
>> > > >>
>> > > >> How does that help with making them the same 32-bit size on both 32 and
>> > > >> 64 bit builds?
>> > > >
>> > > > u32 x = GENMASK();
>> > > > u64 y = GENMASK_ULL();
>> > > >
>> > > > No? Then use in your code either x or y. Note that I assume that the parameters
>> > > > to GENMASK*() are built-time constants. Is it the case for you?
>> > >
>> > > What's wrong with wanting to define macros with specific size, depending
>> > > on e.g. hardware registers instead of build size?
>> >
>> > Nothing, but I think the problem is smaller than it's presented.
>>
>> not sure about big/small problem you are talking about. It's a problem
>> for when the *device* register is a 32b fixed width, which is
>> independent from the CPU you are running on. We also have registers that
>> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
>> mistakes like below. Just to use one example, the diff below builds
>> fine on my 64b machine, yet it's obviously wrong:
>>
>> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> index 0b414eae1683..692a0ad9a768 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
>> * No need to save old steering reg value.
>> */
>> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
>> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
>> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> + FIELD_PREP(MTL_MCR_GROUPID, group) |
>> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
>> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
>> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
>> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> index 718cb2c80f79..c42bc2900c6a 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> @@ -80,8 +80,8 @@
>> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
>> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
>> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
>> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
>> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
>> +#define MTL_MCR_GROUPID GENMASK(32, 8)
>> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
>> #define IPEIR_I965 _MMIO(0x2064)
>> #define IPEHR_I965 _MMIO(0x2068)
>>
>> If the driver didn't support 32b CPUs, this would even go unnoticed.
>
>So, what does prevent you from using GENMASK_ULL()?
nothing is preventing me to write the wrong code, which is what we are
trying to solve. GENMASK_ULL() would generate the wrong code as that
particular register is 32b, not 64b, on the GPU.
>
>Another point, you may teach GENMASK() to issue a warning if hi and/or lo
>bigger than BITS_PER_LONG.
Which varies depending on the CPU you are building for, so it misses the
point. GENMASK_U32/GENMASK_U16/GENMASK_U8 and BIT counterparts would
emit a warning if hi is bigger than _exactly_ 32, 16 or 8, regardless
of the CPU you built the code for.
Lucas De Marchi
>
>I still don't see the usefulness of that churn.
>
>> Lucas De Marchi
>>
>> > And there are already header for bitfields with a lot of helpers
>> > for (similar) cases if not yours.
>> >
>> > > What would you use for printk format if you wanted to to print
>> > > GENMASK()?
>> >
>> > %lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 18:02 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 18:02 UTC (permalink / raw)
To: Andy Shevchenko
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, Jun 20, 2023 at 08:41:10PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
>> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> > > >> >> >> BIT_U16() and BIT_U8().
>
>> > > >> >> > Why?
>> > > >> >>
>> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> > > >> >> builds.
>> > > >> >
>> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > > >> > and BIT_ULL(), no?
>> > > >>
>> > > >> How does that help with making them the same 32-bit size on both 32 and
>> > > >> 64 bit builds?
>> > > >
>> > > > u32 x = GENMASK();
>> > > > u64 y = GENMASK_ULL();
>> > > >
>> > > > No? Then use in your code either x or y. Note that I assume that the parameters
>> > > > to GENMASK*() are built-time constants. Is it the case for you?
>> > >
>> > > What's wrong with wanting to define macros with specific size, depending
>> > > on e.g. hardware registers instead of build size?
>> >
>> > Nothing, but I think the problem is smaller than it's presented.
>>
>> not sure about big/small problem you are talking about. It's a problem
>> for when the *device* register is a 32b fixed width, which is
>> independent from the CPU you are running on. We also have registers that
>> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
>> mistakes like below. Just to use one example, the diff below builds
>> fine on my 64b machine, yet it's obviously wrong:
>>
>> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> index 0b414eae1683..692a0ad9a768 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
>> * No need to save old steering reg value.
>> */
>> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
>> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
>> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> + FIELD_PREP(MTL_MCR_GROUPID, group) |
>> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
>> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
>> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
>> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> index 718cb2c80f79..c42bc2900c6a 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> @@ -80,8 +80,8 @@
>> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
>> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
>> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
>> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
>> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
>> +#define MTL_MCR_GROUPID GENMASK(32, 8)
>> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
>> #define IPEIR_I965 _MMIO(0x2064)
>> #define IPEHR_I965 _MMIO(0x2068)
>>
>> If the driver didn't support 32b CPUs, this would even go unnoticed.
>
>So, what does prevent you from using GENMASK_ULL()?
nothing is preventing me to write the wrong code, which is what we are
trying to solve. GENMASK_ULL() would generate the wrong code as that
particular register is 32b, not 64b, on the GPU.
>
>Another point, you may teach GENMASK() to issue a warning if hi and/or lo
>bigger than BITS_PER_LONG.
Which varies depending on the CPU you are building for, so it misses the
point. GENMASK_U32/GENMASK_U16/GENMASK_U8 and BIT counterparts would
emit a warning if hi is bigger than _exactly_ 32, 16 or 8, regardless
of the CPU you built the code for.
Lucas De Marchi
>
>I still don't see the usefulness of that churn.
>
>> Lucas De Marchi
>>
>> > And there are already header for bitfields with a lot of helpers
>> > for (similar) cases if not yours.
>> >
>> > > What would you use for printk format if you wanted to to print
>> > > GENMASK()?
>> >
>> > %lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 18:02 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-20 18:02 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Jani Nikula, Andrew Morton, intel-gfx, Kevin Brodsky,
linux-kernel, dri-devel, Christian König, Alex Deucher,
Thomas Gleixner, Masahiro Yamada, intel-xe
On Tue, Jun 20, 2023 at 08:41:10PM +0300, Andy Shevchenko wrote:
>On Tue, Jun 20, 2023 at 10:25:21AM -0700, Lucas De Marchi wrote:
>> On Tue, Jun 20, 2023 at 05:55:19PM +0300, Andy Shevchenko wrote:
>> > On Tue, Jun 20, 2023 at 05:47:34PM +0300, Jani Nikula wrote:
>> > > On Thu, 15 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > > On Fri, May 12, 2023 at 02:45:19PM +0300, Jani Nikula wrote:
>> > > >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> > On Fri, May 12, 2023 at 02:25:18PM +0300, Jani Nikula wrote:
>> > > >> >> On Fri, 12 May 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
>> > > >> >> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > >> >> >> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > >> >> >> masks for fixed-width types and also the corresponding BIT_U32(),
>> > > >> >> >> BIT_U16() and BIT_U8().
>
>> > > >> >> > Why?
>> > > >> >>
>> > > >> >> The main reason is that GENMASK() and BIT() size varies for 32/64 bit
>> > > >> >> builds.
>> > > >> >
>> > > >> > When needed GENMASK_ULL() can be used (with respective castings perhaps)
>> > > >> > and BIT_ULL(), no?
>> > > >>
>> > > >> How does that help with making them the same 32-bit size on both 32 and
>> > > >> 64 bit builds?
>> > > >
>> > > > u32 x = GENMASK();
>> > > > u64 y = GENMASK_ULL();
>> > > >
>> > > > No? Then use in your code either x or y. Note that I assume that the parameters
>> > > > to GENMASK*() are built-time constants. Is it the case for you?
>> > >
>> > > What's wrong with wanting to define macros with specific size, depending
>> > > on e.g. hardware registers instead of build size?
>> >
>> > Nothing, but I think the problem is smaller than it's presented.
>>
>> not sure about big/small problem you are talking about. It's a problem
>> for when the *device* register is a 32b fixed width, which is
>> independent from the CPU you are running on. We also have registers that
>> are u16 and u64. Having fixed-width GENMASK and BIT helps avoiding
>> mistakes like below. Just to use one example, the diff below builds
>> fine on my 64b machine, yet it's obviously wrong:
>>
>> $ git diff diff --git a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> index 0b414eae1683..692a0ad9a768 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_mcr.c
>> @@ -261,8 +261,8 @@ static u32 rw_with_mcr_steering_fw(struct intel_gt *gt,
>> * No need to save old steering reg value.
>> */
>> intel_uncore_write_fw(uncore, MTL_MCR_SELECTOR,
>> - REG_FIELD_PREP(MTL_MCR_GROUPID, group) |
>> - REG_FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> + FIELD_PREP(MTL_MCR_GROUPID, group) |
>> + FIELD_PREP(MTL_MCR_INSTANCEID, instance) |
>> (rw_flag == FW_REG_READ ? GEN11_MCR_MULTICAST : 0));
>> } else if (GRAPHICS_VER(uncore->i915) >= 11) {
>> mcr_mask = GEN11_MCR_SLICE_MASK | GEN11_MCR_SUBSLICE_MASK;
>> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_regs.h b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> index 718cb2c80f79..c42bc2900c6a 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> +++ b/drivers/gpu/drm/i915/gt/intel_gt_regs.h
>> @@ -80,8 +80,8 @@
>> #define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
>> #define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
>> #define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
>> -#define MTL_MCR_GROUPID REG_GENMASK(11, 8)
>> -#define MTL_MCR_INSTANCEID REG_GENMASK(3, 0)
>> +#define MTL_MCR_GROUPID GENMASK(32, 8)
>> +#define MTL_MCR_INSTANCEID GENMASK(3, 0)
>> #define IPEIR_I965 _MMIO(0x2064)
>> #define IPEHR_I965 _MMIO(0x2068)
>>
>> If the driver didn't support 32b CPUs, this would even go unnoticed.
>
>So, what does prevent you from using GENMASK_ULL()?
nothing is preventing me to write the wrong code, which is what we are
trying to solve. GENMASK_ULL() would generate the wrong code as that
particular register is 32b, not 64b, on the GPU.
>
>Another point, you may teach GENMASK() to issue a warning if hi and/or lo
>bigger than BITS_PER_LONG.
Which varies depending on the CPU you are building for, so it misses the
point. GENMASK_U32/GENMASK_U16/GENMASK_U8 and BIT counterparts would
emit a warning if hi is bigger than _exactly_ 32, 16 or 8, regardless
of the CPU you built the code for.
Lucas De Marchi
>
>I still don't see the usefulness of that churn.
>
>> Lucas De Marchi
>>
>> > And there are already header for bitfields with a lot of helpers
>> > for (similar) cases if not yours.
>> >
>> > > What would you use for printk format if you wanted to to print
>> > > GENMASK()?
>> >
>> > %lu, no?
>
>--
>With Best Regards,
>Andy Shevchenko
>
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-20 17:41 ` Andy Shevchenko
(?)
@ 2023-06-20 18:19 ` Jani Nikula
-1 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 18:19 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Alex Deucher, Thomas Gleixner,
Masahiro Yamada, intel-xe
On Tue, 20 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> So, what does prevent you from using GENMASK_ULL()?
>
> Another point, you may teach GENMASK() to issue a warning if hi and/or lo
> bigger than BITS_PER_LONG.
What good does that do if you want the warning for a fixed size
different from unsigned long or long long? Worse, sizeof(long) depends
on arch, while the GENMASK you want depends on the use case.
> I still don't see the usefulness of that churn.
This thread is turning into a prime example of why drivers and
subsystems reinvent their own wheels instead of trying to get generally
useful stuff merged in kernel headers. :p
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 18:19 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 18:19 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, 20 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> So, what does prevent you from using GENMASK_ULL()?
>
> Another point, you may teach GENMASK() to issue a warning if hi and/or lo
> bigger than BITS_PER_LONG.
What good does that do if you want the warning for a fixed size
different from unsigned long or long long? Worse, sizeof(long) depends
on arch, while the GENMASK you want depends on the use case.
> I still don't see the usefulness of that churn.
This thread is turning into a prime example of why drivers and
subsystems reinvent their own wheels instead of trying to get generally
useful stuff merged in kernel headers. :p
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-20 18:19 ` Jani Nikula
0 siblings, 0 replies; 114+ messages in thread
From: Jani Nikula @ 2023-06-20 18:19 UTC (permalink / raw)
To: Andy Shevchenko, Lucas De Marchi
Cc: intel-gfx, Kevin Brodsky, linux-kernel, dri-devel, intel-xe,
Thomas Gleixner, Alex Deucher, Andrew Morton, Masahiro Yamada,
Christian König
On Tue, 20 Jun 2023, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote:
> So, what does prevent you from using GENMASK_ULL()?
>
> Another point, you may teach GENMASK() to issue a warning if hi and/or lo
> bigger than BITS_PER_LONG.
What good does that do if you want the warning for a fixed size
different from unsigned long or long long? Worse, sizeof(long) depends
on arch, while the GENMASK you want depends on the use case.
> I still don't see the usefulness of that churn.
This thread is turning into a prime example of why drivers and
subsystems reinvent their own wheels instead of trying to get generally
useful stuff merged in kernel headers. :p
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-05-09 5:14 ` Lucas De Marchi
(?)
(?)
@ 2023-06-22 2:20 ` Yury Norov
-1 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 2:20 UTC (permalink / raw)
To: Lucas De Marchi
Cc: intel-gfx, intel-xe, dri-devel, Andy Shevchenko, Thomas Gleixner,
linux-kernel, Masahiro Yamada, Andrew Morton, Kevin Brodsky,
Alex Deucher, Christian König, Jani Nikula
Hi Lucas, all!
(Thanks, Andy, for pointing to this thread.)
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Can you split BIT() and GENMASK() material to separate patches?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
I feel like I don't understand the sentence...
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
I don't think it's a good way to go because BIT() belongs to a more basic
level than GENMASK(). Not mentioning possible header dependency issues.
If you need to test against tighter numeric region, I'd suggest to
do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
directly. Something like:
#define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..ff4786c99b8c 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
> +#define __GENMASK_U32(h, l) \
> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
> + (~U32(0) >> (32 - 1 - (h))))
> +#define GENMASK_U32(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
> +
> +#define __GENMASK_U16(h, l) \
> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
> + (U32(0xffff) >> (16 - 1 - (h))))
> +#define GENMASK_U16(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
> +
> +#define __GENMASK_U8(h, l) \
> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
> + (U32(0xff) >> (8 - 1 - (h))))
> +#define GENMASK_U8(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
[...]
I see nothing wrong with fixed-wight versions of GENMASK if it helps
people to write safer code. Can you please in commit message mention
the exact patch(es) that added a bug related to GENMASK() misuse? It
would be easier to advocate the purpose of new API with that in mind.
Regarding implementation - we should avoid copy-pasting in cases
like this. Below is the patch that I boot-tested for x86_64 and
compile-tested for arm64.
It looks less opencoded, and maybe Andy will be less skeptical about
this approach because of less maintenance burden. Please take it if
you like for v2.
Thanks,
Yury
From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
From: Yury Norov <yury.norov@gmail.com>
Date: Wed, 21 Jun 2023 15:27:29 -0700
Subject: [PATCH] bits: introduce fixed-type genmasks
Generalize __GENMASK() to support different types, and implement
fixed-types versions of GENMASK() based on it.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
include/linux/bitops.h | 1 -
include/linux/bits.h | 22 ++++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..1db50c69cfdb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -15,7 +15,6 @@
# define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
#endif
-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
#define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..cb94128171b2 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -6,6 +6,8 @@
#include <vdso/bits.h>
#include <asm/bitsperlong.h>
+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
+
#define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
#define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
@@ -30,16 +32,16 @@
#define GENMASK_INPUT_CHECK(h, l) 0
#endif
-#define __GENMASK(h, l) \
- (((~UL(0)) - (UL(1) << (l)) + 1) & \
- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
-#define GENMASK(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
+#define __GENMASK(t, h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + \
+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
-#define __GENMASK_ULL(h, l) \
- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
-#define GENMASK_ULL(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
#endif /* __LINUX_BITS_H */
--
2.39.2
^ permalink raw reply related [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 2:20 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 2:20 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
Hi Lucas, all!
(Thanks, Andy, for pointing to this thread.)
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Can you split BIT() and GENMASK() material to separate patches?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
I feel like I don't understand the sentence...
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
I don't think it's a good way to go because BIT() belongs to a more basic
level than GENMASK(). Not mentioning possible header dependency issues.
If you need to test against tighter numeric region, I'd suggest to
do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
directly. Something like:
#define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..ff4786c99b8c 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
> +#define __GENMASK_U32(h, l) \
> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
> + (~U32(0) >> (32 - 1 - (h))))
> +#define GENMASK_U32(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
> +
> +#define __GENMASK_U16(h, l) \
> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
> + (U32(0xffff) >> (16 - 1 - (h))))
> +#define GENMASK_U16(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
> +
> +#define __GENMASK_U8(h, l) \
> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
> + (U32(0xff) >> (8 - 1 - (h))))
> +#define GENMASK_U8(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
[...]
I see nothing wrong with fixed-wight versions of GENMASK if it helps
people to write safer code. Can you please in commit message mention
the exact patch(es) that added a bug related to GENMASK() misuse? It
would be easier to advocate the purpose of new API with that in mind.
Regarding implementation - we should avoid copy-pasting in cases
like this. Below is the patch that I boot-tested for x86_64 and
compile-tested for arm64.
It looks less opencoded, and maybe Andy will be less skeptical about
this approach because of less maintenance burden. Please take it if
you like for v2.
Thanks,
Yury
From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
From: Yury Norov <yury.norov@gmail.com>
Date: Wed, 21 Jun 2023 15:27:29 -0700
Subject: [PATCH] bits: introduce fixed-type genmasks
Generalize __GENMASK() to support different types, and implement
fixed-types versions of GENMASK() based on it.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
include/linux/bitops.h | 1 -
include/linux/bits.h | 22 ++++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..1db50c69cfdb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -15,7 +15,6 @@
# define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
#endif
-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
#define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..cb94128171b2 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -6,6 +6,8 @@
#include <vdso/bits.h>
#include <asm/bitsperlong.h>
+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
+
#define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
#define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
@@ -30,16 +32,16 @@
#define GENMASK_INPUT_CHECK(h, l) 0
#endif
-#define __GENMASK(h, l) \
- (((~UL(0)) - (UL(1) << (l)) + 1) & \
- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
-#define GENMASK(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
+#define __GENMASK(t, h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + \
+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
-#define __GENMASK_ULL(h, l) \
- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
-#define GENMASK_ULL(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
#endif /* __LINUX_BITS_H */
--
2.39.2
^ permalink raw reply related [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 2:20 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 2:20 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
Hi Lucas, all!
(Thanks, Andy, for pointing to this thread.)
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Can you split BIT() and GENMASK() material to separate patches?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
I feel like I don't understand the sentence...
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
I don't think it's a good way to go because BIT() belongs to a more basic
level than GENMASK(). Not mentioning possible header dependency issues.
If you need to test against tighter numeric region, I'd suggest to
do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
directly. Something like:
#define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..ff4786c99b8c 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
> +#define __GENMASK_U32(h, l) \
> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
> + (~U32(0) >> (32 - 1 - (h))))
> +#define GENMASK_U32(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
> +
> +#define __GENMASK_U16(h, l) \
> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
> + (U32(0xffff) >> (16 - 1 - (h))))
> +#define GENMASK_U16(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
> +
> +#define __GENMASK_U8(h, l) \
> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
> + (U32(0xff) >> (8 - 1 - (h))))
> +#define GENMASK_U8(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
[...]
I see nothing wrong with fixed-wight versions of GENMASK if it helps
people to write safer code. Can you please in commit message mention
the exact patch(es) that added a bug related to GENMASK() misuse? It
would be easier to advocate the purpose of new API with that in mind.
Regarding implementation - we should avoid copy-pasting in cases
like this. Below is the patch that I boot-tested for x86_64 and
compile-tested for arm64.
It looks less opencoded, and maybe Andy will be less skeptical about
this approach because of less maintenance burden. Please take it if
you like for v2.
Thanks,
Yury
From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
From: Yury Norov <yury.norov@gmail.com>
Date: Wed, 21 Jun 2023 15:27:29 -0700
Subject: [PATCH] bits: introduce fixed-type genmasks
Generalize __GENMASK() to support different types, and implement
fixed-types versions of GENMASK() based on it.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
include/linux/bitops.h | 1 -
include/linux/bits.h | 22 ++++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..1db50c69cfdb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -15,7 +15,6 @@
# define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
#endif
-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
#define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..cb94128171b2 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -6,6 +6,8 @@
#include <vdso/bits.h>
#include <asm/bitsperlong.h>
+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
+
#define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
#define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
@@ -30,16 +32,16 @@
#define GENMASK_INPUT_CHECK(h, l) 0
#endif
-#define __GENMASK(h, l) \
- (((~UL(0)) - (UL(1) << (l)) + 1) & \
- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
-#define GENMASK(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
+#define __GENMASK(t, h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + \
+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
-#define __GENMASK_ULL(h, l) \
- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
-#define GENMASK_ULL(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
#endif /* __LINUX_BITS_H */
--
2.39.2
^ permalink raw reply related [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 2:20 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 2:20 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
Hi Lucas, all!
(Thanks, Andy, for pointing to this thread.)
On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> masks for fixed-width types and also the corresponding BIT_U32(),
> BIT_U16() and BIT_U8().
Can you split BIT() and GENMASK() material to separate patches?
> All of those depend on a new "U" suffix added to the integer constant.
> Due to naming clashes it's better to call the macro U32. Since C doesn't
> have a proper suffix for short and char types, the U16 and U18 variants
> just use U32 with one additional check in the BIT_* macros to make
> sure the compiler gives an error when the those types overflow.
I feel like I don't understand the sentence...
> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> as otherwise they would allow an invalid bit to be passed. Hence
> implement them in include/linux/bits.h rather than together with
> the other BIT* variants.
I don't think it's a good way to go because BIT() belongs to a more basic
level than GENMASK(). Not mentioning possible header dependency issues.
If you need to test against tighter numeric region, I'd suggest to
do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
directly. Something like:
#define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> The following test file is is used to test this:
>
> $ cat mask.c
> #include <linux/types.h>
> #include <linux/bits.h>
>
> static const u32 a = GENMASK_U32(31, 0);
> static const u16 b = GENMASK_U16(15, 0);
> static const u8 c = GENMASK_U8(7, 0);
> static const u32 x = BIT_U32(31);
> static const u16 y = BIT_U16(15);
> static const u8 z = BIT_U8(7);
>
> #if FAIL
> static const u32 a2 = GENMASK_U32(32, 0);
> static const u16 b2 = GENMASK_U16(16, 0);
> static const u8 c2 = GENMASK_U8(8, 0);
> static const u32 x2 = BIT_U32(32);
> static const u16 y2 = BIT_U16(16);
> static const u8 z2 = BIT_U8(8);
> #endif
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> include/linux/bits.h | 22 ++++++++++++++++++++++
> include/uapi/linux/const.h | 2 ++
> include/vdso/const.h | 1 +
> 3 files changed, 25 insertions(+)
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..ff4786c99b8c 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -42,4 +42,26 @@
> #define GENMASK_ULL(h, l) \
> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>
> +#define __GENMASK_U32(h, l) \
> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
> + (~U32(0) >> (32 - 1 - (h))))
> +#define GENMASK_U32(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
> +
> +#define __GENMASK_U16(h, l) \
> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
> + (U32(0xffff) >> (16 - 1 - (h))))
> +#define GENMASK_U16(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
> +
> +#define __GENMASK_U8(h, l) \
> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
> + (U32(0xff) >> (8 - 1 - (h))))
> +#define GENMASK_U8(h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
[...]
I see nothing wrong with fixed-wight versions of GENMASK if it helps
people to write safer code. Can you please in commit message mention
the exact patch(es) that added a bug related to GENMASK() misuse? It
would be easier to advocate the purpose of new API with that in mind.
Regarding implementation - we should avoid copy-pasting in cases
like this. Below is the patch that I boot-tested for x86_64 and
compile-tested for arm64.
It looks less opencoded, and maybe Andy will be less skeptical about
this approach because of less maintenance burden. Please take it if
you like for v2.
Thanks,
Yury
From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
From: Yury Norov <yury.norov@gmail.com>
Date: Wed, 21 Jun 2023 15:27:29 -0700
Subject: [PATCH] bits: introduce fixed-type genmasks
Generalize __GENMASK() to support different types, and implement
fixed-types versions of GENMASK() based on it.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
include/linux/bitops.h | 1 -
include/linux/bits.h | 22 ++++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..1db50c69cfdb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -15,7 +15,6 @@
# define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
#endif
-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
#define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
#define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 7c0cf5031abe..cb94128171b2 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -6,6 +6,8 @@
#include <vdso/bits.h>
#include <asm/bitsperlong.h>
+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
+
#define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
#define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
@@ -30,16 +32,16 @@
#define GENMASK_INPUT_CHECK(h, l) 0
#endif
-#define __GENMASK(h, l) \
- (((~UL(0)) - (UL(1) << (l)) + 1) & \
- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
-#define GENMASK(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
+#define __GENMASK(t, h, l) \
+ (GENMASK_INPUT_CHECK(h, l) + \
+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
-#define __GENMASK_ULL(h, l) \
- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
-#define GENMASK_ULL(h, l) \
- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
#endif /* __LINUX_BITS_H */
--
2.39.2
^ permalink raw reply related [flat|nested] 114+ messages in thread
* [Intel-xe] ✗ CI.Patch_applied: failure for Fixed-width mask/bit helpers (rev3)
2023-05-09 5:14 ` Lucas De Marchi
` (13 preceding siblings ...)
(?)
@ 2023-06-22 3:53 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-06-22 3:53 UTC (permalink / raw)
To: Yury Norov; +Cc: intel-xe
== Series Details ==
Series: Fixed-width mask/bit helpers (rev3)
URL : https://patchwork.freedesktop.org/series/117489/
State : failure
== Summary ==
=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: f0727faae drm/xe: Fix unreffed ptr leak on engine lookup
=== git am output follows ===
Applying: drm/amd: Remove wrapper macros over get_u{32, 16, 8}
Patch is empty.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-22 2:20 ` Yury Norov
(?)
(?)
@ 2023-06-22 6:15 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-22 6:15 UTC (permalink / raw)
To: Yury Norov
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
maybe it was a digression of the integer constants
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
yeah... forcing the use of ull and then casting to the type is simpler
and does the job. Checked that it does not break the build if h is
greater than the type and it works
../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
| ^~
However this new version does increase the size. Using i915 module
to test:
$ size build64/drivers/gpu/drm/i915/i915.ko*
text data bss dec hex filename
4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
Lucas De Marchi
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 6:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-22 6:15 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
maybe it was a digression of the integer constants
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
yeah... forcing the use of ull and then casting to the type is simpler
and does the job. Checked that it does not break the build if h is
greater than the type and it works
../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
| ^~
However this new version does increase the size. Using i915 module
to test:
$ size build64/drivers/gpu/drm/i915/i915.ko*
text data bss dec hex filename
4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
Lucas De Marchi
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 6:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-22 6:15 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
maybe it was a digression of the integer constants
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
yeah... forcing the use of ull and then casting to the type is simpler
and does the job. Checked that it does not break the build if h is
greater than the type and it works
../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
| ^~
However this new version does increase the size. Using i915 module
to test:
$ size build64/drivers/gpu/drm/i915/i915.ko*
text data bss dec hex filename
4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
Lucas De Marchi
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 6:15 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2023-06-22 6:15 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
maybe it was a digression of the integer constants
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
yeah... forcing the use of ull and then casting to the type is simpler
and does the job. Checked that it does not break the build if h is
greater than the type and it works
../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
| ^~
However this new version does increase the size. Using i915 module
to test:
$ size build64/drivers/gpu/drm/i915/i915.ko*
text data bss dec hex filename
4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
Lucas De Marchi
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-22 6:15 ` Lucas De Marchi
(?)
(?)
@ 2023-06-22 14:59 ` Yury Norov
-1 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 14:59 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, Rasmus Villemoes,
linux-kernel, dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
+ Rasmus Villemoes <linux@rasmusvillemoes.dk>
> > -#define __GENMASK(h, l) \
> > - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> > - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> > -#define GENMASK(h, l) \
> > - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> > +#define __GENMASK(t, h, l) \
> > + (GENMASK_INPUT_CHECK(h, l) + \
> > + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> > + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> yeah... forcing the use of ull and then casting to the type is simpler
> and does the job. Checked that it does not break the build if h is
> greater than the type and it works
>
> ../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
> 40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
> | ^~
>
> However this new version does increase the size. Using i915 module
> to test:
>
> $ size build64/drivers/gpu/drm/i915/i915.ko*
> text data bss dec hex filename
> 4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
> 4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
It sounds weird because all that should anyways boil down at compile
time...
I enabled DRM_I915 in config and ran bloat-o-meter against today's
master, and I don't see that much difference.
$ size vmlinux vmlinux.new
text data bss dec hex filename
44978613 23962202 3026948 71967763 44a2413 vmlinux
44978653 23966298 3026948 71971899 44a343b vmlinux.new
$ scripts/bloat-o-meter vmlinux vmlinux.new
add/remove: 0/0 grow/shrink: 3/2 up/down: 28/-5 (23)
Function old new delta
kvm_mmu_reset_all_pte_masks 623 639 +16
intel_psr_invalidate 1112 1119 +7
intel_drrs_activate 624 629 +5
intel_psr_flush 1410 1409 -1
clk_fractional_divider_general_approximation 207 203 -4
Total: Before=35398799, After=35398822, chg +0.00%
Can you please check your numbers?
Interestingly, the kvm_mmu_reset_all_pte_masks() uses GENMASK_ULL(),
which should generate the same code across versions. Maybe it's just
a noise? Rasmus, can you please take a look?
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 14:59 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 14:59 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, Rasmus Villemoes, intel-xe
+ Rasmus Villemoes <linux@rasmusvillemoes.dk>
> > -#define __GENMASK(h, l) \
> > - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> > - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> > -#define GENMASK(h, l) \
> > - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> > +#define __GENMASK(t, h, l) \
> > + (GENMASK_INPUT_CHECK(h, l) + \
> > + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> > + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> yeah... forcing the use of ull and then casting to the type is simpler
> and does the job. Checked that it does not break the build if h is
> greater than the type and it works
>
> ../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
> 40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
> | ^~
>
> However this new version does increase the size. Using i915 module
> to test:
>
> $ size build64/drivers/gpu/drm/i915/i915.ko*
> text data bss dec hex filename
> 4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
> 4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
It sounds weird because all that should anyways boil down at compile
time...
I enabled DRM_I915 in config and ran bloat-o-meter against today's
master, and I don't see that much difference.
$ size vmlinux vmlinux.new
text data bss dec hex filename
44978613 23962202 3026948 71967763 44a2413 vmlinux
44978653 23966298 3026948 71971899 44a343b vmlinux.new
$ scripts/bloat-o-meter vmlinux vmlinux.new
add/remove: 0/0 grow/shrink: 3/2 up/down: 28/-5 (23)
Function old new delta
kvm_mmu_reset_all_pte_masks 623 639 +16
intel_psr_invalidate 1112 1119 +7
intel_drrs_activate 624 629 +5
intel_psr_flush 1410 1409 -1
clk_fractional_divider_general_approximation 207 203 -4
Total: Before=35398799, After=35398822, chg +0.00%
Can you please check your numbers?
Interestingly, the kvm_mmu_reset_all_pte_masks() uses GENMASK_ULL(),
which should generate the same code across versions. Maybe it's just
a noise? Rasmus, can you please take a look?
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 14:59 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 14:59 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, Rasmus Villemoes,
linux-kernel, dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
+ Rasmus Villemoes <linux@rasmusvillemoes.dk>
> > -#define __GENMASK(h, l) \
> > - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> > - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> > -#define GENMASK(h, l) \
> > - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> > +#define __GENMASK(t, h, l) \
> > + (GENMASK_INPUT_CHECK(h, l) + \
> > + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> > + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> yeah... forcing the use of ull and then casting to the type is simpler
> and does the job. Checked that it does not break the build if h is
> greater than the type and it works
>
> ../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
> 40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
> | ^~
>
> However this new version does increase the size. Using i915 module
> to test:
>
> $ size build64/drivers/gpu/drm/i915/i915.ko*
> text data bss dec hex filename
> 4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
> 4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
It sounds weird because all that should anyways boil down at compile
time...
I enabled DRM_I915 in config and ran bloat-o-meter against today's
master, and I don't see that much difference.
$ size vmlinux vmlinux.new
text data bss dec hex filename
44978613 23962202 3026948 71967763 44a2413 vmlinux
44978653 23966298 3026948 71971899 44a343b vmlinux.new
$ scripts/bloat-o-meter vmlinux vmlinux.new
add/remove: 0/0 grow/shrink: 3/2 up/down: 28/-5 (23)
Function old new delta
kvm_mmu_reset_all_pte_masks 623 639 +16
intel_psr_invalidate 1112 1119 +7
intel_drrs_activate 624 629 +5
intel_psr_flush 1410 1409 -1
clk_fractional_divider_general_approximation 207 203 -4
Total: Before=35398799, After=35398822, chg +0.00%
Can you please check your numbers?
Interestingly, the kvm_mmu_reset_all_pte_masks() uses GENMASK_ULL(),
which should generate the same code across versions. Maybe it's just
a noise? Rasmus, can you please take a look?
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: [Intel-gfx] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2023-06-22 14:59 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2023-06-22 14:59 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, Rasmus Villemoes,
linux-kernel, dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
+ Rasmus Villemoes <linux@rasmusvillemoes.dk>
> > -#define __GENMASK(h, l) \
> > - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> > - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> > -#define GENMASK(h, l) \
> > - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> > +#define __GENMASK(t, h, l) \
> > + (GENMASK_INPUT_CHECK(h, l) + \
> > + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> > + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> yeah... forcing the use of ull and then casting to the type is simpler
> and does the job. Checked that it does not break the build if h is
> greater than the type and it works
>
> ../include/linux/bits.h:40:20: error: right shift count >= width of type [-Werror=shift-count-overflow]
> 40 | ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
> | ^~
>
> However this new version does increase the size. Using i915 module
> to test:
>
> $ size build64/drivers/gpu/drm/i915/i915.ko*
> text data bss dec hex filename
> 4355676 213473 7048 4576197 45d3c5 build64/drivers/gpu/drm/i915/i915.ko
> 4361052 213505 7048 4581605 45e8e5 build64/drivers/gpu/drm/i915/i915.ko.new
It sounds weird because all that should anyways boil down at compile
time...
I enabled DRM_I915 in config and ran bloat-o-meter against today's
master, and I don't see that much difference.
$ size vmlinux vmlinux.new
text data bss dec hex filename
44978613 23962202 3026948 71967763 44a2413 vmlinux
44978653 23966298 3026948 71971899 44a343b vmlinux.new
$ scripts/bloat-o-meter vmlinux vmlinux.new
add/remove: 0/0 grow/shrink: 3/2 up/down: 28/-5 (23)
Function old new delta
kvm_mmu_reset_all_pte_masks 623 639 +16
intel_psr_invalidate 1112 1119 +7
intel_drrs_activate 624 629 +5
intel_psr_flush 1410 1409 -1
clk_fractional_divider_general_approximation 207 203 -4
Total: Before=35398799, After=35398822, chg +0.00%
Can you please check your numbers?
Interestingly, the kvm_mmu_reset_all_pte_masks() uses GENMASK_ULL(),
which should generate the same code across versions. Maybe it's just
a noise? Rasmus, can you please take a look?
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BUILD: failure for Fixed-width mask/bit helpers (rev2)
2023-05-09 5:14 ` Lucas De Marchi
` (14 preceding siblings ...)
(?)
@ 2023-06-27 20:01 ` Patchwork
-1 siblings, 0 replies; 114+ messages in thread
From: Patchwork @ 2023-06-27 20:01 UTC (permalink / raw)
To: Yury Norov; +Cc: intel-gfx
== Series Details ==
Series: Fixed-width mask/bit helpers (rev2)
URL : https://patchwork.freedesktop.org/series/117490/
State : failure
== Summary ==
Error: patch https://patchwork.freedesktop.org/api/1.0/series/117490/revisions/2/mbox/ not applied
Applying: drm/amd: Remove wrapper macros over get_u{32, 16, 8}
Patch is empty.
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To record the empty patch as an empty commit, run "git am --allow-empty".
To restore the original branch and stop patching, run "git am --abort".
Build failed, no error log produced
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2023-06-22 2:20 ` Yury Norov
@ 2024-01-18 20:42 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-18 20:42 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
Hi,
Reviving this thread as now with xe driver merged we have 2 users for
a fixed-width BIT/GENMASK.
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
but then make uapi/linux/const.h include linux/build_bug.h?
I was thinking about leaving BIT() define where it is, and add the
fixed-width versions in this header. I was thinking uapi/linux/const.h
was more about allowing the U/ULL suffixes for things shared with asm.
Lucas De Marchi
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2024-01-18 20:42 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-18 20:42 UTC (permalink / raw)
To: Yury Norov
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
Hi,
Reviving this thread as now with xe driver merged we have 2 users for
a fixed-width BIT/GENMASK.
On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>Hi Lucas, all!
>
>(Thanks, Andy, for pointing to this thread.)
>
>On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> masks for fixed-width types and also the corresponding BIT_U32(),
>> BIT_U16() and BIT_U8().
>
>Can you split BIT() and GENMASK() material to separate patches?
>
>> All of those depend on a new "U" suffix added to the integer constant.
>> Due to naming clashes it's better to call the macro U32. Since C doesn't
>> have a proper suffix for short and char types, the U16 and U18 variants
>> just use U32 with one additional check in the BIT_* macros to make
>> sure the compiler gives an error when the those types overflow.
>
>I feel like I don't understand the sentence...
>
>> The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> as otherwise they would allow an invalid bit to be passed. Hence
>> implement them in include/linux/bits.h rather than together with
>> the other BIT* variants.
>
>I don't think it's a good way to go because BIT() belongs to a more basic
>level than GENMASK(). Not mentioning possible header dependency issues.
>If you need to test against tighter numeric region, I'd suggest to
>do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>directly. Something like:
> #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
but then make uapi/linux/const.h include linux/build_bug.h?
I was thinking about leaving BIT() define where it is, and add the
fixed-width versions in this header. I was thinking uapi/linux/const.h
was more about allowing the U/ULL suffixes for things shared with asm.
Lucas De Marchi
>
>> The following test file is is used to test this:
>>
>> $ cat mask.c
>> #include <linux/types.h>
>> #include <linux/bits.h>
>>
>> static const u32 a = GENMASK_U32(31, 0);
>> static const u16 b = GENMASK_U16(15, 0);
>> static const u8 c = GENMASK_U8(7, 0);
>> static const u32 x = BIT_U32(31);
>> static const u16 y = BIT_U16(15);
>> static const u8 z = BIT_U8(7);
>>
>> #if FAIL
>> static const u32 a2 = GENMASK_U32(32, 0);
>> static const u16 b2 = GENMASK_U16(16, 0);
>> static const u8 c2 = GENMASK_U8(8, 0);
>> static const u32 x2 = BIT_U32(32);
>> static const u16 y2 = BIT_U16(16);
>> static const u8 z2 = BIT_U8(8);
>> #endif
>>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>> include/linux/bits.h | 22 ++++++++++++++++++++++
>> include/uapi/linux/const.h | 2 ++
>> include/vdso/const.h | 1 +
>> 3 files changed, 25 insertions(+)
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index 7c0cf5031abe..ff4786c99b8c 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -42,4 +42,26 @@
>> #define GENMASK_ULL(h, l) \
>> (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>>
>> +#define __GENMASK_U32(h, l) \
>> + (((~U32(0)) - (U32(1) << (l)) + 1) & \
>> + (~U32(0) >> (32 - 1 - (h))))
>> +#define GENMASK_U32(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l))
>> +
>> +#define __GENMASK_U16(h, l) \
>> + ((U32(0xffff) - (U32(1) << (l)) + 1) & \
>> + (U32(0xffff) >> (16 - 1 - (h))))
>> +#define GENMASK_U16(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l))
>> +
>> +#define __GENMASK_U8(h, l) \
>> + (((U32(0xff)) - (U32(1) << (l)) + 1) & \
>> + (U32(0xff) >> (8 - 1 - (h))))
>> +#define GENMASK_U8(h, l) \
>> + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l))
>
>[...]
>
>I see nothing wrong with fixed-wight versions of GENMASK if it helps
>people to write safer code. Can you please in commit message mention
>the exact patch(es) that added a bug related to GENMASK() misuse? It
>would be easier to advocate the purpose of new API with that in mind.
>
>Regarding implementation - we should avoid copy-pasting in cases
>like this. Below is the patch that I boot-tested for x86_64 and
>compile-tested for arm64.
>
>It looks less opencoded, and maybe Andy will be less skeptical about
>this approach because of less maintenance burden. Please take it if
>you like for v2.
>
>Thanks,
>Yury
>
>From 39c5b35075df67e7d88644470ca78a3486367c02 Mon Sep 17 00:00:00 2001
>From: Yury Norov <yury.norov@gmail.com>
>Date: Wed, 21 Jun 2023 15:27:29 -0700
>Subject: [PATCH] bits: introduce fixed-type genmasks
>
>Generalize __GENMASK() to support different types, and implement
>fixed-types versions of GENMASK() based on it.
>
>Signed-off-by: Yury Norov <yury.norov@gmail.com>
>---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
>diff --git a/include/linux/bitops.h b/include/linux/bitops.h
>index 2ba557e067fe..1db50c69cfdb 100644
>--- a/include/linux/bitops.h
>+++ b/include/linux/bitops.h
>@@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
>-#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
>diff --git a/include/linux/bits.h b/include/linux/bits.h
>index 7c0cf5031abe..cb94128171b2 100644
>--- a/include/linux/bits.h
>+++ b/include/linux/bits.h
>@@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
>+#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
>+
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
>@@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
>-#define __GENMASK(h, l) \
>- (((~UL(0)) - (UL(1) << (l)) + 1) & \
>- (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
>-#define GENMASK(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
>+#define __GENMASK(t, h, l) \
>+ (GENMASK_INPUT_CHECK(h, l) + \
>+ (((t)~0ULL - ((t)(1) << (l)) + 1) & \
>+ ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
>-#define __GENMASK_ULL(h, l) \
>- (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
>- (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
>-#define GENMASK_ULL(h, l) \
>- (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
>+#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
>+#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
>+#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
>+#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
>+#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>+#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
>--
>2.39.2
>
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2024-01-18 20:42 ` Lucas De Marchi
@ 2024-01-18 21:48 ` Yury Norov
-1 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2024-01-18 21:48 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
> Hi,
>
> Reviving this thread as now with xe driver merged we have 2 users for
> a fixed-width BIT/GENMASK.
Can you point where and why?
> On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
> > Hi Lucas, all!
> >
> > (Thanks, Andy, for pointing to this thread.)
> >
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Can you split BIT() and GENMASK() material to separate patches?
> >
> > > All of those depend on a new "U" suffix added to the integer constant.
> > > Due to naming clashes it's better to call the macro U32. Since C doesn't
> > > have a proper suffix for short and char types, the U16 and U18 variants
> > > just use U32 with one additional check in the BIT_* macros to make
> > > sure the compiler gives an error when the those types overflow.
> >
> > I feel like I don't understand the sentence...
> >
> > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> > > as otherwise they would allow an invalid bit to be passed. Hence
> > > implement them in include/linux/bits.h rather than together with
> > > the other BIT* variants.
> >
> > I don't think it's a good way to go because BIT() belongs to a more basic
> > level than GENMASK(). Not mentioning possible header dependency issues.
> > If you need to test against tighter numeric region, I'd suggest to
> > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
> > directly. Something like:
> > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
> but then make uapi/linux/const.h include linux/build_bug.h?
> I was thinking about leaving BIT() define where it is, and add the
> fixed-width versions in this header. I was thinking uapi/linux/const.h
> was more about allowing the U/ULL suffixes for things shared with asm.
You can't include kernel headers in uapi code. But you can try doing
vice-versa: implement or move the pieces you need to share to the
uapi/linux/const.h, and use them in the kernel code.
In the worst case, you can just implement the macro you need in the
uapi header, and make it working that way.
Can you confirm that my proposal increases the kernel size? If so, is
there any way to fix it? If it doesn't, I'd prefer to use the
__GENMASK() approach.
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2024-01-18 21:48 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2024-01-18 21:48 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
> Hi,
>
> Reviving this thread as now with xe driver merged we have 2 users for
> a fixed-width BIT/GENMASK.
Can you point where and why?
> On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
> > Hi Lucas, all!
> >
> > (Thanks, Andy, for pointing to this thread.)
> >
> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > BIT_U16() and BIT_U8().
> >
> > Can you split BIT() and GENMASK() material to separate patches?
> >
> > > All of those depend on a new "U" suffix added to the integer constant.
> > > Due to naming clashes it's better to call the macro U32. Since C doesn't
> > > have a proper suffix for short and char types, the U16 and U18 variants
> > > just use U32 with one additional check in the BIT_* macros to make
> > > sure the compiler gives an error when the those types overflow.
> >
> > I feel like I don't understand the sentence...
> >
> > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> > > as otherwise they would allow an invalid bit to be passed. Hence
> > > implement them in include/linux/bits.h rather than together with
> > > the other BIT* variants.
> >
> > I don't think it's a good way to go because BIT() belongs to a more basic
> > level than GENMASK(). Not mentioning possible header dependency issues.
> > If you need to test against tighter numeric region, I'd suggest to
> > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
> > directly. Something like:
> > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>
> but then make uapi/linux/const.h include linux/build_bug.h?
> I was thinking about leaving BIT() define where it is, and add the
> fixed-width versions in this header. I was thinking uapi/linux/const.h
> was more about allowing the U/ULL suffixes for things shared with asm.
You can't include kernel headers in uapi code. But you can try doing
vice-versa: implement or move the pieces you need to share to the
uapi/linux/const.h, and use them in the kernel code.
In the worst case, you can just implement the macro you need in the
uapi header, and make it working that way.
Can you confirm that my proposal increases the kernel size? If so, is
there any way to fix it? If it doesn't, I'd prefer to use the
__GENMASK() approach.
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2024-01-18 21:48 ` Yury Norov
@ 2024-01-18 23:25 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-18 23:25 UTC (permalink / raw)
To: Yury Norov
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
>On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
>> Hi,
>>
>> Reviving this thread as now with xe driver merged we have 2 users for
>> a fixed-width BIT/GENMASK.
>
>Can you point where and why?
See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
drivers/gpu/drm/xe. I think the register definition in the xe shows it
in a good way:
drivers/gpu/drm/xe/regs/xe_gt_regs.h
The GPU registers are mostly 32-bit wide. We don't want to accidently do
something like below (s/30/33/ added for illustration purposes):
#define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
#define DISABLE_D8_D16_COASLESCE REG_BIT(33)
Same thing for GENMASK family of macros and for registers that are 16 or
8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>
>> On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>> > Hi Lucas, all!
>> >
>> > (Thanks, Andy, for pointing to this thread.)
>> >
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > masks for fixed-width types and also the corresponding BIT_U32(),
>> > > BIT_U16() and BIT_U8().
>> >
>> > Can you split BIT() and GENMASK() material to separate patches?
>> >
>> > > All of those depend on a new "U" suffix added to the integer constant.
>> > > Due to naming clashes it's better to call the macro U32. Since C doesn't
>> > > have a proper suffix for short and char types, the U16 and U18 variants
>> > > just use U32 with one additional check in the BIT_* macros to make
>> > > sure the compiler gives an error when the those types overflow.
>> >
>> > I feel like I don't understand the sentence...
>> >
>> > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> > > as otherwise they would allow an invalid bit to be passed. Hence
>> > > implement them in include/linux/bits.h rather than together with
>> > > the other BIT* variants.
>> >
>> > I don't think it's a good way to go because BIT() belongs to a more basic
>> > level than GENMASK(). Not mentioning possible header dependency issues.
>> > If you need to test against tighter numeric region, I'd suggest to
>> > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>> > directly. Something like:
>> > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>>
>> but then make uapi/linux/const.h include linux/build_bug.h?
>> I was thinking about leaving BIT() define where it is, and add the
>> fixed-width versions in this header. I was thinking uapi/linux/const.h
>> was more about allowing the U/ULL suffixes for things shared with asm.
>
>You can't include kernel headers in uapi code. But you can try doing
>vice-versa: implement or move the pieces you need to share to the
>uapi/linux/const.h, and use them in the kernel code.
but in this CONST_GE() should trigger a BUG/static_assert
on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
so there's nothing much left to change in uapi/linux/const.h.
I'd expect drivers to be the primary user of these fixed-width BIT
variants, hence the proposal to do in include/linux/bits.h.
Ssomething like this WIP/untested diff (on top of your previous patch):
diff --git a/include/linux/bits.h b/include/linux/bits.h
index cb94128171b2..409cd10f7597 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -24,12 +24,16 @@
#define GENMASK_INPUT_CHECK(h, l) \
(BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
__is_constexpr((l) > (h)), (l) > (h), 0)))
+#define BIT_INPUT_CHECK(type, b) \
+ ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
+ __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
#else
/*
* BUILD_BUG_ON_ZERO is not available in h files included from asm files,
* disable the input check if that is the case.
*/
#define GENMASK_INPUT_CHECK(h, l) 0
+#define BIT_INPUT_CHECK(type, b) 0
#endif
#define __GENMASK(t, h, l) \
@@ -44,4 +48,9 @@
#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
+#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
+#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
+#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
+#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
+
#endif /* __LINUX_BITS_H */
>
>In the worst case, you can just implement the macro you need in the
>uapi header, and make it working that way.
>
>Can you confirm that my proposal increases the kernel size? If so, is
>there any way to fix it? If it doesn't, I'd prefer to use the
>__GENMASK() approach.
I agree on continuing with your approach. The bloat-o-meter indeed
showed almost no difference. `size ....i915.o` on the other hand
increased, but then decreased when I replaced our current REG_GENMASK()
implementation to reuse the new GENMASK_U*()
$ # test-genmask.00: before any change
$ # test-genmask.01: after your patch to GENMASK
$ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
to use the new macros
$ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
text data bss dec hex filename
4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
$ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
Function old new delta
intel_drrs_activate 399 402 +3
intel_psr_invalidate 546 547 +1
intel_psr_flush 880 875 -5
Total: Before=2980530, After=2980529, chg -0.00%
$ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Function old new delta
Total: Before=2980529, After=2980529, chg +0.00%
thanks
Lucas De Marchi
>
>Thanks,
>Yury
^ permalink raw reply related [flat|nested] 114+ messages in thread
* Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2024-01-18 23:25 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-18 23:25 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
>On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
>> Hi,
>>
>> Reviving this thread as now with xe driver merged we have 2 users for
>> a fixed-width BIT/GENMASK.
>
>Can you point where and why?
See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
drivers/gpu/drm/xe. I think the register definition in the xe shows it
in a good way:
drivers/gpu/drm/xe/regs/xe_gt_regs.h
The GPU registers are mostly 32-bit wide. We don't want to accidently do
something like below (s/30/33/ added for illustration purposes):
#define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
#define DISABLE_D8_D16_COASLESCE REG_BIT(33)
Same thing for GENMASK family of macros and for registers that are 16 or
8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>
>> On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>> > Hi Lucas, all!
>> >
>> > (Thanks, Andy, for pointing to this thread.)
>> >
>> > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > masks for fixed-width types and also the corresponding BIT_U32(),
>> > > BIT_U16() and BIT_U8().
>> >
>> > Can you split BIT() and GENMASK() material to separate patches?
>> >
>> > > All of those depend on a new "U" suffix added to the integer constant.
>> > > Due to naming clashes it's better to call the macro U32. Since C doesn't
>> > > have a proper suffix for short and char types, the U16 and U18 variants
>> > > just use U32 with one additional check in the BIT_* macros to make
>> > > sure the compiler gives an error when the those types overflow.
>> >
>> > I feel like I don't understand the sentence...
>> >
>> > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> > > as otherwise they would allow an invalid bit to be passed. Hence
>> > > implement them in include/linux/bits.h rather than together with
>> > > the other BIT* variants.
>> >
>> > I don't think it's a good way to go because BIT() belongs to a more basic
>> > level than GENMASK(). Not mentioning possible header dependency issues.
>> > If you need to test against tighter numeric region, I'd suggest to
>> > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>> > directly. Something like:
>> > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>>
>> but then make uapi/linux/const.h include linux/build_bug.h?
>> I was thinking about leaving BIT() define where it is, and add the
>> fixed-width versions in this header. I was thinking uapi/linux/const.h
>> was more about allowing the U/ULL suffixes for things shared with asm.
>
>You can't include kernel headers in uapi code. But you can try doing
>vice-versa: implement or move the pieces you need to share to the
>uapi/linux/const.h, and use them in the kernel code.
but in this CONST_GE() should trigger a BUG/static_assert
on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
so there's nothing much left to change in uapi/linux/const.h.
I'd expect drivers to be the primary user of these fixed-width BIT
variants, hence the proposal to do in include/linux/bits.h.
Ssomething like this WIP/untested diff (on top of your previous patch):
diff --git a/include/linux/bits.h b/include/linux/bits.h
index cb94128171b2..409cd10f7597 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -24,12 +24,16 @@
#define GENMASK_INPUT_CHECK(h, l) \
(BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
__is_constexpr((l) > (h)), (l) > (h), 0)))
+#define BIT_INPUT_CHECK(type, b) \
+ ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
+ __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
#else
/*
* BUILD_BUG_ON_ZERO is not available in h files included from asm files,
* disable the input check if that is the case.
*/
#define GENMASK_INPUT_CHECK(h, l) 0
+#define BIT_INPUT_CHECK(type, b) 0
#endif
#define __GENMASK(t, h, l) \
@@ -44,4 +48,9 @@
#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
+#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
+#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
+#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
+#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
+
#endif /* __LINUX_BITS_H */
>
>In the worst case, you can just implement the macro you need in the
>uapi header, and make it working that way.
>
>Can you confirm that my proposal increases the kernel size? If so, is
>there any way to fix it? If it doesn't, I'd prefer to use the
>__GENMASK() approach.
I agree on continuing with your approach. The bloat-o-meter indeed
showed almost no difference. `size ....i915.o` on the other hand
increased, but then decreased when I replaced our current REG_GENMASK()
implementation to reuse the new GENMASK_U*()
$ # test-genmask.00: before any change
$ # test-genmask.01: after your patch to GENMASK
$ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
to use the new macros
$ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
text data bss dec hex filename
4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
$ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
Function old new delta
intel_drrs_activate 399 402 +3
intel_psr_invalidate 546 547 +1
intel_psr_flush 880 875 -5
Total: Before=2980530, After=2980529, chg -0.00%
$ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
Function old new delta
Total: Before=2980529, After=2980529, chg +0.00%
thanks
Lucas De Marchi
>
>Thanks,
>Yury
^ permalink raw reply related [flat|nested] 114+ messages in thread
* Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2024-01-18 23:25 ` Lucas De Marchi
@ 2024-01-19 2:01 ` Yury Norov
-1 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2024-01-19 2:01 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Thu, Jan 18, 2024 at 05:25:00PM -0600, Lucas De Marchi wrote:
> SA2PR11MB4874
> X-OriginatorOrg: intel.com
> Status: RO
> Content-Length: 6257
> Lines: 150
>
> On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
> > On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
> > > Hi,
> > >
> > > Reviving this thread as now with xe driver merged we have 2 users for
> > > a fixed-width BIT/GENMASK.
> >
> > Can you point where and why?
>
> See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
> drivers/gpu/drm/xe. I think the register definition in the xe shows it
> in a good way:
>
> drivers/gpu/drm/xe/regs/xe_gt_regs.h
>
> The GPU registers are mostly 32-bit wide. We don't want to accidently do
> something like below (s/30/33/ added for illustration purposes):
>
> #define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
> #define DISABLE_D8_D16_COASLESCE REG_BIT(33)
>
> Same thing for GENMASK family of macros and for registers that are 16 or
> 8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>
>
> >
> > > On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
> > > > Hi Lucas, all!
> > > >
> > > > (Thanks, Andy, for pointing to this thread.)
> > > >
> > > > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > > > BIT_U16() and BIT_U8().
> > > >
> > > > Can you split BIT() and GENMASK() material to separate patches?
> > > >
> > > > > All of those depend on a new "U" suffix added to the integer constant.
> > > > > Due to naming clashes it's better to call the macro U32. Since C doesn't
> > > > > have a proper suffix for short and char types, the U16 and U18 variants
> > > > > just use U32 with one additional check in the BIT_* macros to make
> > > > > sure the compiler gives an error when the those types overflow.
> > > >
> > > > I feel like I don't understand the sentence...
> > > >
> > > > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> > > > > as otherwise they would allow an invalid bit to be passed. Hence
> > > > > implement them in include/linux/bits.h rather than together with
> > > > > the other BIT* variants.
> > > >
> > > > I don't think it's a good way to go because BIT() belongs to a more basic
> > > > level than GENMASK(). Not mentioning possible header dependency issues.
> > > > If you need to test against tighter numeric region, I'd suggest to
> > > > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
> > > > directly. Something like:
> > > > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> > >
> > > but then make uapi/linux/const.h include linux/build_bug.h?
> > > I was thinking about leaving BIT() define where it is, and add the
> > > fixed-width versions in this header. I was thinking uapi/linux/const.h
> > > was more about allowing the U/ULL suffixes for things shared with asm.
> >
> > You can't include kernel headers in uapi code. But you can try doing
> > vice-versa: implement or move the pieces you need to share to the
> > uapi/linux/const.h, and use them in the kernel code.
>
> but in this CONST_GE() should trigger a BUG/static_assert
> on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
> so there's nothing much left to change in uapi/linux/const.h.
>
> I'd expect drivers to be the primary user of these fixed-width BIT
> variants, hence the proposal to do in include/linux/bits.h.
> Ssomething like this WIP/untested diff (on top of your previous patch):
>
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index cb94128171b2..409cd10f7597 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -24,12 +24,16 @@
> #define GENMASK_INPUT_CHECK(h, l) \
> (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
> __is_constexpr((l) > (h)), (l) > (h), 0)))
> +#define BIT_INPUT_CHECK(type, b) \
> + ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
> + __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
> #else
> /*
> * BUILD_BUG_ON_ZERO is not available in h files included from asm files,
> * disable the input check if that is the case.
> */
> #define GENMASK_INPUT_CHECK(h, l) 0
> +#define BIT_INPUT_CHECK(type, b) 0
> #endif
> #define __GENMASK(t, h, l) \
> @@ -44,4 +48,9 @@
> #define GENMASK_U32(h, l) __GENMASK(u32, h, l)
> #define GENMASK_U64(h, l) __GENMASK(u64, h, l)
> +#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
> +#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
> +#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
> +#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
Can you add some vertical spacing here, like between GENMASK and BIT
blocks?
> +
> #endif /* __LINUX_BITS_H */
>
> >
> > In the worst case, you can just implement the macro you need in the
> > uapi header, and make it working that way.
> >
> > Can you confirm that my proposal increases the kernel size? If so, is
> > there any way to fix it? If it doesn't, I'd prefer to use the
> > __GENMASK() approach.
>
> I agree on continuing with your approach. The bloat-o-meter indeed
> showed almost no difference. `size ....i915.o` on the other hand
> increased, but then decreased when I replaced our current REG_GENMASK()
> implementation to reuse the new GENMASK_U*()
>
> $ # test-genmask.00: before any change
> $ # test-genmask.01: after your patch to GENMASK
> $ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
> to use the new macros
> $ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
> text data bss dec hex filename
> 4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
> 4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
> 4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
>
> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
> add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
> Function old new delta
> intel_drrs_activate 399 402 +3
> intel_psr_invalidate 546 547 +1
> intel_psr_flush 880 875 -5
> Total: Before=2980530, After=2980529, chg -0.00%
>
> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
> add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
> Function old new delta
> Total
OK then. With the above approach, fixed-type BIT() macros look like wrappers
around the plain BIT(), and I think, we can live with that.
Can you send all the material as a proper series, including my
GENMASK patch, your patch above and a patch that switches your driver
to using the new API? I'll take it then in bitmap-for-next when the
merge window will get closed.
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2024-01-19 2:01 ` Yury Norov
0 siblings, 0 replies; 114+ messages in thread
From: Yury Norov @ 2024-01-19 2:01 UTC (permalink / raw)
To: Lucas De Marchi
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Thu, Jan 18, 2024 at 05:25:00PM -0600, Lucas De Marchi wrote:
> SA2PR11MB4874
> X-OriginatorOrg: intel.com
> Status: RO
> Content-Length: 6257
> Lines: 150
>
> On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
> > On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
> > > Hi,
> > >
> > > Reviving this thread as now with xe driver merged we have 2 users for
> > > a fixed-width BIT/GENMASK.
> >
> > Can you point where and why?
>
> See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
> drivers/gpu/drm/xe. I think the register definition in the xe shows it
> in a good way:
>
> drivers/gpu/drm/xe/regs/xe_gt_regs.h
>
> The GPU registers are mostly 32-bit wide. We don't want to accidently do
> something like below (s/30/33/ added for illustration purposes):
>
> #define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
> #define DISABLE_D8_D16_COASLESCE REG_BIT(33)
>
> Same thing for GENMASK family of macros and for registers that are 16 or
> 8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>
>
> >
> > > On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
> > > > Hi Lucas, all!
> > > >
> > > > (Thanks, Andy, for pointing to this thread.)
> > > >
> > > > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
> > > > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
> > > > > masks for fixed-width types and also the corresponding BIT_U32(),
> > > > > BIT_U16() and BIT_U8().
> > > >
> > > > Can you split BIT() and GENMASK() material to separate patches?
> > > >
> > > > > All of those depend on a new "U" suffix added to the integer constant.
> > > > > Due to naming clashes it's better to call the macro U32. Since C doesn't
> > > > > have a proper suffix for short and char types, the U16 and U18 variants
> > > > > just use U32 with one additional check in the BIT_* macros to make
> > > > > sure the compiler gives an error when the those types overflow.
> > > >
> > > > I feel like I don't understand the sentence...
> > > >
> > > > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
> > > > > as otherwise they would allow an invalid bit to be passed. Hence
> > > > > implement them in include/linux/bits.h rather than together with
> > > > > the other BIT* variants.
> > > >
> > > > I don't think it's a good way to go because BIT() belongs to a more basic
> > > > level than GENMASK(). Not mentioning possible header dependency issues.
> > > > If you need to test against tighter numeric region, I'd suggest to
> > > > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
> > > > directly. Something like:
> > > > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
> > >
> > > but then make uapi/linux/const.h include linux/build_bug.h?
> > > I was thinking about leaving BIT() define where it is, and add the
> > > fixed-width versions in this header. I was thinking uapi/linux/const.h
> > > was more about allowing the U/ULL suffixes for things shared with asm.
> >
> > You can't include kernel headers in uapi code. But you can try doing
> > vice-versa: implement or move the pieces you need to share to the
> > uapi/linux/const.h, and use them in the kernel code.
>
> but in this CONST_GE() should trigger a BUG/static_assert
> on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
> so there's nothing much left to change in uapi/linux/const.h.
>
> I'd expect drivers to be the primary user of these fixed-width BIT
> variants, hence the proposal to do in include/linux/bits.h.
> Ssomething like this WIP/untested diff (on top of your previous patch):
>
>
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index cb94128171b2..409cd10f7597 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -24,12 +24,16 @@
> #define GENMASK_INPUT_CHECK(h, l) \
> (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
> __is_constexpr((l) > (h)), (l) > (h), 0)))
> +#define BIT_INPUT_CHECK(type, b) \
> + ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
> + __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
> #else
> /*
> * BUILD_BUG_ON_ZERO is not available in h files included from asm files,
> * disable the input check if that is the case.
> */
> #define GENMASK_INPUT_CHECK(h, l) 0
> +#define BIT_INPUT_CHECK(type, b) 0
> #endif
> #define __GENMASK(t, h, l) \
> @@ -44,4 +48,9 @@
> #define GENMASK_U32(h, l) __GENMASK(u32, h, l)
> #define GENMASK_U64(h, l) __GENMASK(u64, h, l)
> +#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
> +#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
> +#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
> +#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
Can you add some vertical spacing here, like between GENMASK and BIT
blocks?
> +
> #endif /* __LINUX_BITS_H */
>
> >
> > In the worst case, you can just implement the macro you need in the
> > uapi header, and make it working that way.
> >
> > Can you confirm that my proposal increases the kernel size? If so, is
> > there any way to fix it? If it doesn't, I'd prefer to use the
> > __GENMASK() approach.
>
> I agree on continuing with your approach. The bloat-o-meter indeed
> showed almost no difference. `size ....i915.o` on the other hand
> increased, but then decreased when I replaced our current REG_GENMASK()
> implementation to reuse the new GENMASK_U*()
>
> $ # test-genmask.00: before any change
> $ # test-genmask.01: after your patch to GENMASK
> $ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
> to use the new macros
> $ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
> text data bss dec hex filename
> 4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
> 4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
> 4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
>
> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
> add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
> Function old new delta
> intel_drrs_activate 399 402 +3
> intel_psr_invalidate 546 547 +1
> intel_psr_flush 880 875 -5
> Total: Before=2980530, After=2980529, chg -0.00%
>
> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
> add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
> Function old new delta
> Total
OK then. With the above approach, fixed-type BIT() macros look like wrappers
around the plain BIT(), and I think, we can live with that.
Can you send all the material as a proper series, including my
GENMASK patch, your patch above and a patch that switches your driver
to using the new API? I'll take it then in bitmap-for-next when the
merge window will get closed.
Thanks,
Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
2024-01-19 2:01 ` Yury Norov
@ 2024-01-19 15:07 ` Lucas De Marchi
-1 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-19 15:07 UTC (permalink / raw)
To: Yury Norov
Cc: Andrew Morton, intel-gfx, Kevin Brodsky, linux-kernel, dri-devel,
Christian König, Masahiro Yamada, Alex Deucher,
Thomas Gleixner, Andy Shevchenko, intel-xe
On Thu, Jan 18, 2024 at 06:01:58PM -0800, Yury Norov wrote:
>On Thu, Jan 18, 2024 at 05:25:00PM -0600, Lucas De Marchi wrote:
>> SA2PR11MB4874
>> X-OriginatorOrg: intel.com
>> Status: RO
>> Content-Length: 6257
>> Lines: 150
>>
>> On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
>> > On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
>> > > Hi,
>> > >
>> > > Reviving this thread as now with xe driver merged we have 2 users for
>> > > a fixed-width BIT/GENMASK.
>> >
>> > Can you point where and why?
>>
>> See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
>> drivers/gpu/drm/xe. I think the register definition in the xe shows it
>> in a good way:
>>
>> drivers/gpu/drm/xe/regs/xe_gt_regs.h
>>
>> The GPU registers are mostly 32-bit wide. We don't want to accidently do
>> something like below (s/30/33/ added for illustration purposes):
>>
>> #define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
>> #define DISABLE_D8_D16_COASLESCE REG_BIT(33)
>>
>> Same thing for GENMASK family of macros and for registers that are 16 or
>> 8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>>
>>
>> >
>> > > On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>> > > > Hi Lucas, all!
>> > > >
>> > > > (Thanks, Andy, for pointing to this thread.)
>> > > >
>> > > > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > > > masks for fixed-width types and also the corresponding BIT_U32(),
>> > > > > BIT_U16() and BIT_U8().
>> > > >
>> > > > Can you split BIT() and GENMASK() material to separate patches?
>> > > >
>> > > > > All of those depend on a new "U" suffix added to the integer constant.
>> > > > > Due to naming clashes it's better to call the macro U32. Since C doesn't
>> > > > > have a proper suffix for short and char types, the U16 and U18 variants
>> > > > > just use U32 with one additional check in the BIT_* macros to make
>> > > > > sure the compiler gives an error when the those types overflow.
>> > > >
>> > > > I feel like I don't understand the sentence...
>> > > >
>> > > > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> > > > > as otherwise they would allow an invalid bit to be passed. Hence
>> > > > > implement them in include/linux/bits.h rather than together with
>> > > > > the other BIT* variants.
>> > > >
>> > > > I don't think it's a good way to go because BIT() belongs to a more basic
>> > > > level than GENMASK(). Not mentioning possible header dependency issues.
>> > > > If you need to test against tighter numeric region, I'd suggest to
>> > > > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>> > > > directly. Something like:
>> > > > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>> > >
>> > > but then make uapi/linux/const.h include linux/build_bug.h?
>> > > I was thinking about leaving BIT() define where it is, and add the
>> > > fixed-width versions in this header. I was thinking uapi/linux/const.h
>> > > was more about allowing the U/ULL suffixes for things shared with asm.
>> >
>> > You can't include kernel headers in uapi code. But you can try doing
>> > vice-versa: implement or move the pieces you need to share to the
>> > uapi/linux/const.h, and use them in the kernel code.
>>
>> but in this CONST_GE() should trigger a BUG/static_assert
>> on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
>> so there's nothing much left to change in uapi/linux/const.h.
>>
>> I'd expect drivers to be the primary user of these fixed-width BIT
>> variants, hence the proposal to do in include/linux/bits.h.
>> Ssomething like this WIP/untested diff (on top of your previous patch):
>>
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index cb94128171b2..409cd10f7597 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -24,12 +24,16 @@
>> #define GENMASK_INPUT_CHECK(h, l) \
>> (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
>> __is_constexpr((l) > (h)), (l) > (h), 0)))
>> +#define BIT_INPUT_CHECK(type, b) \
>> + ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
>> + __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
>> #else
>> /*
>> * BUILD_BUG_ON_ZERO is not available in h files included from asm files,
>> * disable the input check if that is the case.
>> */
>> #define GENMASK_INPUT_CHECK(h, l) 0
>> +#define BIT_INPUT_CHECK(type, b) 0
>> #endif
>> #define __GENMASK(t, h, l) \
>> @@ -44,4 +48,9 @@
>> #define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>> #define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>> +#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
>> +#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
>> +#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
>> +#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
>
>Can you add some vertical spacing here, like between GENMASK and BIT
>blocks?
I think gmail mangled this, because it does show up with more vertical
space on the email I sent:
https://lore.kernel.org/all/clamvpymzwiehjqd6jhuigymyg5ikxewxyeee2eae4tgzmaz7u@6rposizee3t6/
Anyway, I will clean this up and probably add some docs about its usage.
>
>> +
>> #endif /* __LINUX_BITS_H */
>>
>> >
>> > In the worst case, you can just implement the macro you need in the
>> > uapi header, and make it working that way.
>> >
>> > Can you confirm that my proposal increases the kernel size? If so, is
>> > there any way to fix it? If it doesn't, I'd prefer to use the
>> > __GENMASK() approach.
>>
>> I agree on continuing with your approach. The bloat-o-meter indeed
>> showed almost no difference. `size ....i915.o` on the other hand
>> increased, but then decreased when I replaced our current REG_GENMASK()
>> implementation to reuse the new GENMASK_U*()
>>
>> $ # test-genmask.00: before any change
>> $ # test-genmask.01: after your patch to GENMASK
>> $ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
>> to use the new macros
>> $ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
>> text data bss dec hex filename
>> 4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
>> 4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
>> 4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
>>
>> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
>> add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
>> Function old new delta
>> intel_drrs_activate 399 402 +3
>> intel_psr_invalidate 546 547 +1
>> intel_psr_flush 880 875 -5
>> Total: Before=2980530, After=2980529, chg -0.00%
>>
>> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
>> add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
>> Function old new delta
>> Total
>
>OK then. With the above approach, fixed-type BIT() macros look like wrappers
>around the plain BIT(), and I think, we can live with that.
>
>Can you send all the material as a proper series, including my
>GENMASK patch, your patch above and a patch that switches your driver
>to using the new API? I'll take it then in bitmap-for-next when the
>merge window will get closed.
sure, thanks
Lucas De Marchi
>
>Thanks,
>Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
* Re: Re: Re: Re: [Intel-xe] [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros
@ 2024-01-19 15:07 ` Lucas De Marchi
0 siblings, 0 replies; 114+ messages in thread
From: Lucas De Marchi @ 2024-01-19 15:07 UTC (permalink / raw)
To: Yury Norov
Cc: Andy Shevchenko, intel-gfx, Kevin Brodsky, linux-kernel,
dri-devel, intel-xe, Thomas Gleixner, Alex Deucher,
Andrew Morton, Masahiro Yamada, Christian König
On Thu, Jan 18, 2024 at 06:01:58PM -0800, Yury Norov wrote:
>On Thu, Jan 18, 2024 at 05:25:00PM -0600, Lucas De Marchi wrote:
>> SA2PR11MB4874
>> X-OriginatorOrg: intel.com
>> Status: RO
>> Content-Length: 6257
>> Lines: 150
>>
>> On Thu, Jan 18, 2024 at 01:48:43PM -0800, Yury Norov wrote:
>> > On Thu, Jan 18, 2024 at 02:42:12PM -0600, Lucas De Marchi wrote:
>> > > Hi,
>> > >
>> > > Reviving this thread as now with xe driver merged we have 2 users for
>> > > a fixed-width BIT/GENMASK.
>> >
>> > Can you point where and why?
>>
>> See users of REG_GENMASK and REG_BIT in drivers/gpu/drm/i915 and
>> drivers/gpu/drm/xe. I think the register definition in the xe shows it
>> in a good way:
>>
>> drivers/gpu/drm/xe/regs/xe_gt_regs.h
>>
>> The GPU registers are mostly 32-bit wide. We don't want to accidently do
>> something like below (s/30/33/ added for illustration purposes):
>>
>> #define LSC_CHICKEN_BIT_0 XE_REG_MCR(0xe7c8)
>> #define DISABLE_D8_D16_COASLESCE REG_BIT(33)
>>
>> Same thing for GENMASK family of macros and for registers that are 16 or
>> 8 bits. See e.g. drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>>
>>
>> >
>> > > On Wed, Jun 21, 2023 at 07:20:59PM -0700, Yury Norov wrote:
>> > > > Hi Lucas, all!
>> > > >
>> > > > (Thanks, Andy, for pointing to this thread.)
>> > > >
>> > > > On Mon, May 08, 2023 at 10:14:02PM -0700, Lucas De Marchi wrote:
>> > > > > Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create
>> > > > > masks for fixed-width types and also the corresponding BIT_U32(),
>> > > > > BIT_U16() and BIT_U8().
>> > > >
>> > > > Can you split BIT() and GENMASK() material to separate patches?
>> > > >
>> > > > > All of those depend on a new "U" suffix added to the integer constant.
>> > > > > Due to naming clashes it's better to call the macro U32. Since C doesn't
>> > > > > have a proper suffix for short and char types, the U16 and U18 variants
>> > > > > just use U32 with one additional check in the BIT_* macros to make
>> > > > > sure the compiler gives an error when the those types overflow.
>> > > >
>> > > > I feel like I don't understand the sentence...
>> > > >
>> > > > > The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(),
>> > > > > as otherwise they would allow an invalid bit to be passed. Hence
>> > > > > implement them in include/linux/bits.h rather than together with
>> > > > > the other BIT* variants.
>> > > >
>> > > > I don't think it's a good way to go because BIT() belongs to a more basic
>> > > > level than GENMASK(). Not mentioning possible header dependency issues.
>> > > > If you need to test against tighter numeric region, I'd suggest to
>> > > > do the same trick as GENMASK_INPUT_CHECK() does, but in uapi/linux/const.h
>> > > > directly. Something like:
>> > > > #define _U8(x) (CONST_GT(U8_MAX, x) + _AC(x, U))
>> > >
>> > > but then make uapi/linux/const.h include linux/build_bug.h?
>> > > I was thinking about leaving BIT() define where it is, and add the
>> > > fixed-width versions in this header. I was thinking uapi/linux/const.h
>> > > was more about allowing the U/ULL suffixes for things shared with asm.
>> >
>> > You can't include kernel headers in uapi code. But you can try doing
>> > vice-versa: implement or move the pieces you need to share to the
>> > uapi/linux/const.h, and use them in the kernel code.
>>
>> but in this CONST_GE() should trigger a BUG/static_assert
>> on U8_MAX < x. AFAICS that check can't be on the uapi/ side,
>> so there's nothing much left to change in uapi/linux/const.h.
>>
>> I'd expect drivers to be the primary user of these fixed-width BIT
>> variants, hence the proposal to do in include/linux/bits.h.
>> Ssomething like this WIP/untested diff (on top of your previous patch):
>>
>>
>> diff --git a/include/linux/bits.h b/include/linux/bits.h
>> index cb94128171b2..409cd10f7597 100644
>> --- a/include/linux/bits.h
>> +++ b/include/linux/bits.h
>> @@ -24,12 +24,16 @@
>> #define GENMASK_INPUT_CHECK(h, l) \
>> (BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
>> __is_constexpr((l) > (h)), (l) > (h), 0)))
>> +#define BIT_INPUT_CHECK(type, b) \
>> + ((BUILD_BUG_ON_ZERO(__builtin_choose_expr( \
>> + __is_constexpr(b), (b) >= BITS_PER_TYPE(type), 0))))
>> #else
>> /*
>> * BUILD_BUG_ON_ZERO is not available in h files included from asm files,
>> * disable the input check if that is the case.
>> */
>> #define GENMASK_INPUT_CHECK(h, l) 0
>> +#define BIT_INPUT_CHECK(type, b) 0
>> #endif
>> #define __GENMASK(t, h, l) \
>> @@ -44,4 +48,9 @@
>> #define GENMASK_U32(h, l) __GENMASK(u32, h, l)
>> #define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>> +#define BIT_U8(b) (u8)(BIT_INPUT_CHECK(u8, b) + BIT(b))
>> +#define BIT_U16(b) (u16)(BIT_INPUT_CHECK(u16, b) + BIT(b))
>> +#define BIT_U32(b) (u32)(BIT_INPUT_CHECK(u32, b) + BIT(b))
>> +#define BIT_U64(b) (u64)(BIT_INPUT_CHECK(u64, b) + BIT(b))
>
>Can you add some vertical spacing here, like between GENMASK and BIT
>blocks?
I think gmail mangled this, because it does show up with more vertical
space on the email I sent:
https://lore.kernel.org/all/clamvpymzwiehjqd6jhuigymyg5ikxewxyeee2eae4tgzmaz7u@6rposizee3t6/
Anyway, I will clean this up and probably add some docs about its usage.
>
>> +
>> #endif /* __LINUX_BITS_H */
>>
>> >
>> > In the worst case, you can just implement the macro you need in the
>> > uapi header, and make it working that way.
>> >
>> > Can you confirm that my proposal increases the kernel size? If so, is
>> > there any way to fix it? If it doesn't, I'd prefer to use the
>> > __GENMASK() approach.
>>
>> I agree on continuing with your approach. The bloat-o-meter indeed
>> showed almost no difference. `size ....i915.o` on the other hand
>> increased, but then decreased when I replaced our current REG_GENMASK()
>> implementation to reuse the new GENMASK_U*()
>>
>> $ # test-genmask.00: before any change
>> $ # test-genmask.01: after your patch to GENMASK
>> $ # test-genmask.01: after converting drivers/gpu/drm/i915/i915_reg_defs.h
>> to use the new macros
>> $ size build64/drivers/gpu/drm/i915/i915.o-test-genmask.*
>> text data bss dec hex filename
>> 4506628 215083 7168 4728879 48282f build64/drivers/gpu/drm/i915/i915.o-test-genmask.00
>> 4511084 215083 7168 4733335 483997 build64/drivers/gpu/drm/i915/i915.o-test-genmask.01
>> 4493292 215083 7168 4715543 47f417 build64/drivers/gpu/drm/i915/i915.o-test-genmask.02
>>
>> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[01]
>> add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-5 (-1)
>> Function old new delta
>> intel_drrs_activate 399 402 +3
>> intel_psr_invalidate 546 547 +1
>> intel_psr_flush 880 875 -5
>> Total: Before=2980530, After=2980529, chg -0.00%
>>
>> $ ./scripts/bloat-o-meter build64/drivers/gpu/drm/i915/i915.o-test-genmask.0[12]
>> add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0 (0)
>> Function old new delta
>> Total
>
>OK then. With the above approach, fixed-type BIT() macros look like wrappers
>around the plain BIT(), and I think, we can live with that.
>
>Can you send all the material as a proper series, including my
>GENMASK patch, your patch above and a patch that switches your driver
>to using the new API? I'll take it then in bitmap-for-next when the
>merge window will get closed.
sure, thanks
Lucas De Marchi
>
>Thanks,
>Yury
^ permalink raw reply [flat|nested] 114+ messages in thread
end of thread, other threads:[~2024-01-19 15:07 UTC | newest]
Thread overview: 114+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-09 5:14 [PATCH 0/3] Fixed-width mask/bit helpers Lucas De Marchi
2023-05-09 5:14 ` [Intel-xe] " Lucas De Marchi
2023-05-09 5:14 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 5:14 ` Lucas De Marchi
2023-05-09 5:14 ` [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32,16,8} Lucas De Marchi
2023-05-09 5:14 ` [Intel-xe] [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32, 16, 8} Lucas De Marchi
2023-05-09 5:14 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 5:14 ` [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32,16,8} Lucas De Marchi
2023-05-09 5:14 ` [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros Lucas De Marchi
2023-05-09 5:14 ` [Intel-xe] " Lucas De Marchi
2023-05-09 5:14 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 5:14 ` Lucas De Marchi
2023-05-09 14:00 ` [Intel-xe] " Gustavo Sousa
2023-05-09 14:00 ` [Intel-gfx] " Gustavo Sousa
2023-05-09 14:00 ` Gustavo Sousa
2023-05-09 21:34 ` Lucas De Marchi
2023-05-09 21:34 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 21:34 ` Lucas De Marchi
2023-05-10 12:18 ` kernel test robot
2023-05-10 12:18 ` [Intel-xe] " kernel test robot
2023-05-10 12:18 ` [Intel-gfx] " kernel test robot
2023-05-10 12:18 ` kernel test robot
2023-05-12 11:14 ` Andy Shevchenko
2023-05-12 11:14 ` [Intel-xe] " Andy Shevchenko
2023-05-12 11:14 ` [Intel-gfx] " Andy Shevchenko
2023-05-12 11:14 ` Andy Shevchenko
2023-05-12 11:25 ` [Intel-xe] " Jani Nikula
2023-05-12 11:25 ` [Intel-gfx] " Jani Nikula
2023-05-12 11:25 ` Jani Nikula
2023-05-12 11:25 ` Jani Nikula
2023-05-12 11:32 ` Andy Shevchenko
2023-05-12 11:32 ` [Intel-xe] " Andy Shevchenko
2023-05-12 11:32 ` [Intel-gfx] " Andy Shevchenko
2023-05-12 11:32 ` Andy Shevchenko
2023-05-12 11:45 ` Jani Nikula
2023-05-12 11:45 ` [Intel-xe] " Jani Nikula
2023-05-12 11:45 ` [Intel-gfx] " Jani Nikula
2023-05-12 11:45 ` Jani Nikula
2023-06-15 15:53 ` Andy Shevchenko
2023-06-15 15:53 ` [Intel-xe] " Andy Shevchenko
2023-06-15 15:53 ` [Intel-gfx] " Andy Shevchenko
2023-06-15 15:53 ` Andy Shevchenko
2023-06-20 14:47 ` Jani Nikula
2023-06-20 14:47 ` [Intel-xe] " Jani Nikula
2023-06-20 14:47 ` [Intel-gfx] " Jani Nikula
2023-06-20 14:47 ` Jani Nikula
2023-06-20 14:55 ` Andy Shevchenko
2023-06-20 14:55 ` [Intel-xe] " Andy Shevchenko
2023-06-20 14:55 ` [Intel-gfx] " Andy Shevchenko
2023-06-20 14:55 ` Andy Shevchenko
2023-06-20 17:25 ` [Intel-xe] " Lucas De Marchi
2023-06-20 17:25 ` [Intel-gfx] " Lucas De Marchi
2023-06-20 17:25 ` Lucas De Marchi
2023-06-20 17:41 ` Andy Shevchenko
2023-06-20 17:41 ` [Intel-gfx] " Andy Shevchenko
2023-06-20 17:41 ` Andy Shevchenko
2023-06-20 18:02 ` Lucas De Marchi
2023-06-20 18:02 ` Lucas De Marchi
2023-06-20 18:02 ` [Intel-gfx] " Lucas De Marchi
2023-06-20 18:19 ` Jani Nikula
2023-06-20 18:19 ` [Intel-gfx] " Jani Nikula
2023-06-20 18:19 ` Jani Nikula
2023-05-12 16:29 ` Lucas De Marchi
2023-05-12 16:29 ` [Intel-xe] " Lucas De Marchi
2023-05-12 16:29 ` [Intel-gfx] " Lucas De Marchi
2023-05-12 16:29 ` Lucas De Marchi
2023-06-15 15:58 ` Andy Shevchenko
2023-06-15 15:58 ` [Intel-xe] " Andy Shevchenko
2023-06-15 15:58 ` [Intel-gfx] " Andy Shevchenko
2023-06-15 15:58 ` Andy Shevchenko
2023-06-22 2:20 ` Yury Norov
2023-06-22 2:20 ` [Intel-gfx] " Yury Norov
2023-06-22 2:20 ` [Intel-xe] " Yury Norov
2023-06-22 2:20 ` Yury Norov
2023-06-22 6:15 ` Lucas De Marchi
2023-06-22 6:15 ` [Intel-xe] " Lucas De Marchi
2023-06-22 6:15 ` [Intel-gfx] " Lucas De Marchi
2023-06-22 6:15 ` Lucas De Marchi
2023-06-22 14:59 ` Yury Norov
2023-06-22 14:59 ` [Intel-gfx] " Yury Norov
2023-06-22 14:59 ` [Intel-xe] " Yury Norov
2023-06-22 14:59 ` Yury Norov
2024-01-18 20:42 ` Re: [Intel-xe] " Lucas De Marchi
2024-01-18 20:42 ` Lucas De Marchi
2024-01-18 21:48 ` Yury Norov
2024-01-18 21:48 ` Yury Norov
2024-01-18 23:25 ` Lucas De Marchi
2024-01-18 23:25 ` Lucas De Marchi
2024-01-19 2:01 ` Yury Norov
2024-01-19 2:01 ` Yury Norov
2024-01-19 15:07 ` Lucas De Marchi
2024-01-19 15:07 ` Lucas De Marchi
2023-05-09 5:14 ` [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros Lucas De Marchi
2023-05-09 5:14 ` [Intel-xe] " Lucas De Marchi
2023-05-09 5:14 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 5:14 ` Lucas De Marchi
2023-05-09 7:57 ` Jani Nikula
2023-05-09 7:57 ` Jani Nikula
2023-05-09 7:57 ` [Intel-xe] " Jani Nikula
2023-05-09 7:57 ` [Intel-gfx] " Jani Nikula
2023-05-09 8:15 ` Lucas De Marchi
2023-05-09 8:15 ` [Intel-xe] " Lucas De Marchi
2023-05-09 8:15 ` [Intel-gfx] " Lucas De Marchi
2023-05-09 8:15 ` Lucas De Marchi
2023-05-09 5:17 ` [Intel-xe] ✓ CI.Patch_applied: success for Fixed-width mask/bit helpers Patchwork
2023-05-09 5:43 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2023-05-09 5:43 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-05-09 6:00 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2023-05-09 15:56 ` [Intel-xe] ✓ CI.Patch_applied: success for Fixed-width mask/bit helpers (rev2) Patchwork
2023-05-09 15:58 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-05-09 16:01 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-05-09 16:27 ` [Intel-xe] ○ CI.BAT: info " Patchwork
2023-06-22 3:53 ` [Intel-xe] ✗ CI.Patch_applied: failure for Fixed-width mask/bit helpers (rev3) Patchwork
2023-06-27 20:01 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Fixed-width mask/bit helpers (rev2) Patchwork
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.