* [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe
@ 2023-11-20 10:08 Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 1/3] drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c Jouni Högander
` (5 more replies)
0 siblings, 6 replies; 15+ messages in thread
From: Jouni Högander @ 2023-11-20 10:08 UTC (permalink / raw)
To: intel-gfx; +Cc: Jani Nikula, Rodrigo Vivi
Intel fb creation is differing between Xe and i915 due to different
implementations of backing object. This patch set is splitting i915
specific code into it's own source file. Similar source files will be
introduced for Xe as well.
Also use intel_bo_to_drm_bo instead of directly referring
i915_gem_object->base. One i915_gem_object_put is changed to
drm_gem_object_put.
v4: Move drm_any_plane_has_format check into intel_fb_bo.c
v3: Fix failure handling in intel_framebuffer_init
v2: Couple of fixes to error value handling
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Uma Shankar <uma.shankar@intel.com>
Jouni Högander (3):
drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c
drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
drm/i915/display: Split i915 specific code away from intel_fb.c
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/display/intel_fb.c | 128 ++++++---------------
drivers/gpu/drm/i915/display/intel_fb.h | 2 +
drivers/gpu/drm/i915/display/intel_fb_bo.c | 102 ++++++++++++++++
drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 ++++
5 files changed, 162 insertions(+), 95 deletions(-)
create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
--
2.34.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] [PATCH v4 1/3] drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
@ 2023-11-20 10:08 ` Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static Jouni Högander
` (4 subsequent siblings)
5 siblings, 0 replies; 15+ messages in thread
From: Jouni Högander @ 2023-11-20 10:08 UTC (permalink / raw)
To: intel-gfx
We are preparing for Xe driver. I915 and Xe object implementation are
differing. Do not use i915_gem_object->base directly. Instead use
intel_bo_to_drm_bo.
Also use drm_gem_object_put instead of i915_gem_object_put. This should be
ok as i915_gem_object_put is really just doing __drm_gem_object_put.
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/display/intel_fb.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index c1777ea35761..7c2df6c1f377 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -1657,10 +1657,10 @@ int intel_fill_fb_info(struct drm_i915_private *i915, struct intel_framebuffer *
max_size = max(max_size, offset + size);
}
- if (mul_u32_u32(max_size, tile_size) > obj->base.size) {
+ if (mul_u32_u32(max_size, tile_size) > intel_bo_to_drm_bo(obj)->size) {
drm_dbg_kms(&i915->drm,
"fb too big for bo (need %llu bytes, have %zu bytes)\n",
- mul_u32_u32(max_size, tile_size), obj->base.size);
+ mul_u32_u32(max_size, tile_size), intel_bo_to_drm_bo(obj)->size);
return -EINVAL;
}
@@ -1889,7 +1889,7 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
unsigned int *handle)
{
struct drm_i915_gem_object *obj = intel_fb_obj(fb);
- struct drm_i915_private *i915 = to_i915(obj->base.dev);
+ struct drm_i915_private *i915 = to_i915(intel_bo_to_drm_bo(obj)->dev);
if (i915_gem_object_is_userptr(obj)) {
drm_dbg(&i915->drm,
@@ -1897,7 +1897,7 @@ static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
return -EINVAL;
}
- return drm_gem_handle_create(file, &obj->base, handle);
+ return drm_gem_handle_create(file, intel_bo_to_drm_bo(obj), handle);
}
struct frontbuffer_fence_cb {
@@ -1975,7 +1975,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
struct drm_i915_gem_object *obj,
struct drm_mode_fb_cmd2 *mode_cmd)
{
- struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
+ struct drm_i915_private *dev_priv = to_i915(intel_bo_to_drm_bo(obj)->dev);
struct drm_framebuffer *fb = &intel_fb->base;
u32 max_stride;
unsigned int tiling, stride;
@@ -2153,7 +2153,7 @@ intel_user_framebuffer_create(struct drm_device *dev,
}
fb = intel_framebuffer_create(obj, &mode_cmd);
- i915_gem_object_put(obj);
+ drm_gem_object_put(intel_bo_to_drm_bo(obj));
return fb;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 1/3] drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c Jouni Högander
@ 2023-11-20 10:08 ` Jouni Högander
2023-11-20 14:19 ` Ville Syrjälä
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c Jouni Högander
` (3 subsequent siblings)
5 siblings, 1 reply; 15+ messages in thread
From: Jouni Högander @ 2023-11-20 10:08 UTC (permalink / raw)
To: intel-gfx
We are about to split i915 specific code from intel_fb.c. Convert
intel_fb_modifier_to_tiling as non-static to allow calling it from split
code.
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/display/intel_fb.c | 40 ++++++++++++-------------
drivers/gpu/drm/i915/display/intel_fb.h | 2 ++
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 7c2df6c1f377..a235ec0f192d 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -301,6 +301,26 @@ lookup_format_info(const struct drm_format_info formats[],
return NULL;
}
+unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
+{
+ u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
+ INTEL_PLANE_CAP_TILING_MASK;
+
+ switch (tiling_caps) {
+ case INTEL_PLANE_CAP_TILING_Y:
+ return I915_TILING_Y;
+ case INTEL_PLANE_CAP_TILING_X:
+ return I915_TILING_X;
+ case INTEL_PLANE_CAP_TILING_4:
+ case INTEL_PLANE_CAP_TILING_Yf:
+ case INTEL_PLANE_CAP_TILING_NONE:
+ return I915_TILING_NONE;
+ default:
+ MISSING_CASE(tiling_caps);
+ return I915_TILING_NONE;
+ }
+}
+
/**
* intel_fb_get_format_info: Get a modifier specific format information
* @cmd: FB add command structure
@@ -737,26 +757,6 @@ intel_fb_align_height(const struct drm_framebuffer *fb,
return ALIGN(height, tile_height);
}
-static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
-{
- u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
- INTEL_PLANE_CAP_TILING_MASK;
-
- switch (tiling_caps) {
- case INTEL_PLANE_CAP_TILING_Y:
- return I915_TILING_Y;
- case INTEL_PLANE_CAP_TILING_X:
- return I915_TILING_X;
- case INTEL_PLANE_CAP_TILING_4:
- case INTEL_PLANE_CAP_TILING_Yf:
- case INTEL_PLANE_CAP_TILING_NONE:
- return I915_TILING_NONE;
- default:
- MISSING_CASE(tiling_caps);
- return I915_TILING_NONE;
- }
-}
-
bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64 modifier)
{
return HAS_DPT(i915) && modifier != DRM_FORMAT_MOD_LINEAR;
diff --git a/drivers/gpu/drm/i915/display/intel_fb.h b/drivers/gpu/drm/i915/display/intel_fb.h
index e85167d6bc34..23db6628f53e 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.h
+++ b/drivers/gpu/drm/i915/display/intel_fb.h
@@ -95,4 +95,6 @@ intel_user_framebuffer_create(struct drm_device *dev,
bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64 modifier);
bool intel_fb_uses_dpt(const struct drm_framebuffer *fb);
+unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier);
+
#endif /* __INTEL_FB_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 1/3] drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static Jouni Högander
@ 2023-11-20 10:08 ` Jouni Högander
2023-11-20 14:23 ` Ville Syrjälä
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Prepare intel_fb for Xe (rev4) Patchwork
` (2 subsequent siblings)
5 siblings, 1 reply; 15+ messages in thread
From: Jouni Högander @ 2023-11-20 10:08 UTC (permalink / raw)
To: intel-gfx
We are preparing for Xe driver. Backing object implementation is differing
between i915 and Xe. Split i915 specific code into separate source file
built only for i915.
v4: Move drm_any_plane_has_format check into intel_fb_bo.c
v3: Fix failure handling in intel_framebuffer_init
v2: Couple of fixes to error value handling
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-------------
drivers/gpu/drm/i915/display/intel_fb_bo.c | 102 +++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
4 files changed, 134 insertions(+), 69 deletions(-)
create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 7e5d6a39d450..c14ba1212b84 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -279,6 +279,7 @@ i915-y += \
display/intel_dsb.o \
display/intel_dsb_buffer.o \
display/intel_fb.o \
+ display/intel_fb_bo.o \
display/intel_fb_pin.o \
display/intel_fbc.o \
display/intel_fdi.o \
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index a235ec0f192d..78bdb5dc1262 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -4,7 +4,6 @@
*/
#include <drm/drm_blend.h>
-#include <drm/drm_framebuffer.h>
#include <drm/drm_modeset_helper.h>
#include <linux/dma-fence.h>
@@ -15,6 +14,7 @@
#include "intel_display_types.h"
#include "intel_dpt.h"
#include "intel_fb.h"
+#include "intel_fb_bo.h"
#include "intel_frontbuffer.h"
#define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)->drm, (i) >= ARRAY_SIZE(a))
@@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
struct drm_i915_private *dev_priv = to_i915(intel_bo_to_drm_bo(obj)->dev);
struct drm_framebuffer *fb = &intel_fb->base;
u32 max_stride;
- unsigned int tiling, stride;
int ret = -EINVAL;
int i;
@@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
if (!intel_fb->frontbuffer)
return -ENOMEM;
- i915_gem_object_lock(obj, NULL);
- tiling = i915_gem_object_get_tiling(obj);
- stride = i915_gem_object_get_stride(obj);
- i915_gem_object_unlock(obj);
-
- if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
- /*
- * If there's a fence, enforce that
- * the fb modifier and tiling mode match.
- */
- if (tiling != I915_TILING_NONE &&
- tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
- drm_dbg_kms(&dev_priv->drm,
- "tiling_mode doesn't match fb modifier\n");
- goto err;
- }
- } else {
- if (tiling == I915_TILING_X) {
- mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
- } else if (tiling == I915_TILING_Y) {
- drm_dbg_kms(&dev_priv->drm,
- "No Y tiling for legacy addfb\n");
- goto err;
- }
- }
-
- if (!drm_any_plane_has_format(&dev_priv->drm,
- mode_cmd->pixel_format,
- mode_cmd->modifier[0])) {
- drm_dbg_kms(&dev_priv->drm,
- "unsupported pixel format %p4cc / modifier 0x%llx\n",
- &mode_cmd->pixel_format, mode_cmd->modifier[0]);
- goto err;
- }
-
- /*
- * gen2/3 display engine uses the fence if present,
- * so the tiling mode must match the fb modifier exactly.
- */
- if (DISPLAY_VER(dev_priv) < 4 &&
- tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
- drm_dbg_kms(&dev_priv->drm,
- "tiling_mode must match fb modifier exactly on gen2/3\n");
+ ret = intel_fb_bo_framebuffer_init(intel_fb, obj, mode_cmd);
+ if (ret)
goto err;
- }
+ ret = -EINVAL;
max_stride = intel_fb_max_stride(dev_priv, mode_cmd->pixel_format,
mode_cmd->modifier[0]);
if (mode_cmd->pitches[0] > max_stride) {
@@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
goto err;
}
- /*
- * If there's a fence, enforce that
- * the fb pitch and fence stride match.
- */
- if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
- drm_dbg_kms(&dev_priv->drm,
- "pitch (%d) must match tiling stride (%d)\n",
- mode_cmd->pitches[0], stride);
- goto err;
- }
-
/* FIXME need to adjust LINOFF/TILEOFF accordingly. */
if (mode_cmd->offsets[0] != 0) {
drm_dbg_kms(&dev_priv->drm,
@@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct drm_device *dev,
struct drm_framebuffer *fb;
struct drm_i915_gem_object *obj;
struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
- struct drm_i915_private *i915;
+ struct drm_i915_private *i915 = to_i915(dev);
- obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
- if (!obj)
+ obj = intel_fb_bo_lookup_valid_bo(i915, filp, user_mode_cmd);
+ if (IS_ERR(obj))
return ERR_PTR(-ENOENT);
- /* object is backed with LMEM for discrete */
- i915 = to_i915(obj->base.dev);
- if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
- /* object is "remote", not in local memory */
- i915_gem_object_put(obj);
- drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
- return ERR_PTR(-EREMOTE);
- }
-
fb = intel_framebuffer_create(obj, &mode_cmd);
drm_gem_object_put(intel_bo_to_drm_bo(obj));
diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c b/drivers/gpu/drm/i915/display/intel_fb_bo.c
new file mode 100644
index 000000000000..9b2bf3d8345e
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#include <drm/drm_framebuffer.h>
+#include <drm/drm_plane.h>
+
+#include "gem/i915_gem_object.h"
+
+#include "i915_drv.h"
+#include "intel_fb.h"
+#include "intel_fb_bo.h"
+
+int intel_fb_bo_framebuffer_init(struct intel_framebuffer *intel_fb,
+ struct drm_i915_gem_object *obj,
+ struct drm_mode_fb_cmd2 *mode_cmd)
+{
+ struct drm_i915_private *i915 = to_i915(obj->base.dev);
+ unsigned int tiling, stride;
+
+ i915_gem_object_lock(obj, NULL);
+ tiling = i915_gem_object_get_tiling(obj);
+ stride = i915_gem_object_get_stride(obj);
+ i915_gem_object_unlock(obj);
+
+ if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
+ /*
+ * If there's a fence, enforce that
+ * the fb modifier and tiling mode match.
+ */
+ if (tiling != I915_TILING_NONE &&
+ tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
+ drm_dbg_kms(&i915->drm,
+ "tiling_mode doesn't match fb modifier\n");
+ return -EINVAL;
+ }
+ } else {
+ if (tiling == I915_TILING_X) {
+ mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
+ } else if (tiling == I915_TILING_Y) {
+ drm_dbg_kms(&i915->drm,
+ "No Y tiling for legacy addfb\n");
+ return -EINVAL;
+ }
+ }
+
+ if (!drm_any_plane_has_format(&i915->drm,
+ mode_cmd->pixel_format,
+ mode_cmd->modifier[0])) {
+ drm_dbg_kms(&i915->drm,
+ "unsupported pixel format %p4cc / modifier 0x%llx\n",
+ &mode_cmd->pixel_format, mode_cmd->modifier[0]);
+ return -EINVAL;
+ }
+
+ /*
+ * gen2/3 display engine uses the fence if present,
+ * so the tiling mode must match the fb modifier exactly.
+ */
+ if (DISPLAY_VER(i915) < 4 &&
+ tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
+ drm_dbg_kms(&i915->drm,
+ "tiling_mode must match fb modifier exactly on gen2/3\n");
+ return -EINVAL;
+ }
+
+ /*
+ * If there's a fence, enforce that
+ * the fb pitch and fence stride match.
+ */
+ if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
+ drm_dbg_kms(&i915->drm,
+ "pitch (%d) must match tiling stride (%d)\n",
+ mode_cmd->pitches[0], stride);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+struct drm_i915_gem_object *
+intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
+ struct drm_file *filp,
+ const struct drm_mode_fb_cmd2 *user_mode_cmd)
+{
+ struct drm_i915_gem_object *obj = i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
+
+ if (!obj)
+ return ERR_PTR(-ENOENT);
+
+ /* object is backed with LMEM for discrete */
+ i915 = to_i915(obj->base.dev);
+ if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
+ /* object is "remote", not in local memory */
+ i915_gem_object_put(obj);
+ drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
+ return ERR_PTR(-EREMOTE);
+ }
+
+ return obj;
+}
diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h b/drivers/gpu/drm/i915/display/intel_fb_bo.h
new file mode 100644
index 000000000000..dd06ceec8601
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2021 Intel Corporation
+ */
+
+#ifndef __INTEL_FB_BO_H__
+#define __INTEL_FB_BO_H__
+
+struct drm_file;
+struct drm_mode_fb_cmd2;
+struct drm_i915_gem_object;
+struct drm_i915_private;
+struct intel_framebuffer;
+
+int intel_fb_bo_framebuffer_init(struct intel_framebuffer *intel_fb,
+ struct drm_i915_gem_object *obj,
+ struct drm_mode_fb_cmd2 *mode_cmd);
+
+struct drm_i915_gem_object *
+intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
+ struct drm_file *filp,
+ const struct drm_mode_fb_cmd2 *user_mode_cmd);
+
+#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static Jouni Högander
@ 2023-11-20 14:19 ` Ville Syrjälä
2023-11-21 7:35 ` Hogander, Jouni
0 siblings, 1 reply; 15+ messages in thread
From: Ville Syrjälä @ 2023-11-20 14:19 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
On Mon, Nov 20, 2023 at 12:08:32PM +0200, Jouni Högander wrote:
> We are about to split i915 specific code from intel_fb.c. Convert
> intel_fb_modifier_to_tiling as non-static to allow calling it from split
> code.
We should only need this in the i915 path.
>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_fb.c | 40 ++++++++++++-------------
> drivers/gpu/drm/i915/display/intel_fb.h | 2 ++
> 2 files changed, 22 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
> index 7c2df6c1f377..a235ec0f192d 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb.c
> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> @@ -301,6 +301,26 @@ lookup_format_info(const struct drm_format_info formats[],
> return NULL;
> }
>
> +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> +{
> + u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> + INTEL_PLANE_CAP_TILING_MASK;
> +
> + switch (tiling_caps) {
> + case INTEL_PLANE_CAP_TILING_Y:
> + return I915_TILING_Y;
> + case INTEL_PLANE_CAP_TILING_X:
> + return I915_TILING_X;
> + case INTEL_PLANE_CAP_TILING_4:
> + case INTEL_PLANE_CAP_TILING_Yf:
> + case INTEL_PLANE_CAP_TILING_NONE:
> + return I915_TILING_NONE;
> + default:
> + MISSING_CASE(tiling_caps);
> + return I915_TILING_NONE;
> + }
> +}
> +
> /**
> * intel_fb_get_format_info: Get a modifier specific format information
> * @cmd: FB add command structure
> @@ -737,26 +757,6 @@ intel_fb_align_height(const struct drm_framebuffer *fb,
> return ALIGN(height, tile_height);
> }
>
> -static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> -{
> - u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> - INTEL_PLANE_CAP_TILING_MASK;
> -
> - switch (tiling_caps) {
> - case INTEL_PLANE_CAP_TILING_Y:
> - return I915_TILING_Y;
> - case INTEL_PLANE_CAP_TILING_X:
> - return I915_TILING_X;
> - case INTEL_PLANE_CAP_TILING_4:
> - case INTEL_PLANE_CAP_TILING_Yf:
> - case INTEL_PLANE_CAP_TILING_NONE:
> - return I915_TILING_NONE;
> - default:
> - MISSING_CASE(tiling_caps);
> - return I915_TILING_NONE;
> - }
> -}
> -
> bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64 modifier)
> {
> return HAS_DPT(i915) && modifier != DRM_FORMAT_MOD_LINEAR;
> diff --git a/drivers/gpu/drm/i915/display/intel_fb.h b/drivers/gpu/drm/i915/display/intel_fb.h
> index e85167d6bc34..23db6628f53e 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb.h
> +++ b/drivers/gpu/drm/i915/display/intel_fb.h
> @@ -95,4 +95,6 @@ intel_user_framebuffer_create(struct drm_device *dev,
> bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64 modifier);
> bool intel_fb_uses_dpt(const struct drm_framebuffer *fb);
>
> +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier);
> +
> #endif /* __INTEL_FB_H__ */
> --
> 2.34.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c Jouni Högander
@ 2023-11-20 14:23 ` Ville Syrjälä
2023-11-21 7:40 ` Hogander, Jouni
0 siblings, 1 reply; 15+ messages in thread
From: Ville Syrjälä @ 2023-11-20 14:23 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
On Mon, Nov 20, 2023 at 12:08:33PM +0200, Jouni Högander wrote:
> We are preparing for Xe driver. Backing object implementation is differing
> between i915 and Xe. Split i915 specific code into separate source file
> built only for i915.
>
> v4: Move drm_any_plane_has_format check into intel_fb_bo.c
> v3: Fix failure handling in intel_framebuffer_init
> v2: Couple of fixes to error value handling
>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
> drivers/gpu/drm/i915/Makefile | 1 +
> drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-------------
> drivers/gpu/drm/i915/display/intel_fb_bo.c | 102 +++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
> 4 files changed, 134 insertions(+), 69 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 7e5d6a39d450..c14ba1212b84 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -279,6 +279,7 @@ i915-y += \
> display/intel_dsb.o \
> display/intel_dsb_buffer.o \
> display/intel_fb.o \
> + display/intel_fb_bo.o \
> display/intel_fb_pin.o \
> display/intel_fbc.o \
> display/intel_fdi.o \
> diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
> index a235ec0f192d..78bdb5dc1262 100644
> --- a/drivers/gpu/drm/i915/display/intel_fb.c
> +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> @@ -4,7 +4,6 @@
> */
>
> #include <drm/drm_blend.h>
> -#include <drm/drm_framebuffer.h>
> #include <drm/drm_modeset_helper.h>
>
> #include <linux/dma-fence.h>
> @@ -15,6 +14,7 @@
> #include "intel_display_types.h"
> #include "intel_dpt.h"
> #include "intel_fb.h"
> +#include "intel_fb_bo.h"
> #include "intel_frontbuffer.h"
>
> #define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)->drm, (i) >= ARRAY_SIZE(a))
> @@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
> struct drm_i915_private *dev_priv = to_i915(intel_bo_to_drm_bo(obj)->dev);
> struct drm_framebuffer *fb = &intel_fb->base;
> u32 max_stride;
> - unsigned int tiling, stride;
> int ret = -EINVAL;
> int i;
>
> @@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
> if (!intel_fb->frontbuffer)
> return -ENOMEM;
>
> - i915_gem_object_lock(obj, NULL);
> - tiling = i915_gem_object_get_tiling(obj);
> - stride = i915_gem_object_get_stride(obj);
> - i915_gem_object_unlock(obj);
> -
> - if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> - /*
> - * If there's a fence, enforce that
> - * the fb modifier and tiling mode match.
> - */
> - if (tiling != I915_TILING_NONE &&
> - tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> - drm_dbg_kms(&dev_priv->drm,
> - "tiling_mode doesn't match fb modifier\n");
> - goto err;
> - }
> - } else {
> - if (tiling == I915_TILING_X) {
> - mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
> - } else if (tiling == I915_TILING_Y) {
> - drm_dbg_kms(&dev_priv->drm,
> - "No Y tiling for legacy addfb\n");
> - goto err;
> - }
> - }
> -
> - if (!drm_any_plane_has_format(&dev_priv->drm,
> - mode_cmd->pixel_format,
> - mode_cmd->modifier[0])) {
> - drm_dbg_kms(&dev_priv->drm,
> - "unsupported pixel format %p4cc / modifier 0x%llx\n",
> - &mode_cmd->pixel_format, mode_cmd->modifier[0]);
> - goto err;
> - }
The drm_any_plane_has_format() check should stay in the common code.
> -
> - /*
> - * gen2/3 display engine uses the fence if present,
> - * so the tiling mode must match the fb modifier exactly.
> - */
> - if (DISPLAY_VER(dev_priv) < 4 &&
> - tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> - drm_dbg_kms(&dev_priv->drm,
> - "tiling_mode must match fb modifier exactly on gen2/3\n");
> + ret = intel_fb_bo_framebuffer_init(intel_fb, obj, mode_cmd);
> + if (ret)
> goto err;
> - }
>
> + ret = -EINVAL;
> max_stride = intel_fb_max_stride(dev_priv, mode_cmd->pixel_format,
> mode_cmd->modifier[0]);
> if (mode_cmd->pitches[0] > max_stride) {
> @@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
> goto err;
> }
>
> - /*
> - * If there's a fence, enforce that
> - * the fb pitch and fence stride match.
> - */
> - if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> - drm_dbg_kms(&dev_priv->drm,
> - "pitch (%d) must match tiling stride (%d)\n",
> - mode_cmd->pitches[0], stride);
> - goto err;
> - }
> -
> /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
> if (mode_cmd->offsets[0] != 0) {
> drm_dbg_kms(&dev_priv->drm,
> @@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct drm_device *dev,
> struct drm_framebuffer *fb;
> struct drm_i915_gem_object *obj;
> struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> - struct drm_i915_private *i915;
> + struct drm_i915_private *i915 = to_i915(dev);
>
> - obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
> - if (!obj)
> + obj = intel_fb_bo_lookup_valid_bo(i915, filp, user_mode_cmd);
Is there a specific reason you're passing the original mode_cmd here?
> + if (IS_ERR(obj))
> return ERR_PTR(-ENOENT);
>
> - /* object is backed with LMEM for discrete */
> - i915 = to_i915(obj->base.dev);
> - if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
> - /* object is "remote", not in local memory */
> - i915_gem_object_put(obj);
> - drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
> - return ERR_PTR(-EREMOTE);
> - }
> -
> fb = intel_framebuffer_create(obj, &mode_cmd);
> drm_gem_object_put(intel_bo_to_drm_bo(obj));
>
> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> new file mode 100644
> index 000000000000..9b2bf3d8345e
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> @@ -0,0 +1,102 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2021 Intel Corporation
> + */
> +
> +#include <drm/drm_framebuffer.h>
> +#include <drm/drm_plane.h>
> +
> +#include "gem/i915_gem_object.h"
> +
> +#include "i915_drv.h"
> +#include "intel_fb.h"
> +#include "intel_fb_bo.h"
> +
> +int intel_fb_bo_framebuffer_init(struct intel_framebuffer *intel_fb,
> + struct drm_i915_gem_object *obj,
> + struct drm_mode_fb_cmd2 *mode_cmd)
> +{
> + struct drm_i915_private *i915 = to_i915(obj->base.dev);
> + unsigned int tiling, stride;
> +
> + i915_gem_object_lock(obj, NULL);
> + tiling = i915_gem_object_get_tiling(obj);
> + stride = i915_gem_object_get_stride(obj);
> + i915_gem_object_unlock(obj);
> +
> + if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> + /*
> + * If there's a fence, enforce that
> + * the fb modifier and tiling mode match.
> + */
> + if (tiling != I915_TILING_NONE &&
> + tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> + drm_dbg_kms(&i915->drm,
> + "tiling_mode doesn't match fb modifier\n");
> + return -EINVAL;
> + }
> + } else {
> + if (tiling == I915_TILING_X) {
> + mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
> + } else if (tiling == I915_TILING_Y) {
> + drm_dbg_kms(&i915->drm,
> + "No Y tiling for legacy addfb\n");
> + return -EINVAL;
> + }
> + }
> +
> + if (!drm_any_plane_has_format(&i915->drm,
> + mode_cmd->pixel_format,
> + mode_cmd->modifier[0])) {
> + drm_dbg_kms(&i915->drm,
> + "unsupported pixel format %p4cc / modifier 0x%llx\n",
> + &mode_cmd->pixel_format, mode_cmd->modifier[0]);
> + return -EINVAL;
> + }
> +
> + /*
> + * gen2/3 display engine uses the fence if present,
> + * so the tiling mode must match the fb modifier exactly.
> + */
> + if (DISPLAY_VER(i915) < 4 &&
> + tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
> + drm_dbg_kms(&i915->drm,
> + "tiling_mode must match fb modifier exactly on gen2/3\n");
> + return -EINVAL;
> + }
> +
> + /*
> + * If there's a fence, enforce that
> + * the fb pitch and fence stride match.
> + */
> + if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
> + drm_dbg_kms(&i915->drm,
> + "pitch (%d) must match tiling stride (%d)\n",
> + mode_cmd->pitches[0], stride);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +struct drm_i915_gem_object *
> +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> + struct drm_file *filp,
> + const struct drm_mode_fb_cmd2 *user_mode_cmd)
> +{
> + struct drm_i915_gem_object *obj = i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
> +
> + if (!obj)
> + return ERR_PTR(-ENOENT);
> +
> + /* object is backed with LMEM for discrete */
> + i915 = to_i915(obj->base.dev);
> + if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj, INTEL_REGION_LMEM_0)) {
> + /* object is "remote", not in local memory */
> + i915_gem_object_put(obj);
> + drm_dbg_kms(&i915->drm, "framebuffer must reside in local memory\n");
> + return ERR_PTR(-EREMOTE);
> + }
> +
> + return obj;
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> new file mode 100644
> index 000000000000..dd06ceec8601
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> @@ -0,0 +1,24 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2021 Intel Corporation
> + */
> +
> +#ifndef __INTEL_FB_BO_H__
> +#define __INTEL_FB_BO_H__
> +
> +struct drm_file;
> +struct drm_mode_fb_cmd2;
> +struct drm_i915_gem_object;
> +struct drm_i915_private;
> +struct intel_framebuffer;
> +
> +int intel_fb_bo_framebuffer_init(struct intel_framebuffer *intel_fb,
> + struct drm_i915_gem_object *obj,
> + struct drm_mode_fb_cmd2 *mode_cmd);
> +
> +struct drm_i915_gem_object *
> +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> + struct drm_file *filp,
> + const struct drm_mode_fb_cmd2 *user_mode_cmd);
> +
> +#endif
> --
> 2.34.1
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Prepare intel_fb for Xe (rev4)
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
` (2 preceding siblings ...)
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c Jouni Högander
@ 2023-11-20 23:19 ` Patchwork
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-11-20 23:33 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2023-11-20 23:19 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
== Series Details ==
Series: Prepare intel_fb for Xe (rev4)
URL : https://patchwork.freedesktop.org/series/126507/
State : warning
== Summary ==
Error: dim checkpatch failed
d12deb0b9794 drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c
5d9896b24b8b drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
e484b88355ba drm/i915/display: Split i915 specific code away from intel_fb.c
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:160: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#160:
new file mode 100644
-:165: WARNING:SPDX_LICENSE_TAG: Improper SPDX comment style for 'drivers/gpu/drm/i915/display/intel_fb_bo.c', please use '//' instead
#165: FILE: drivers/gpu/drm/i915/display/intel_fb_bo.c:1:
+/* SPDX-License-Identifier: MIT */
-:165: WARNING:SPDX_LICENSE_TAG: Missing or malformed SPDX-License-Identifier tag in line 1
#165: FILE: drivers/gpu/drm/i915/display/intel_fb_bo.c:1:
+/* SPDX-License-Identifier: MIT */
total: 0 errors, 3 warnings, 0 checks, 250 lines checked
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Prepare intel_fb for Xe (rev4)
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
` (3 preceding siblings ...)
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Prepare intel_fb for Xe (rev4) Patchwork
@ 2023-11-20 23:19 ` Patchwork
2023-11-20 23:33 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2023-11-20 23:19 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
== Series Details ==
Series: Prepare intel_fb for Xe (rev4)
URL : https://patchwork.freedesktop.org/series/126507/
State : warning
== Summary ==
Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./drivers/gpu/drm/i915/intel_uncore.h:351:1: warning: trying to copy expression type 31
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/
^ permalink raw reply [flat|nested] 15+ messages in thread
* [Intel-gfx] ✓ Fi.CI.BAT: success for Prepare intel_fb for Xe (rev4)
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
` (4 preceding siblings ...)
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
@ 2023-11-20 23:33 ` Patchwork
5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2023-11-20 23:33 UTC (permalink / raw)
To: Jouni Högander; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 4173 bytes --]
== Series Details ==
Series: Prepare intel_fb for Xe (rev4)
URL : https://patchwork.freedesktop.org/series/126507/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_13900 -> Patchwork_126507v4
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/index.html
Participating hosts (33 -> 32)
------------------------------
Additional (1): fi-kbl-soraka
Missing (2): bat-jsl-1 fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_126507v4 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_huc_copy@huc-copy:
- fi-kbl-soraka: NOTRUN -> [SKIP][1] ([fdo#109271] / [i915#2190])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html
* igt@gem_lmem_swapping@basic:
- fi-kbl-soraka: NOTRUN -> [SKIP][2] ([fdo#109271] / [i915#4613]) +3 other tests skip
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html
* igt@i915_selftest@live@gt_pm:
- fi-kbl-soraka: NOTRUN -> [DMESG-FAIL][3] ([i915#1886])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html
* igt@kms_dsc@dsc-basic:
- fi-kbl-soraka: NOTRUN -> [SKIP][4] ([fdo#109271]) +9 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/fi-kbl-soraka/igt@kms_dsc@dsc-basic.html
#### Possible fixes ####
* igt@i915_selftest@live@gt_heartbeat:
- fi-apl-guc: [DMESG-FAIL][5] ([i915#5334]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13900/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
* igt@i915_selftest@live@gt_mocs:
- bat-mtlp-6: [DMESG-WARN][7] -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13900/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/bat-mtlp-6/igt@i915_selftest@live@gt_mocs.html
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1:
- bat-rplp-1: [ABORT][9] ([i915#8668]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13900/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/bat-rplp-1/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-edp-1.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886
[i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
[i915#7359]: https://gitlab.freedesktop.org/drm/intel/issues/7359
[i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
[i915#8981]: https://gitlab.freedesktop.org/drm/intel/issues/8981
Build changes
-------------
* Linux: CI_DRM_13900 -> Patchwork_126507v4
CI-20190529: 20190529
CI_DRM_13900: 7e7a522c80874faff37a7a66bdaff0747f978e11 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_7595: cfa00d99b1dfa0621ea552d1ed54907798da1a1a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_126507v4: 7e7a522c80874faff37a7a66bdaff0747f978e11 @ git://anongit.freedesktop.org/gfx-ci/linux
### Linux commits
5a5a41145047 drm/i915/display: Split i915 specific code away from intel_fb.c
72aa449be827 drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
e5fa53f1d7b3 drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v4/index.html
[-- Attachment #2: Type: text/html, Size: 4973 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
2023-11-20 14:19 ` Ville Syrjälä
@ 2023-11-21 7:35 ` Hogander, Jouni
2023-11-21 8:39 ` Ville Syrjälä
0 siblings, 1 reply; 15+ messages in thread
From: Hogander, Jouni @ 2023-11-21 7:35 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com; +Cc: intel-gfx@lists.freedesktop.org
On Mon, 2023-11-20 at 16:19 +0200, Ville Syrjälä wrote:
> On Mon, Nov 20, 2023 at 12:08:32PM +0200, Jouni Högander wrote:
> > We are about to split i915 specific code from intel_fb.c. Convert
> > intel_fb_modifier_to_tiling as non-static to allow calling it from
> > split
> > code.
>
> We should only need this in the i915 path.
If I move it into i915 specific source file I need to convert
lookup_modifier as non-static. Would you prefer that or do you have
some other suggestion?
BR,
Jouni Högander
>
> >
> > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_fb.c | 40 ++++++++++++---------
> > ----
> > drivers/gpu/drm/i915/display/intel_fb.h | 2 ++
> > 2 files changed, 22 insertions(+), 20 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > b/drivers/gpu/drm/i915/display/intel_fb.c
> > index 7c2df6c1f377..a235ec0f192d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > @@ -301,6 +301,26 @@ lookup_format_info(const struct
> > drm_format_info formats[],
> > return NULL;
> > }
> >
> > +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> > +{
> > + u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> > + INTEL_PLANE_CAP_TILING_MASK;
> > +
> > + switch (tiling_caps) {
> > + case INTEL_PLANE_CAP_TILING_Y:
> > + return I915_TILING_Y;
> > + case INTEL_PLANE_CAP_TILING_X:
> > + return I915_TILING_X;
> > + case INTEL_PLANE_CAP_TILING_4:
> > + case INTEL_PLANE_CAP_TILING_Yf:
> > + case INTEL_PLANE_CAP_TILING_NONE:
> > + return I915_TILING_NONE;
> > + default:
> > + MISSING_CASE(tiling_caps);
> > + return I915_TILING_NONE;
> > + }
> > +}
> > +
> > /**
> > * intel_fb_get_format_info: Get a modifier specific format
> > information
> > * @cmd: FB add command structure
> > @@ -737,26 +757,6 @@ intel_fb_align_height(const struct
> > drm_framebuffer *fb,
> > return ALIGN(height, tile_height);
> > }
> >
> > -static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> > -{
> > - u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> > - INTEL_PLANE_CAP_TILING_MASK;
> > -
> > - switch (tiling_caps) {
> > - case INTEL_PLANE_CAP_TILING_Y:
> > - return I915_TILING_Y;
> > - case INTEL_PLANE_CAP_TILING_X:
> > - return I915_TILING_X;
> > - case INTEL_PLANE_CAP_TILING_4:
> > - case INTEL_PLANE_CAP_TILING_Yf:
> > - case INTEL_PLANE_CAP_TILING_NONE:
> > - return I915_TILING_NONE;
> > - default:
> > - MISSING_CASE(tiling_caps);
> > - return I915_TILING_NONE;
> > - }
> > -}
> > -
> > bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64
> > modifier)
> > {
> > return HAS_DPT(i915) && modifier != DRM_FORMAT_MOD_LINEAR;
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb.h
> > b/drivers/gpu/drm/i915/display/intel_fb.h
> > index e85167d6bc34..23db6628f53e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fb.h
> > +++ b/drivers/gpu/drm/i915/display/intel_fb.h
> > @@ -95,4 +95,6 @@ intel_user_framebuffer_create(struct drm_device
> > *dev,
> > bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64
> > modifier);
> > bool intel_fb_uses_dpt(const struct drm_framebuffer *fb);
> >
> > +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier);
> > +
> > #endif /* __INTEL_FB_H__ */
> > --
> > 2.34.1
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-20 14:23 ` Ville Syrjälä
@ 2023-11-21 7:40 ` Hogander, Jouni
2023-11-21 8:51 ` Ville Syrjälä
0 siblings, 1 reply; 15+ messages in thread
From: Hogander, Jouni @ 2023-11-21 7:40 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com; +Cc: intel-gfx@lists.freedesktop.org
On Mon, 2023-11-20 at 16:23 +0200, Ville Syrjälä wrote:
> On Mon, Nov 20, 2023 at 12:08:33PM +0200, Jouni Högander wrote:
> > We are preparing for Xe driver. Backing object implementation is
> > differing
> > between i915 and Xe. Split i915 specific code into separate source
> > file
> > built only for i915.
> >
> > v4: Move drm_any_plane_has_format check into intel_fb_bo.c
> > v3: Fix failure handling in intel_framebuffer_init
> > v2: Couple of fixes to error value handling
> >
> > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > ---
> > drivers/gpu/drm/i915/Makefile | 1 +
> > drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-------------
> > drivers/gpu/drm/i915/display/intel_fb_bo.c | 102
> > +++++++++++++++++++++
> > drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
> > 4 files changed, 134 insertions(+), 69 deletions(-)
> > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
> >
> > diff --git a/drivers/gpu/drm/i915/Makefile
> > b/drivers/gpu/drm/i915/Makefile
> > index 7e5d6a39d450..c14ba1212b84 100644
> > --- a/drivers/gpu/drm/i915/Makefile
> > +++ b/drivers/gpu/drm/i915/Makefile
> > @@ -279,6 +279,7 @@ i915-y += \
> > display/intel_dsb.o \
> > display/intel_dsb_buffer.o \
> > display/intel_fb.o \
> > + display/intel_fb_bo.o \
> > display/intel_fb_pin.o \
> > display/intel_fbc.o \
> > display/intel_fdi.o \
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > b/drivers/gpu/drm/i915/display/intel_fb.c
> > index a235ec0f192d..78bdb5dc1262 100644
> > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > @@ -4,7 +4,6 @@
> > */
> >
> > #include <drm/drm_blend.h>
> > -#include <drm/drm_framebuffer.h>
> > #include <drm/drm_modeset_helper.h>
> >
> > #include <linux/dma-fence.h>
> > @@ -15,6 +14,7 @@
> > #include "intel_display_types.h"
> > #include "intel_dpt.h"
> > #include "intel_fb.h"
> > +#include "intel_fb_bo.h"
> > #include "intel_frontbuffer.h"
> >
> > #define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)->drm,
> > (i) >= ARRAY_SIZE(a))
> > @@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct
> > intel_framebuffer *intel_fb,
> > struct drm_i915_private *dev_priv =
> > to_i915(intel_bo_to_drm_bo(obj)->dev);
> > struct drm_framebuffer *fb = &intel_fb->base;
> > u32 max_stride;
> > - unsigned int tiling, stride;
> > int ret = -EINVAL;
> > int i;
> >
> > @@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct
> > intel_framebuffer *intel_fb,
> > if (!intel_fb->frontbuffer)
> > return -ENOMEM;
> >
> > - i915_gem_object_lock(obj, NULL);
> > - tiling = i915_gem_object_get_tiling(obj);
> > - stride = i915_gem_object_get_stride(obj);
> > - i915_gem_object_unlock(obj);
> > -
> > - if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > - /*
> > - * If there's a fence, enforce that
> > - * the fb modifier and tiling mode match.
> > - */
> > - if (tiling != I915_TILING_NONE &&
> > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > >modifier[0])) {
> > - drm_dbg_kms(&dev_priv->drm,
> > - "tiling_mode doesn't match fb
> > modifier\n");
> > - goto err;
> > - }
> > - } else {
> > - if (tiling == I915_TILING_X) {
> > - mode_cmd->modifier[0] =
> > I915_FORMAT_MOD_X_TILED;
> > - } else if (tiling == I915_TILING_Y) {
> > - drm_dbg_kms(&dev_priv->drm,
> > - "No Y tiling for legacy
> > addfb\n");
> > - goto err;
> > - }
> > - }
> > -
> > - if (!drm_any_plane_has_format(&dev_priv->drm,
> > - mode_cmd->pixel_format,
> > - mode_cmd->modifier[0])) {
> > - drm_dbg_kms(&dev_priv->drm,
> > - "unsupported pixel format %p4cc /
> > modifier 0x%llx\n",
> > - &mode_cmd->pixel_format, mode_cmd-
> > >modifier[0]);
> > - goto err;
> > - }
>
> The drm_any_plane_has_format() check should stay in the common code.
I had it that way originally. That was triggering warning here:
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v3/fi-pnv-d510/igt@kms_addfb_basic@addfb25-bad-modifier.html
So I choose to move it before the check below in
drivers/gpu/drm/i915/display/intel_fb_bo.c. Then add same into
drivers/gpu/drm/xe/display/intel_fb_bo.c. Do you have better idea?
>
> > -
> > - /*
> > - * gen2/3 display engine uses the fence if present,
> > - * so the tiling mode must match the fb modifier exactly.
> > - */
> > - if (DISPLAY_VER(dev_priv) < 4 &&
> > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > >modifier[0])) {
> > - drm_dbg_kms(&dev_priv->drm,
> > - "tiling_mode must match fb modifier
> > exactly on gen2/3\n");
> > + ret = intel_fb_bo_framebuffer_init(intel_fb, obj,
> > mode_cmd);
> > + if (ret)
> > goto err;
> > - }
> >
> > + ret = -EINVAL;
> > max_stride = intel_fb_max_stride(dev_priv, mode_cmd-
> > >pixel_format,
> > mode_cmd->modifier[0]);
> > if (mode_cmd->pitches[0] > max_stride) {
> > @@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct
> > intel_framebuffer *intel_fb,
> > goto err;
> > }
> >
> > - /*
> > - * If there's a fence, enforce that
> > - * the fb pitch and fence stride match.
> > - */
> > - if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] !=
> > stride) {
> > - drm_dbg_kms(&dev_priv->drm,
> > - "pitch (%d) must match tiling stride
> > (%d)\n",
> > - mode_cmd->pitches[0], stride);
> > - goto err;
> > - }
> > -
> > /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
> > if (mode_cmd->offsets[0] != 0) {
> > drm_dbg_kms(&dev_priv->drm,
> > @@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct
> > drm_device *dev,
> > struct drm_framebuffer *fb;
> > struct drm_i915_gem_object *obj;
> > struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> > - struct drm_i915_private *i915;
> > + struct drm_i915_private *i915 = to_i915(dev);
> >
> > - obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
> > - if (!obj)
> > + obj = intel_fb_bo_lookup_valid_bo(i915, filp,
> > user_mode_cmd);
>
> Is there a specific reason you're passing the original mode_cmd here?
No. I will change that.
BR,
Jouni Högander
>
> > + if (IS_ERR(obj))
> > return ERR_PTR(-ENOENT);
> >
> > - /* object is backed with LMEM for discrete */
> > - i915 = to_i915(obj->base.dev);
> > - if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > INTEL_REGION_LMEM_0)) {
> > - /* object is "remote", not in local memory */
> > - i915_gem_object_put(obj);
> > - drm_dbg_kms(&i915->drm, "framebuffer must reside in
> > local memory\n");
> > - return ERR_PTR(-EREMOTE);
> > - }
> > -
> > fb = intel_framebuffer_create(obj, &mode_cmd);
> > drm_gem_object_put(intel_bo_to_drm_bo(obj));
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > new file mode 100644
> > index 000000000000..9b2bf3d8345e
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > @@ -0,0 +1,102 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2021 Intel Corporation
> > + */
> > +
> > +#include <drm/drm_framebuffer.h>
> > +#include <drm/drm_plane.h>
> > +
> > +#include "gem/i915_gem_object.h"
> > +
> > +#include "i915_drv.h"
> > +#include "intel_fb.h"
> > +#include "intel_fb_bo.h"
> > +
> > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > *intel_fb,
> > + struct drm_i915_gem_object *obj,
> > + struct drm_mode_fb_cmd2 *mode_cmd)
> > +{
> > + struct drm_i915_private *i915 = to_i915(obj->base.dev);
> > + unsigned int tiling, stride;
> > +
> > + i915_gem_object_lock(obj, NULL);
> > + tiling = i915_gem_object_get_tiling(obj);
> > + stride = i915_gem_object_get_stride(obj);
> > + i915_gem_object_unlock(obj);
> > +
> > + if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > + /*
> > + * If there's a fence, enforce that
> > + * the fb modifier and tiling mode match.
> > + */
> > + if (tiling != I915_TILING_NONE &&
> > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > >modifier[0])) {
> > + drm_dbg_kms(&i915->drm,
> > + "tiling_mode doesn't match fb
> > modifier\n");
> > + return -EINVAL;
> > + }
> > + } else {
> > + if (tiling == I915_TILING_X) {
> > + mode_cmd->modifier[0] =
> > I915_FORMAT_MOD_X_TILED;
> > + } else if (tiling == I915_TILING_Y) {
> > + drm_dbg_kms(&i915->drm,
> > + "No Y tiling for legacy
> > addfb\n");
> > + return -EINVAL;
> > + }
> > + }
> > +
> > + if (!drm_any_plane_has_format(&i915->drm,
> > + mode_cmd->pixel_format,
> > + mode_cmd->modifier[0])) {
> > + drm_dbg_kms(&i915->drm,
> > + "unsupported pixel format %p4cc /
> > modifier 0x%llx\n",
> > + &mode_cmd->pixel_format, mode_cmd-
> > >modifier[0]);
> > + return -EINVAL;
> > + }
> > +
> > + /*
> > + * gen2/3 display engine uses the fence if present,
> > + * so the tiling mode must match the fb modifier exactly.
> > + */
> > + if (DISPLAY_VER(i915) < 4 &&
> > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > >modifier[0])) {
> > + drm_dbg_kms(&i915->drm,
> > + "tiling_mode must match fb modifier
> > exactly on gen2/3\n");
> > + return -EINVAL;
> > + }
> > +
> > + /*
> > + * If there's a fence, enforce that
> > + * the fb pitch and fence stride match.
> > + */
> > + if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] !=
> > stride) {
> > + drm_dbg_kms(&i915->drm,
> > + "pitch (%d) must match tiling stride
> > (%d)\n",
> > + mode_cmd->pitches[0], stride);
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +struct drm_i915_gem_object *
> > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > + struct drm_file *filp,
> > + const struct drm_mode_fb_cmd2
> > *user_mode_cmd)
> > +{
> > + struct drm_i915_gem_object *obj =
> > i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
> > +
> > + if (!obj)
> > + return ERR_PTR(-ENOENT);
> > +
> > + /* object is backed with LMEM for discrete */
> > + i915 = to_i915(obj->base.dev);
> > + if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > INTEL_REGION_LMEM_0)) {
> > + /* object is "remote", not in local memory */
> > + i915_gem_object_put(obj);
> > + drm_dbg_kms(&i915->drm, "framebuffer must reside in
> > local memory\n");
> > + return ERR_PTR(-EREMOTE);
> > + }
> > +
> > + return obj;
> > +}
> > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > new file mode 100644
> > index 000000000000..dd06ceec8601
> > --- /dev/null
> > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > @@ -0,0 +1,24 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2021 Intel Corporation
> > + */
> > +
> > +#ifndef __INTEL_FB_BO_H__
> > +#define __INTEL_FB_BO_H__
> > +
> > +struct drm_file;
> > +struct drm_mode_fb_cmd2;
> > +struct drm_i915_gem_object;
> > +struct drm_i915_private;
> > +struct intel_framebuffer;
> > +
> > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > *intel_fb,
> > + struct drm_i915_gem_object *obj,
> > + struct drm_mode_fb_cmd2
> > *mode_cmd);
> > +
> > +struct drm_i915_gem_object *
> > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > + struct drm_file *filp,
> > + const struct drm_mode_fb_cmd2
> > *user_mode_cmd);
> > +
> > +#endif
> > --
> > 2.34.1
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static
2023-11-21 7:35 ` Hogander, Jouni
@ 2023-11-21 8:39 ` Ville Syrjälä
0 siblings, 0 replies; 15+ messages in thread
From: Ville Syrjälä @ 2023-11-21 8:39 UTC (permalink / raw)
To: Hogander, Jouni; +Cc: intel-gfx@lists.freedesktop.org
On Tue, Nov 21, 2023 at 07:35:03AM +0000, Hogander, Jouni wrote:
> On Mon, 2023-11-20 at 16:19 +0200, Ville Syrjälä wrote:
> > On Mon, Nov 20, 2023 at 12:08:32PM +0200, Jouni Högander wrote:
> > > We are about to split i915 specific code from intel_fb.c. Convert
> > > intel_fb_modifier_to_tiling as non-static to allow calling it from
> > > split
> > > code.
> >
> > We should only need this in the i915 path.
>
> If I move it into i915 specific source file I need to convert
> lookup_modifier as non-static. Would you prefer that or do you have
> some other suggestion?
Why does this even use lookup_modifier()? Hmm, I guess it's just
using that to reduce all the compressed modifiers to the Y-tiled
"class".
One alternative would be to just list the modifiers by hand, but
dunno if that's any better. I suppose we can just go with your
original idea.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> BR,
>
> Jouni Högander
> >
> > >
> > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/display/intel_fb.c | 40 ++++++++++++---------
> > > ----
> > > drivers/gpu/drm/i915/display/intel_fb.h | 2 ++
> > > 2 files changed, 22 insertions(+), 20 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > > b/drivers/gpu/drm/i915/display/intel_fb.c
> > > index 7c2df6c1f377..a235ec0f192d 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > > @@ -301,6 +301,26 @@ lookup_format_info(const struct
> > > drm_format_info formats[],
> > > return NULL;
> > > }
> > >
> > > +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> > > +{
> > > + u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> > > + INTEL_PLANE_CAP_TILING_MASK;
> > > +
> > > + switch (tiling_caps) {
> > > + case INTEL_PLANE_CAP_TILING_Y:
> > > + return I915_TILING_Y;
> > > + case INTEL_PLANE_CAP_TILING_X:
> > > + return I915_TILING_X;
> > > + case INTEL_PLANE_CAP_TILING_4:
> > > + case INTEL_PLANE_CAP_TILING_Yf:
> > > + case INTEL_PLANE_CAP_TILING_NONE:
> > > + return I915_TILING_NONE;
> > > + default:
> > > + MISSING_CASE(tiling_caps);
> > > + return I915_TILING_NONE;
> > > + }
> > > +}
> > > +
> > > /**
> > > * intel_fb_get_format_info: Get a modifier specific format
> > > information
> > > * @cmd: FB add command structure
> > > @@ -737,26 +757,6 @@ intel_fb_align_height(const struct
> > > drm_framebuffer *fb,
> > > return ALIGN(height, tile_height);
> > > }
> > >
> > > -static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
> > > -{
> > > - u8 tiling_caps = lookup_modifier(fb_modifier)->plane_caps &
> > > - INTEL_PLANE_CAP_TILING_MASK;
> > > -
> > > - switch (tiling_caps) {
> > > - case INTEL_PLANE_CAP_TILING_Y:
> > > - return I915_TILING_Y;
> > > - case INTEL_PLANE_CAP_TILING_X:
> > > - return I915_TILING_X;
> > > - case INTEL_PLANE_CAP_TILING_4:
> > > - case INTEL_PLANE_CAP_TILING_Yf:
> > > - case INTEL_PLANE_CAP_TILING_NONE:
> > > - return I915_TILING_NONE;
> > > - default:
> > > - MISSING_CASE(tiling_caps);
> > > - return I915_TILING_NONE;
> > > - }
> > > -}
> > > -
> > > bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64
> > > modifier)
> > > {
> > > return HAS_DPT(i915) && modifier != DRM_FORMAT_MOD_LINEAR;
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.h
> > > b/drivers/gpu/drm/i915/display/intel_fb.h
> > > index e85167d6bc34..23db6628f53e 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_fb.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb.h
> > > @@ -95,4 +95,6 @@ intel_user_framebuffer_create(struct drm_device
> > > *dev,
> > > bool intel_fb_modifier_uses_dpt(struct drm_i915_private *i915, u64
> > > modifier);
> > > bool intel_fb_uses_dpt(const struct drm_framebuffer *fb);
> > >
> > > +unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier);
> > > +
> > > #endif /* __INTEL_FB_H__ */
> > > --
> > > 2.34.1
> >
>
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-21 7:40 ` Hogander, Jouni
@ 2023-11-21 8:51 ` Ville Syrjälä
2023-11-21 8:57 ` Hogander, Jouni
0 siblings, 1 reply; 15+ messages in thread
From: Ville Syrjälä @ 2023-11-21 8:51 UTC (permalink / raw)
To: Hogander, Jouni; +Cc: intel-gfx@lists.freedesktop.org
On Tue, Nov 21, 2023 at 07:40:00AM +0000, Hogander, Jouni wrote:
> On Mon, 2023-11-20 at 16:23 +0200, Ville Syrjälä wrote:
> > On Mon, Nov 20, 2023 at 12:08:33PM +0200, Jouni Högander wrote:
> > > We are preparing for Xe driver. Backing object implementation is
> > > differing
> > > between i915 and Xe. Split i915 specific code into separate source
> > > file
> > > built only for i915.
> > >
> > > v4: Move drm_any_plane_has_format check into intel_fb_bo.c
> > > v3: Fix failure handling in intel_framebuffer_init
> > > v2: Couple of fixes to error value handling
> > >
> > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/Makefile | 1 +
> > > drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-------------
> > > drivers/gpu/drm/i915/display/intel_fb_bo.c | 102
> > > +++++++++++++++++++++
> > > drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
> > > 4 files changed, 134 insertions(+), 69 deletions(-)
> > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
> > >
> > > diff --git a/drivers/gpu/drm/i915/Makefile
> > > b/drivers/gpu/drm/i915/Makefile
> > > index 7e5d6a39d450..c14ba1212b84 100644
> > > --- a/drivers/gpu/drm/i915/Makefile
> > > +++ b/drivers/gpu/drm/i915/Makefile
> > > @@ -279,6 +279,7 @@ i915-y += \
> > > display/intel_dsb.o \
> > > display/intel_dsb_buffer.o \
> > > display/intel_fb.o \
> > > + display/intel_fb_bo.o \
> > > display/intel_fb_pin.o \
> > > display/intel_fbc.o \
> > > display/intel_fdi.o \
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > > b/drivers/gpu/drm/i915/display/intel_fb.c
> > > index a235ec0f192d..78bdb5dc1262 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > > @@ -4,7 +4,6 @@
> > > */
> > >
> > > #include <drm/drm_blend.h>
> > > -#include <drm/drm_framebuffer.h>
> > > #include <drm/drm_modeset_helper.h>
> > >
> > > #include <linux/dma-fence.h>
> > > @@ -15,6 +14,7 @@
> > > #include "intel_display_types.h"
> > > #include "intel_dpt.h"
> > > #include "intel_fb.h"
> > > +#include "intel_fb_bo.h"
> > > #include "intel_frontbuffer.h"
> > >
> > > #define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)->drm,
> > > (i) >= ARRAY_SIZE(a))
> > > @@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct
> > > intel_framebuffer *intel_fb,
> > > struct drm_i915_private *dev_priv =
> > > to_i915(intel_bo_to_drm_bo(obj)->dev);
> > > struct drm_framebuffer *fb = &intel_fb->base;
> > > u32 max_stride;
> > > - unsigned int tiling, stride;
> > > int ret = -EINVAL;
> > > int i;
> > >
> > > @@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct
> > > intel_framebuffer *intel_fb,
> > > if (!intel_fb->frontbuffer)
> > > return -ENOMEM;
> > >
> > > - i915_gem_object_lock(obj, NULL);
> > > - tiling = i915_gem_object_get_tiling(obj);
> > > - stride = i915_gem_object_get_stride(obj);
> > > - i915_gem_object_unlock(obj);
> > > -
> > > - if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > - /*
> > > - * If there's a fence, enforce that
> > > - * the fb modifier and tiling mode match.
> > > - */
> > > - if (tiling != I915_TILING_NONE &&
> > > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > >modifier[0])) {
> > > - drm_dbg_kms(&dev_priv->drm,
> > > - "tiling_mode doesn't match fb
> > > modifier\n");
> > > - goto err;
> > > - }
> > > - } else {
> > > - if (tiling == I915_TILING_X) {
> > > - mode_cmd->modifier[0] =
> > > I915_FORMAT_MOD_X_TILED;
> > > - } else if (tiling == I915_TILING_Y) {
> > > - drm_dbg_kms(&dev_priv->drm,
> > > - "No Y tiling for legacy
> > > addfb\n");
> > > - goto err;
> > > - }
> > > - }
> > > -
> > > - if (!drm_any_plane_has_format(&dev_priv->drm,
> > > - mode_cmd->pixel_format,
> > > - mode_cmd->modifier[0])) {
> > > - drm_dbg_kms(&dev_priv->drm,
> > > - "unsupported pixel format %p4cc /
> > > modifier 0x%llx\n",
> > > - &mode_cmd->pixel_format, mode_cmd-
> > > >modifier[0]);
> > > - goto err;
> > > - }
> >
> > The drm_any_plane_has_format() check should stay in the common code.
>
> I had it that way originally. That was triggering warning here:
>
> https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v3/fi-pnv-d510/igt@kms_addfb_basic@addfb25-bad-modifier.html
There's already another call to intel_fb_modifier_to_tiling() before
drm_any_plane_has_format() so the warn can already be triggered
with the current code. But apparently we have no test that tries to
cause a modifier vs. tiling mismatch with an invalid modifier?
>
> So I choose to move it before the check below in
> drivers/gpu/drm/i915/display/intel_fb_bo.c. Then add same into
> drivers/gpu/drm/xe/display/intel_fb_bo.c. Do you have better idea?
>
> >
> > > -
> > > - /*
> > > - * gen2/3 display engine uses the fence if present,
> > > - * so the tiling mode must match the fb modifier exactly.
> > > - */
> > > - if (DISPLAY_VER(dev_priv) < 4 &&
> > > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > >modifier[0])) {
> > > - drm_dbg_kms(&dev_priv->drm,
> > > - "tiling_mode must match fb modifier
> > > exactly on gen2/3\n");
> > > + ret = intel_fb_bo_framebuffer_init(intel_fb, obj,
> > > mode_cmd);
> > > + if (ret)
> > > goto err;
> > > - }
> > >
> > > + ret = -EINVAL;
> > > max_stride = intel_fb_max_stride(dev_priv, mode_cmd-
> > > >pixel_format,
> > > mode_cmd->modifier[0]);
> > > if (mode_cmd->pitches[0] > max_stride) {
> > > @@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct
> > > intel_framebuffer *intel_fb,
> > > goto err;
> > > }
> > >
> > > - /*
> > > - * If there's a fence, enforce that
> > > - * the fb pitch and fence stride match.
> > > - */
> > > - if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] !=
> > > stride) {
> > > - drm_dbg_kms(&dev_priv->drm,
> > > - "pitch (%d) must match tiling stride
> > > (%d)\n",
> > > - mode_cmd->pitches[0], stride);
> > > - goto err;
> > > - }
> > > -
> > > /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
> > > if (mode_cmd->offsets[0] != 0) {
> > > drm_dbg_kms(&dev_priv->drm,
> > > @@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct
> > > drm_device *dev,
> > > struct drm_framebuffer *fb;
> > > struct drm_i915_gem_object *obj;
> > > struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> > > - struct drm_i915_private *i915;
> > > + struct drm_i915_private *i915 = to_i915(dev);
> > >
> > > - obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
> > > - if (!obj)
> > > + obj = intel_fb_bo_lookup_valid_bo(i915, filp,
> > > user_mode_cmd);
> >
> > Is there a specific reason you're passing the original mode_cmd here?
>
> No. I will change that.
>
> BR,
>
> Jouni Högander
>
> >
> > > + if (IS_ERR(obj))
> > > return ERR_PTR(-ENOENT);
> > >
> > > - /* object is backed with LMEM for discrete */
> > > - i915 = to_i915(obj->base.dev);
> > > - if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > INTEL_REGION_LMEM_0)) {
> > > - /* object is "remote", not in local memory */
> > > - i915_gem_object_put(obj);
> > > - drm_dbg_kms(&i915->drm, "framebuffer must reside in
> > > local memory\n");
> > > - return ERR_PTR(-EREMOTE);
> > > - }
> > > -
> > > fb = intel_framebuffer_create(obj, &mode_cmd);
> > > drm_gem_object_put(intel_bo_to_drm_bo(obj));
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > new file mode 100644
> > > index 000000000000..9b2bf3d8345e
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > @@ -0,0 +1,102 @@
> > > +/* SPDX-License-Identifier: MIT */
> > > +/*
> > > + * Copyright © 2021 Intel Corporation
> > > + */
> > > +
> > > +#include <drm/drm_framebuffer.h>
> > > +#include <drm/drm_plane.h>
> > > +
> > > +#include "gem/i915_gem_object.h"
> > > +
> > > +#include "i915_drv.h"
> > > +#include "intel_fb.h"
> > > +#include "intel_fb_bo.h"
> > > +
> > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > *intel_fb,
> > > + struct drm_i915_gem_object *obj,
> > > + struct drm_mode_fb_cmd2 *mode_cmd)
> > > +{
> > > + struct drm_i915_private *i915 = to_i915(obj->base.dev);
> > > + unsigned int tiling, stride;
> > > +
> > > + i915_gem_object_lock(obj, NULL);
> > > + tiling = i915_gem_object_get_tiling(obj);
> > > + stride = i915_gem_object_get_stride(obj);
> > > + i915_gem_object_unlock(obj);
> > > +
> > > + if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > + /*
> > > + * If there's a fence, enforce that
> > > + * the fb modifier and tiling mode match.
> > > + */
> > > + if (tiling != I915_TILING_NONE &&
> > > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > >modifier[0])) {
> > > + drm_dbg_kms(&i915->drm,
> > > + "tiling_mode doesn't match fb
> > > modifier\n");
> > > + return -EINVAL;
> > > + }
> > > + } else {
> > > + if (tiling == I915_TILING_X) {
> > > + mode_cmd->modifier[0] =
> > > I915_FORMAT_MOD_X_TILED;
> > > + } else if (tiling == I915_TILING_Y) {
> > > + drm_dbg_kms(&i915->drm,
> > > + "No Y tiling for legacy
> > > addfb\n");
> > > + return -EINVAL;
> > > + }
> > > + }
> > > +
> > > + if (!drm_any_plane_has_format(&i915->drm,
> > > + mode_cmd->pixel_format,
> > > + mode_cmd->modifier[0])) {
> > > + drm_dbg_kms(&i915->drm,
> > > + "unsupported pixel format %p4cc /
> > > modifier 0x%llx\n",
> > > + &mode_cmd->pixel_format, mode_cmd-
> > > >modifier[0]);
> > > + return -EINVAL;
> > > + }
> > > +
> > > + /*
> > > + * gen2/3 display engine uses the fence if present,
> > > + * so the tiling mode must match the fb modifier exactly.
> > > + */
> > > + if (DISPLAY_VER(i915) < 4 &&
> > > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > >modifier[0])) {
> > > + drm_dbg_kms(&i915->drm,
> > > + "tiling_mode must match fb modifier
> > > exactly on gen2/3\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + /*
> > > + * If there's a fence, enforce that
> > > + * the fb pitch and fence stride match.
> > > + */
> > > + if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] !=
> > > stride) {
> > > + drm_dbg_kms(&i915->drm,
> > > + "pitch (%d) must match tiling stride
> > > (%d)\n",
> > > + mode_cmd->pitches[0], stride);
> > > + return -EINVAL;
> > > + }
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +struct drm_i915_gem_object *
> > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > + struct drm_file *filp,
> > > + const struct drm_mode_fb_cmd2
> > > *user_mode_cmd)
> > > +{
> > > + struct drm_i915_gem_object *obj =
> > > i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
> > > +
> > > + if (!obj)
> > > + return ERR_PTR(-ENOENT);
> > > +
> > > + /* object is backed with LMEM for discrete */
> > > + i915 = to_i915(obj->base.dev);
> > > + if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > INTEL_REGION_LMEM_0)) {
> > > + /* object is "remote", not in local memory */
> > > + i915_gem_object_put(obj);
> > > + drm_dbg_kms(&i915->drm, "framebuffer must reside in
> > > local memory\n");
> > > + return ERR_PTR(-EREMOTE);
> > > + }
> > > +
> > > + return obj;
> > > +}
> > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > new file mode 100644
> > > index 000000000000..dd06ceec8601
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > @@ -0,0 +1,24 @@
> > > +/* SPDX-License-Identifier: MIT */
> > > +/*
> > > + * Copyright © 2021 Intel Corporation
> > > + */
> > > +
> > > +#ifndef __INTEL_FB_BO_H__
> > > +#define __INTEL_FB_BO_H__
> > > +
> > > +struct drm_file;
> > > +struct drm_mode_fb_cmd2;
> > > +struct drm_i915_gem_object;
> > > +struct drm_i915_private;
> > > +struct intel_framebuffer;
> > > +
> > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > *intel_fb,
> > > + struct drm_i915_gem_object *obj,
> > > + struct drm_mode_fb_cmd2
> > > *mode_cmd);
> > > +
> > > +struct drm_i915_gem_object *
> > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > + struct drm_file *filp,
> > > + const struct drm_mode_fb_cmd2
> > > *user_mode_cmd);
> > > +
> > > +#endif
> > > --
> > > 2.34.1
> >
>
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-21 8:51 ` Ville Syrjälä
@ 2023-11-21 8:57 ` Hogander, Jouni
2023-11-21 9:07 ` Ville Syrjälä
0 siblings, 1 reply; 15+ messages in thread
From: Hogander, Jouni @ 2023-11-21 8:57 UTC (permalink / raw)
To: ville.syrjala@linux.intel.com; +Cc: intel-gfx@lists.freedesktop.org
On Tue, 2023-11-21 at 10:51 +0200, Ville Syrjälä wrote:
> On Tue, Nov 21, 2023 at 07:40:00AM +0000, Hogander, Jouni wrote:
> > On Mon, 2023-11-20 at 16:23 +0200, Ville Syrjälä wrote:
> > > On Mon, Nov 20, 2023 at 12:08:33PM +0200, Jouni Högander wrote:
> > > > We are preparing for Xe driver. Backing object implementation
> > > > is
> > > > differing
> > > > between i915 and Xe. Split i915 specific code into separate
> > > > source
> > > > file
> > > > built only for i915.
> > > >
> > > > v4: Move drm_any_plane_has_format check into intel_fb_bo.c
> > > > v3: Fix failure handling in intel_framebuffer_init
> > > > v2: Couple of fixes to error value handling
> > > >
> > > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > > ---
> > > > drivers/gpu/drm/i915/Makefile | 1 +
> > > > drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-----------
> > > > --
> > > > drivers/gpu/drm/i915/display/intel_fb_bo.c | 102
> > > > +++++++++++++++++++++
> > > > drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
> > > > 4 files changed, 134 insertions(+), 69 deletions(-)
> > > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/Makefile
> > > > b/drivers/gpu/drm/i915/Makefile
> > > > index 7e5d6a39d450..c14ba1212b84 100644
> > > > --- a/drivers/gpu/drm/i915/Makefile
> > > > +++ b/drivers/gpu/drm/i915/Makefile
> > > > @@ -279,6 +279,7 @@ i915-y += \
> > > > display/intel_dsb.o \
> > > > display/intel_dsb_buffer.o \
> > > > display/intel_fb.o \
> > > > + display/intel_fb_bo.o \
> > > > display/intel_fb_pin.o \
> > > > display/intel_fbc.o \
> > > > display/intel_fdi.o \
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > > > b/drivers/gpu/drm/i915/display/intel_fb.c
> > > > index a235ec0f192d..78bdb5dc1262 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > > > @@ -4,7 +4,6 @@
> > > > */
> > > >
> > > > #include <drm/drm_blend.h>
> > > > -#include <drm/drm_framebuffer.h>
> > > > #include <drm/drm_modeset_helper.h>
> > > >
> > > > #include <linux/dma-fence.h>
> > > > @@ -15,6 +14,7 @@
> > > > #include "intel_display_types.h"
> > > > #include "intel_dpt.h"
> > > > #include "intel_fb.h"
> > > > +#include "intel_fb_bo.h"
> > > > #include "intel_frontbuffer.h"
> > > >
> > > > #define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)-
> > > > >drm,
> > > > (i) >= ARRAY_SIZE(a))
> > > > @@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct
> > > > intel_framebuffer *intel_fb,
> > > > struct drm_i915_private *dev_priv =
> > > > to_i915(intel_bo_to_drm_bo(obj)->dev);
> > > > struct drm_framebuffer *fb = &intel_fb->base;
> > > > u32 max_stride;
> > > > - unsigned int tiling, stride;
> > > > int ret = -EINVAL;
> > > > int i;
> > > >
> > > > @@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct
> > > > intel_framebuffer *intel_fb,
> > > > if (!intel_fb->frontbuffer)
> > > > return -ENOMEM;
> > > >
> > > > - i915_gem_object_lock(obj, NULL);
> > > > - tiling = i915_gem_object_get_tiling(obj);
> > > > - stride = i915_gem_object_get_stride(obj);
> > > > - i915_gem_object_unlock(obj);
> > > > -
> > > > - if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > > - /*
> > > > - * If there's a fence, enforce that
> > > > - * the fb modifier and tiling mode match.
> > > > - */
> > > > - if (tiling != I915_TILING_NONE &&
> > > > - tiling !=
> > > > intel_fb_modifier_to_tiling(mode_cmd-
> > > > > modifier[0])) {
> > > > - drm_dbg_kms(&dev_priv->drm,
> > > > - "tiling_mode doesn't match
> > > > fb
> > > > modifier\n");
> > > > - goto err;
> > > > - }
> > > > - } else {
> > > > - if (tiling == I915_TILING_X) {
> > > > - mode_cmd->modifier[0] =
> > > > I915_FORMAT_MOD_X_TILED;
> > > > - } else if (tiling == I915_TILING_Y) {
> > > > - drm_dbg_kms(&dev_priv->drm,
> > > > - "No Y tiling for legacy
> > > > addfb\n");
> > > > - goto err;
> > > > - }
> > > > - }
> > > > -
> > > > - if (!drm_any_plane_has_format(&dev_priv->drm,
> > > > - mode_cmd->pixel_format,
> > > > - mode_cmd->modifier[0])) {
> > > > - drm_dbg_kms(&dev_priv->drm,
> > > > - "unsupported pixel format %p4cc /
> > > > modifier 0x%llx\n",
> > > > - &mode_cmd->pixel_format, mode_cmd-
> > > > > modifier[0]);
> > > > - goto err;
> > > > - }
> > >
> > > The drm_any_plane_has_format() check should stay in the common
> > > code.
> >
> > I had it that way originally. That was triggering warning here:
> >
> > https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v3/fi-pnv-d510/igt@kms_addfb_basic@addfb25-bad-modifier.html
>
> There's already another call to intel_fb_modifier_to_tiling() before
> drm_any_plane_has_format() so the warn can already be triggered
> with the current code. But apparently we have no test that tries to
> cause a modifier vs. tiling mismatch with an invalid modifier?
Yes, I think that is the case. I was also thinking dropping WARN_ON
from there? Error handling is anyways handling misuse from user-space
side...
BR,
Jouni Högander
>
> >
> > So I choose to move it before the check below in
> > drivers/gpu/drm/i915/display/intel_fb_bo.c. Then add same into
> > drivers/gpu/drm/xe/display/intel_fb_bo.c. Do you have better idea?
> >
> > >
> > > > -
> > > > - /*
> > > > - * gen2/3 display engine uses the fence if present,
> > > > - * so the tiling mode must match the fb modifier
> > > > exactly.
> > > > - */
> > > > - if (DISPLAY_VER(dev_priv) < 4 &&
> > > > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > > > modifier[0])) {
> > > > - drm_dbg_kms(&dev_priv->drm,
> > > > - "tiling_mode must match fb modifier
> > > > exactly on gen2/3\n");
> > > > + ret = intel_fb_bo_framebuffer_init(intel_fb, obj,
> > > > mode_cmd);
> > > > + if (ret)
> > > > goto err;
> > > > - }
> > > >
> > > > + ret = -EINVAL;
> > > > max_stride = intel_fb_max_stride(dev_priv, mode_cmd-
> > > > > pixel_format,
> > > > mode_cmd-
> > > > >modifier[0]);
> > > > if (mode_cmd->pitches[0] > max_stride) {
> > > > @@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct
> > > > intel_framebuffer *intel_fb,
> > > > goto err;
> > > > }
> > > >
> > > > - /*
> > > > - * If there's a fence, enforce that
> > > > - * the fb pitch and fence stride match.
> > > > - */
> > > > - if (tiling != I915_TILING_NONE && mode_cmd->pitches[0]
> > > > !=
> > > > stride) {
> > > > - drm_dbg_kms(&dev_priv->drm,
> > > > - "pitch (%d) must match tiling
> > > > stride
> > > > (%d)\n",
> > > > - mode_cmd->pitches[0], stride);
> > > > - goto err;
> > > > - }
> > > > -
> > > > /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
> > > > if (mode_cmd->offsets[0] != 0) {
> > > > drm_dbg_kms(&dev_priv->drm,
> > > > @@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct
> > > > drm_device *dev,
> > > > struct drm_framebuffer *fb;
> > > > struct drm_i915_gem_object *obj;
> > > > struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> > > > - struct drm_i915_private *i915;
> > > > + struct drm_i915_private *i915 = to_i915(dev);
> > > >
> > > > - obj = i915_gem_object_lookup(filp,
> > > > mode_cmd.handles[0]);
> > > > - if (!obj)
> > > > + obj = intel_fb_bo_lookup_valid_bo(i915, filp,
> > > > user_mode_cmd);
> > >
> > > Is there a specific reason you're passing the original mode_cmd
> > > here?
> >
> > No. I will change that.
> >
> > BR,
> >
> > Jouni Högander
> >
> > >
> > > > + if (IS_ERR(obj))
> > > > return ERR_PTR(-ENOENT);
> > > >
> > > > - /* object is backed with LMEM for discrete */
> > > > - i915 = to_i915(obj->base.dev);
> > > > - if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > > INTEL_REGION_LMEM_0)) {
> > > > - /* object is "remote", not in local memory */
> > > > - i915_gem_object_put(obj);
> > > > - drm_dbg_kms(&i915->drm, "framebuffer must
> > > > reside in
> > > > local memory\n");
> > > > - return ERR_PTR(-EREMOTE);
> > > > - }
> > > > -
> > > > fb = intel_framebuffer_create(obj, &mode_cmd);
> > > > drm_gem_object_put(intel_bo_to_drm_bo(obj));
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > new file mode 100644
> > > > index 000000000000..9b2bf3d8345e
> > > > --- /dev/null
> > > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > @@ -0,0 +1,102 @@
> > > > +/* SPDX-License-Identifier: MIT */
> > > > +/*
> > > > + * Copyright © 2021 Intel Corporation
> > > > + */
> > > > +
> > > > +#include <drm/drm_framebuffer.h>
> > > > +#include <drm/drm_plane.h>
> > > > +
> > > > +#include "gem/i915_gem_object.h"
> > > > +
> > > > +#include "i915_drv.h"
> > > > +#include "intel_fb.h"
> > > > +#include "intel_fb_bo.h"
> > > > +
> > > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > > *intel_fb,
> > > > + struct drm_i915_gem_object
> > > > *obj,
> > > > + struct drm_mode_fb_cmd2
> > > > *mode_cmd)
> > > > +{
> > > > + struct drm_i915_private *i915 = to_i915(obj->base.dev);
> > > > + unsigned int tiling, stride;
> > > > +
> > > > + i915_gem_object_lock(obj, NULL);
> > > > + tiling = i915_gem_object_get_tiling(obj);
> > > > + stride = i915_gem_object_get_stride(obj);
> > > > + i915_gem_object_unlock(obj);
> > > > +
> > > > + if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > > + /*
> > > > + * If there's a fence, enforce that
> > > > + * the fb modifier and tiling mode match.
> > > > + */
> > > > + if (tiling != I915_TILING_NONE &&
> > > > + tiling !=
> > > > intel_fb_modifier_to_tiling(mode_cmd-
> > > > > modifier[0])) {
> > > > + drm_dbg_kms(&i915->drm,
> > > > + "tiling_mode doesn't match
> > > > fb
> > > > modifier\n");
> > > > + return -EINVAL;
> > > > + }
> > > > + } else {
> > > > + if (tiling == I915_TILING_X) {
> > > > + mode_cmd->modifier[0] =
> > > > I915_FORMAT_MOD_X_TILED;
> > > > + } else if (tiling == I915_TILING_Y) {
> > > > + drm_dbg_kms(&i915->drm,
> > > > + "No Y tiling for legacy
> > > > addfb\n");
> > > > + return -EINVAL;
> > > > + }
> > > > + }
> > > > +
> > > > + if (!drm_any_plane_has_format(&i915->drm,
> > > > + mode_cmd->pixel_format,
> > > > + mode_cmd->modifier[0])) {
> > > > + drm_dbg_kms(&i915->drm,
> > > > + "unsupported pixel format %p4cc /
> > > > modifier 0x%llx\n",
> > > > + &mode_cmd->pixel_format, mode_cmd-
> > > > > modifier[0]);
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > + /*
> > > > + * gen2/3 display engine uses the fence if present,
> > > > + * so the tiling mode must match the fb modifier
> > > > exactly.
> > > > + */
> > > > + if (DISPLAY_VER(i915) < 4 &&
> > > > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > > > modifier[0])) {
> > > > + drm_dbg_kms(&i915->drm,
> > > > + "tiling_mode must match fb modifier
> > > > exactly on gen2/3\n");
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > + /*
> > > > + * If there's a fence, enforce that
> > > > + * the fb pitch and fence stride match.
> > > > + */
> > > > + if (tiling != I915_TILING_NONE && mode_cmd->pitches[0]
> > > > !=
> > > > stride) {
> > > > + drm_dbg_kms(&i915->drm,
> > > > + "pitch (%d) must match tiling
> > > > stride
> > > > (%d)\n",
> > > > + mode_cmd->pitches[0], stride);
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > + return 0;
> > > > +}
> > > > +
> > > > +struct drm_i915_gem_object *
> > > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > > + struct drm_file *filp,
> > > > + const struct drm_mode_fb_cmd2
> > > > *user_mode_cmd)
> > > > +{
> > > > + struct drm_i915_gem_object *obj =
> > > > i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
> > > > +
> > > > + if (!obj)
> > > > + return ERR_PTR(-ENOENT);
> > > > +
> > > > + /* object is backed with LMEM for discrete */
> > > > + i915 = to_i915(obj->base.dev);
> > > > + if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > > INTEL_REGION_LMEM_0)) {
> > > > + /* object is "remote", not in local memory */
> > > > + i915_gem_object_put(obj);
> > > > + drm_dbg_kms(&i915->drm, "framebuffer must
> > > > reside in
> > > > local memory\n");
> > > > + return ERR_PTR(-EREMOTE);
> > > > + }
> > > > +
> > > > + return obj;
> > > > +}
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > new file mode 100644
> > > > index 000000000000..dd06ceec8601
> > > > --- /dev/null
> > > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > @@ -0,0 +1,24 @@
> > > > +/* SPDX-License-Identifier: MIT */
> > > > +/*
> > > > + * Copyright © 2021 Intel Corporation
> > > > + */
> > > > +
> > > > +#ifndef __INTEL_FB_BO_H__
> > > > +#define __INTEL_FB_BO_H__
> > > > +
> > > > +struct drm_file;
> > > > +struct drm_mode_fb_cmd2;
> > > > +struct drm_i915_gem_object;
> > > > +struct drm_i915_private;
> > > > +struct intel_framebuffer;
> > > > +
> > > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > > *intel_fb,
> > > > + struct drm_i915_gem_object
> > > > *obj,
> > > > + struct drm_mode_fb_cmd2
> > > > *mode_cmd);
> > > > +
> > > > +struct drm_i915_gem_object *
> > > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > > + struct drm_file *filp,
> > > > + const struct drm_mode_fb_cmd2
> > > > *user_mode_cmd);
> > > > +
> > > > +#endif
> > > > --
> > > > 2.34.1
> > >
> >
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c
2023-11-21 8:57 ` Hogander, Jouni
@ 2023-11-21 9:07 ` Ville Syrjälä
0 siblings, 0 replies; 15+ messages in thread
From: Ville Syrjälä @ 2023-11-21 9:07 UTC (permalink / raw)
To: Hogander, Jouni; +Cc: intel-gfx@lists.freedesktop.org
On Tue, Nov 21, 2023 at 08:57:05AM +0000, Hogander, Jouni wrote:
> On Tue, 2023-11-21 at 10:51 +0200, Ville Syrjälä wrote:
> > On Tue, Nov 21, 2023 at 07:40:00AM +0000, Hogander, Jouni wrote:
> > > On Mon, 2023-11-20 at 16:23 +0200, Ville Syrjälä wrote:
> > > > On Mon, Nov 20, 2023 at 12:08:33PM +0200, Jouni Högander wrote:
> > > > > We are preparing for Xe driver. Backing object implementation
> > > > > is
> > > > > differing
> > > > > between i915 and Xe. Split i915 specific code into separate
> > > > > source
> > > > > file
> > > > > built only for i915.
> > > > >
> > > > > v4: Move drm_any_plane_has_format check into intel_fb_bo.c
> > > > > v3: Fix failure handling in intel_framebuffer_init
> > > > > v2: Couple of fixes to error value handling
> > > > >
> > > > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > > > ---
> > > > > drivers/gpu/drm/i915/Makefile | 1 +
> > > > > drivers/gpu/drm/i915/display/intel_fb.c | 76 ++-----------
> > > > > --
> > > > > drivers/gpu/drm/i915/display/intel_fb_bo.c | 102
> > > > > +++++++++++++++++++++
> > > > > drivers/gpu/drm/i915/display/intel_fb_bo.h | 24 +++++
> > > > > 4 files changed, 134 insertions(+), 69 deletions(-)
> > > > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > > create mode 100644 drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > >
> > > > > diff --git a/drivers/gpu/drm/i915/Makefile
> > > > > b/drivers/gpu/drm/i915/Makefile
> > > > > index 7e5d6a39d450..c14ba1212b84 100644
> > > > > --- a/drivers/gpu/drm/i915/Makefile
> > > > > +++ b/drivers/gpu/drm/i915/Makefile
> > > > > @@ -279,6 +279,7 @@ i915-y += \
> > > > > display/intel_dsb.o \
> > > > > display/intel_dsb_buffer.o \
> > > > > display/intel_fb.o \
> > > > > + display/intel_fb_bo.o \
> > > > > display/intel_fb_pin.o \
> > > > > display/intel_fbc.o \
> > > > > display/intel_fdi.o \
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c
> > > > > b/drivers/gpu/drm/i915/display/intel_fb.c
> > > > > index a235ec0f192d..78bdb5dc1262 100644
> > > > > --- a/drivers/gpu/drm/i915/display/intel_fb.c
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_fb.c
> > > > > @@ -4,7 +4,6 @@
> > > > > */
> > > > >
> > > > > #include <drm/drm_blend.h>
> > > > > -#include <drm/drm_framebuffer.h>
> > > > > #include <drm/drm_modeset_helper.h>
> > > > >
> > > > > #include <linux/dma-fence.h>
> > > > > @@ -15,6 +14,7 @@
> > > > > #include "intel_display_types.h"
> > > > > #include "intel_dpt.h"
> > > > > #include "intel_fb.h"
> > > > > +#include "intel_fb_bo.h"
> > > > > #include "intel_frontbuffer.h"
> > > > >
> > > > > #define check_array_bounds(i915, a, i) drm_WARN_ON(&(i915)-
> > > > > >drm,
> > > > > (i) >= ARRAY_SIZE(a))
> > > > > @@ -1978,7 +1978,6 @@ int intel_framebuffer_init(struct
> > > > > intel_framebuffer *intel_fb,
> > > > > struct drm_i915_private *dev_priv =
> > > > > to_i915(intel_bo_to_drm_bo(obj)->dev);
> > > > > struct drm_framebuffer *fb = &intel_fb->base;
> > > > > u32 max_stride;
> > > > > - unsigned int tiling, stride;
> > > > > int ret = -EINVAL;
> > > > > int i;
> > > > >
> > > > > @@ -1986,52 +1985,11 @@ int intel_framebuffer_init(struct
> > > > > intel_framebuffer *intel_fb,
> > > > > if (!intel_fb->frontbuffer)
> > > > > return -ENOMEM;
> > > > >
> > > > > - i915_gem_object_lock(obj, NULL);
> > > > > - tiling = i915_gem_object_get_tiling(obj);
> > > > > - stride = i915_gem_object_get_stride(obj);
> > > > > - i915_gem_object_unlock(obj);
> > > > > -
> > > > > - if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > > > - /*
> > > > > - * If there's a fence, enforce that
> > > > > - * the fb modifier and tiling mode match.
> > > > > - */
> > > > > - if (tiling != I915_TILING_NONE &&
> > > > > - tiling !=
> > > > > intel_fb_modifier_to_tiling(mode_cmd-
> > > > > > modifier[0])) {
> > > > > - drm_dbg_kms(&dev_priv->drm,
> > > > > - "tiling_mode doesn't match
> > > > > fb
> > > > > modifier\n");
> > > > > - goto err;
> > > > > - }
> > > > > - } else {
> > > > > - if (tiling == I915_TILING_X) {
> > > > > - mode_cmd->modifier[0] =
> > > > > I915_FORMAT_MOD_X_TILED;
> > > > > - } else if (tiling == I915_TILING_Y) {
> > > > > - drm_dbg_kms(&dev_priv->drm,
> > > > > - "No Y tiling for legacy
> > > > > addfb\n");
> > > > > - goto err;
> > > > > - }
> > > > > - }
> > > > > -
> > > > > - if (!drm_any_plane_has_format(&dev_priv->drm,
> > > > > - mode_cmd->pixel_format,
> > > > > - mode_cmd->modifier[0])) {
> > > > > - drm_dbg_kms(&dev_priv->drm,
> > > > > - "unsupported pixel format %p4cc /
> > > > > modifier 0x%llx\n",
> > > > > - &mode_cmd->pixel_format, mode_cmd-
> > > > > > modifier[0]);
> > > > > - goto err;
> > > > > - }
> > > >
> > > > The drm_any_plane_has_format() check should stay in the common
> > > > code.
> > >
> > > I had it that way originally. That was triggering warning here:
> > >
> > > https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_126507v3/fi-pnv-d510/igt@kms_addfb_basic@addfb25-bad-modifier.html
> >
> > There's already another call to intel_fb_modifier_to_tiling() before
> > drm_any_plane_has_format() so the warn can already be triggered
> > with the current code. But apparently we have no test that tries to
> > cause a modifier vs. tiling mismatch with an invalid modifier?
>
> Yes, I think that is the case. I was also thinking dropping WARN_ON
> from there? Error handling is anyways handling misuse from user-space
> side...
The fallback to intel_modifiers[0] is clearly very wrong
for an invalid modifier. So I think this need to either stop using
lookup_modifier(), or we need to change to lookup_modifier_or_null()
and deal with the NULL. Or we need to reoder the code so that
we don't call lookup_modifier() before we know the modifier is valid.
>
> BR,
>
> Jouni Högander
>
> >
> > >
> > > So I choose to move it before the check below in
> > > drivers/gpu/drm/i915/display/intel_fb_bo.c. Then add same into
> > > drivers/gpu/drm/xe/display/intel_fb_bo.c. Do you have better idea?
> > >
> > > >
> > > > > -
> > > > > - /*
> > > > > - * gen2/3 display engine uses the fence if present,
> > > > > - * so the tiling mode must match the fb modifier
> > > > > exactly.
> > > > > - */
> > > > > - if (DISPLAY_VER(dev_priv) < 4 &&
> > > > > - tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > > > > modifier[0])) {
> > > > > - drm_dbg_kms(&dev_priv->drm,
> > > > > - "tiling_mode must match fb modifier
> > > > > exactly on gen2/3\n");
> > > > > + ret = intel_fb_bo_framebuffer_init(intel_fb, obj,
> > > > > mode_cmd);
> > > > > + if (ret)
> > > > > goto err;
> > > > > - }
> > > > >
> > > > > + ret = -EINVAL;
> > > > > max_stride = intel_fb_max_stride(dev_priv, mode_cmd-
> > > > > > pixel_format,
> > > > > mode_cmd-
> > > > > >modifier[0]);
> > > > > if (mode_cmd->pitches[0] > max_stride) {
> > > > > @@ -2043,17 +2001,6 @@ int intel_framebuffer_init(struct
> > > > > intel_framebuffer *intel_fb,
> > > > > goto err;
> > > > > }
> > > > >
> > > > > - /*
> > > > > - * If there's a fence, enforce that
> > > > > - * the fb pitch and fence stride match.
> > > > > - */
> > > > > - if (tiling != I915_TILING_NONE && mode_cmd->pitches[0]
> > > > > !=
> > > > > stride) {
> > > > > - drm_dbg_kms(&dev_priv->drm,
> > > > > - "pitch (%d) must match tiling
> > > > > stride
> > > > > (%d)\n",
> > > > > - mode_cmd->pitches[0], stride);
> > > > > - goto err;
> > > > > - }
> > > > > -
> > > > > /* FIXME need to adjust LINOFF/TILEOFF accordingly. */
> > > > > if (mode_cmd->offsets[0] != 0) {
> > > > > drm_dbg_kms(&dev_priv->drm,
> > > > > @@ -2137,21 +2084,12 @@ intel_user_framebuffer_create(struct
> > > > > drm_device *dev,
> > > > > struct drm_framebuffer *fb;
> > > > > struct drm_i915_gem_object *obj;
> > > > > struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
> > > > > - struct drm_i915_private *i915;
> > > > > + struct drm_i915_private *i915 = to_i915(dev);
> > > > >
> > > > > - obj = i915_gem_object_lookup(filp,
> > > > > mode_cmd.handles[0]);
> > > > > - if (!obj)
> > > > > + obj = intel_fb_bo_lookup_valid_bo(i915, filp,
> > > > > user_mode_cmd);
> > > >
> > > > Is there a specific reason you're passing the original mode_cmd
> > > > here?
> > >
> > > No. I will change that.
> > >
> > > BR,
> > >
> > > Jouni Högander
> > >
> > > >
> > > > > + if (IS_ERR(obj))
> > > > > return ERR_PTR(-ENOENT);
> > > > >
> > > > > - /* object is backed with LMEM for discrete */
> > > > > - i915 = to_i915(obj->base.dev);
> > > > > - if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > > > INTEL_REGION_LMEM_0)) {
> > > > > - /* object is "remote", not in local memory */
> > > > > - i915_gem_object_put(obj);
> > > > > - drm_dbg_kms(&i915->drm, "framebuffer must
> > > > > reside in
> > > > > local memory\n");
> > > > > - return ERR_PTR(-EREMOTE);
> > > > > - }
> > > > > -
> > > > > fb = intel_framebuffer_create(obj, &mode_cmd);
> > > > > drm_gem_object_put(intel_bo_to_drm_bo(obj));
> > > > >
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > > b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > > new file mode 100644
> > > > > index 000000000000..9b2bf3d8345e
> > > > > --- /dev/null
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.c
> > > > > @@ -0,0 +1,102 @@
> > > > > +/* SPDX-License-Identifier: MIT */
> > > > > +/*
> > > > > + * Copyright © 2021 Intel Corporation
> > > > > + */
> > > > > +
> > > > > +#include <drm/drm_framebuffer.h>
> > > > > +#include <drm/drm_plane.h>
> > > > > +
> > > > > +#include "gem/i915_gem_object.h"
> > > > > +
> > > > > +#include "i915_drv.h"
> > > > > +#include "intel_fb.h"
> > > > > +#include "intel_fb_bo.h"
> > > > > +
> > > > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > > > *intel_fb,
> > > > > + struct drm_i915_gem_object
> > > > > *obj,
> > > > > + struct drm_mode_fb_cmd2
> > > > > *mode_cmd)
> > > > > +{
> > > > > + struct drm_i915_private *i915 = to_i915(obj->base.dev);
> > > > > + unsigned int tiling, stride;
> > > > > +
> > > > > + i915_gem_object_lock(obj, NULL);
> > > > > + tiling = i915_gem_object_get_tiling(obj);
> > > > > + stride = i915_gem_object_get_stride(obj);
> > > > > + i915_gem_object_unlock(obj);
> > > > > +
> > > > > + if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
> > > > > + /*
> > > > > + * If there's a fence, enforce that
> > > > > + * the fb modifier and tiling mode match.
> > > > > + */
> > > > > + if (tiling != I915_TILING_NONE &&
> > > > > + tiling !=
> > > > > intel_fb_modifier_to_tiling(mode_cmd-
> > > > > > modifier[0])) {
> > > > > + drm_dbg_kms(&i915->drm,
> > > > > + "tiling_mode doesn't match
> > > > > fb
> > > > > modifier\n");
> > > > > + return -EINVAL;
> > > > > + }
> > > > > + } else {
> > > > > + if (tiling == I915_TILING_X) {
> > > > > + mode_cmd->modifier[0] =
> > > > > I915_FORMAT_MOD_X_TILED;
> > > > > + } else if (tiling == I915_TILING_Y) {
> > > > > + drm_dbg_kms(&i915->drm,
> > > > > + "No Y tiling for legacy
> > > > > addfb\n");
> > > > > + return -EINVAL;
> > > > > + }
> > > > > + }
> > > > > +
> > > > > + if (!drm_any_plane_has_format(&i915->drm,
> > > > > + mode_cmd->pixel_format,
> > > > > + mode_cmd->modifier[0])) {
> > > > > + drm_dbg_kms(&i915->drm,
> > > > > + "unsupported pixel format %p4cc /
> > > > > modifier 0x%llx\n",
> > > > > + &mode_cmd->pixel_format, mode_cmd-
> > > > > > modifier[0]);
> > > > > + return -EINVAL;
> > > > > + }
> > > > > +
> > > > > + /*
> > > > > + * gen2/3 display engine uses the fence if present,
> > > > > + * so the tiling mode must match the fb modifier
> > > > > exactly.
> > > > > + */
> > > > > + if (DISPLAY_VER(i915) < 4 &&
> > > > > + tiling != intel_fb_modifier_to_tiling(mode_cmd-
> > > > > > modifier[0])) {
> > > > > + drm_dbg_kms(&i915->drm,
> > > > > + "tiling_mode must match fb modifier
> > > > > exactly on gen2/3\n");
> > > > > + return -EINVAL;
> > > > > + }
> > > > > +
> > > > > + /*
> > > > > + * If there's a fence, enforce that
> > > > > + * the fb pitch and fence stride match.
> > > > > + */
> > > > > + if (tiling != I915_TILING_NONE && mode_cmd->pitches[0]
> > > > > !=
> > > > > stride) {
> > > > > + drm_dbg_kms(&i915->drm,
> > > > > + "pitch (%d) must match tiling
> > > > > stride
> > > > > (%d)\n",
> > > > > + mode_cmd->pitches[0], stride);
> > > > > + return -EINVAL;
> > > > > + }
> > > > > +
> > > > > + return 0;
> > > > > +}
> > > > > +
> > > > > +struct drm_i915_gem_object *
> > > > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > > > + struct drm_file *filp,
> > > > > + const struct drm_mode_fb_cmd2
> > > > > *user_mode_cmd)
> > > > > +{
> > > > > + struct drm_i915_gem_object *obj =
> > > > > i915_gem_object_lookup(filp, user_mode_cmd->handles[0]);
> > > > > +
> > > > > + if (!obj)
> > > > > + return ERR_PTR(-ENOENT);
> > > > > +
> > > > > + /* object is backed with LMEM for discrete */
> > > > > + i915 = to_i915(obj->base.dev);
> > > > > + if (HAS_LMEM(i915) && !i915_gem_object_can_migrate(obj,
> > > > > INTEL_REGION_LMEM_0)) {
> > > > > + /* object is "remote", not in local memory */
> > > > > + i915_gem_object_put(obj);
> > > > > + drm_dbg_kms(&i915->drm, "framebuffer must
> > > > > reside in
> > > > > local memory\n");
> > > > > + return ERR_PTR(-EREMOTE);
> > > > > + }
> > > > > +
> > > > > + return obj;
> > > > > +}
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > > b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > > new file mode 100644
> > > > > index 000000000000..dd06ceec8601
> > > > > --- /dev/null
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_fb_bo.h
> > > > > @@ -0,0 +1,24 @@
> > > > > +/* SPDX-License-Identifier: MIT */
> > > > > +/*
> > > > > + * Copyright © 2021 Intel Corporation
> > > > > + */
> > > > > +
> > > > > +#ifndef __INTEL_FB_BO_H__
> > > > > +#define __INTEL_FB_BO_H__
> > > > > +
> > > > > +struct drm_file;
> > > > > +struct drm_mode_fb_cmd2;
> > > > > +struct drm_i915_gem_object;
> > > > > +struct drm_i915_private;
> > > > > +struct intel_framebuffer;
> > > > > +
> > > > > +int intel_fb_bo_framebuffer_init(struct intel_framebuffer
> > > > > *intel_fb,
> > > > > + struct drm_i915_gem_object
> > > > > *obj,
> > > > > + struct drm_mode_fb_cmd2
> > > > > *mode_cmd);
> > > > > +
> > > > > +struct drm_i915_gem_object *
> > > > > +intel_fb_bo_lookup_valid_bo(struct drm_i915_private *i915,
> > > > > + struct drm_file *filp,
> > > > > + const struct drm_mode_fb_cmd2
> > > > > *user_mode_cmd);
> > > > > +
> > > > > +#endif
> > > > > --
> > > > > 2.34.1
> > > >
> > >
> >
>
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2023-11-21 9:07 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-20 10:08 [Intel-gfx] [PATCH v4 0/3] Prepare intel_fb for Xe Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 1/3] drm/i915/display: use intel_bo_to_drm_bo in intel_fb.c Jouni Högander
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 2/3] drm/i915/display: Convert intel_fb_modifier_to_tiling as non-static Jouni Högander
2023-11-20 14:19 ` Ville Syrjälä
2023-11-21 7:35 ` Hogander, Jouni
2023-11-21 8:39 ` Ville Syrjälä
2023-11-20 10:08 ` [Intel-gfx] [PATCH v4 3/3] drm/i915/display: Split i915 specific code away from intel_fb.c Jouni Högander
2023-11-20 14:23 ` Ville Syrjälä
2023-11-21 7:40 ` Hogander, Jouni
2023-11-21 8:51 ` Ville Syrjälä
2023-11-21 8:57 ` Hogander, Jouni
2023-11-21 9:07 ` Ville Syrjälä
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Prepare intel_fb for Xe (rev4) Patchwork
2023-11-20 23:19 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-11-20 23:33 ` [Intel-gfx] ✓ Fi.CI.BAT: success " 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.