* [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups
@ 2026-01-20 10:54 Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 1/3] lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id() Jani Nikula
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Jani Nikula @ 2026-01-20 10:54 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula, ville.syrjala
Some minor cleanups for pipe vs. CRTC index conversions.
Jani Nikula (3):
lib/igt_kms: Always return CRTC index from
kmstest_get_pipe_from_crtc_id()
lib/igt_kms: Drop the ioctl fallback for CRTC id to pipe mapping
lib/igt_kms: Remove kmstest_pipe_to_index()
lib/igt_kms.c | 75 +++++++++----------------------------
lib/igt_kms.h | 3 +-
tests/intel/kms_fbcon_fbt.c | 2 +-
tests/kms_async_flips.c | 6 +--
tests/kms_setmode.c | 4 +-
5 files changed, 24 insertions(+), 66 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH i-g-t 1/3] lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id()
2026-01-20 10:54 [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups Jani Nikula
@ 2026-01-20 10:54 ` Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 2/3] lib/igt_kms: Drop the ioctl fallback for CRTC id to pipe mapping Jani Nikula
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2026-01-20 10:54 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula, ville.syrjala
All users of kmstest_get_pipe_from_crtc_id() actually need the CRTC
index, not the hardware pipe. Stop doing the CRTC index to hardware pipe
special case mapping on Intel devices. Rename the function
kmstest_get_crtc_index_from_id().
kms_setmode.c does use the result also for logging, which would now be
incorrect if pipe != CRTC index. But even there, it functionally
requires the CRTC index. The test needs other cleanups.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
lib/igt_kms.c | 13 +++++--------
lib/igt_kms.h | 2 +-
tests/intel/kms_fbcon_fbt.c | 2 +-
tests/kms_async_flips.c | 6 +++---
tests/kms_setmode.c | 3 +--
5 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 77b3ae2afa01..57e6474f2c2d 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1360,16 +1360,14 @@ static int __intel_get_pipe_from_crtc_id(int fd, int crtc_id, int crtc_idx)
}
/**
- * kmstest_get_pipe_from_crtc_id:
+ * kmstest_get_crtc_index_from_id:
* @fd: DRM fd
* @crtc_id: DRM CRTC id
*
- * Returns: The crtc index for the given DRM CRTC ID @crtc_id. The crtc index
- * is the equivalent of the pipe id. This value maps directly to an enum pipe
- * value used in other helper functions. Returns 0 if the index could not be
- * determined.
+ * Returns: The crtc index for the given DRM CRTC ID @crtc_id. Returns 0 if the
+ * index could not be determined.
*/
-int kmstest_get_pipe_from_crtc_id(int fd, int crtc_id)
+int kmstest_get_crtc_index_from_id(int fd, int crtc_id)
{
drmModeRes *res;
drmModeCrtc *drm_crtc;
@@ -1391,8 +1389,7 @@ int kmstest_get_pipe_from_crtc_id(int fd, int crtc_id)
drmModeFreeResources(res);
- return is_intel_device(fd) ?
- __intel_get_pipe_from_crtc_id(fd, crtc_id, i) : i;
+ return i;
}
/**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index e1044101707c..d25c166eba4a 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -148,7 +148,7 @@ void kmstest_dump_mode(drmModeModeInfo *mode);
#define HDISPLAY_6K_PER_PIPE 6144
#define HDISPLAY_5K_PER_PIPE 5120
-int kmstest_get_pipe_from_crtc_id(int fd, int crtc_id);
+int kmstest_get_crtc_index_from_id(int fd, int crtc_id);
void kmstest_set_vt_graphics_mode(void);
void kmstest_restore_vt_mode(void);
void kmstest_set_vt_text_mode(void);
diff --git a/tests/intel/kms_fbcon_fbt.c b/tests/intel/kms_fbcon_fbt.c
index 1b9e535ebffc..f6de4b0afef6 100644
--- a/tests/intel/kms_fbcon_fbt.c
+++ b/tests/intel/kms_fbcon_fbt.c
@@ -148,7 +148,7 @@ static bool fbc_check_cursor_blinking(struct drm_info *drm)
bool ret;
int i, pipe;
- pipe = kmstest_get_pipe_from_crtc_id(drm->fd, drm->crtc_id);
+ pipe = kmstest_get_crtc_index_from_id(drm->fd, drm->crtc_id);
pipe_crc = igt_pipe_crc_new(drm->fd, pipe, IGT_PIPE_CRC_SOURCE_AUTO);
igt_pipe_crc_start(pipe_crc);
diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
index 71570385c32e..0ee0cdc47a96 100644
--- a/tests/kms_async_flips.c
+++ b/tests/kms_async_flips.c
@@ -560,7 +560,7 @@ static void wait_for_vblank(data_t *data, unsigned long *vbl_time, unsigned int
int pipe;
memset(&wait_vbl, 0, sizeof(wait_vbl));
- pipe = kmstest_get_pipe_from_crtc_id(data->drm_fd, data->crtc_id);
+ pipe = kmstest_get_crtc_index_from_id(data->drm_fd, data->crtc_id);
pipe_id_flag = kmstest_get_vbl_flag(pipe);
wait_vbl.request.type = DRM_VBLANK_RELATIVE | pipe_id_flag;
@@ -732,7 +732,7 @@ static void test_invalid(data_t *data)
static void queue_vblank(data_t *data)
{
- int pipe = kmstest_get_pipe_from_crtc_id(data->drm_fd, data->crtc_id);
+ int pipe = kmstest_get_crtc_index_from_id(data->drm_fd, data->crtc_id);
drmVBlank wait_vbl = {
.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT |
kmstest_get_vbl_flag(pipe),
@@ -855,7 +855,7 @@ static void test_crc(data_t *data)
igt_assert_eq(ret, 0);
data->pipe_crc = igt_pipe_crc_new(data->drm_fd,
- kmstest_get_pipe_from_crtc_id(data->drm_fd, data->crtc_id),
+ kmstest_get_crtc_index_from_id(data->drm_fd, data->crtc_id),
IGT_PIPE_CRC_SOURCE_AUTO);
igt_pipe_crc_start(data->pipe_crc);
diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
index 108e713610fd..8ed6113205f6 100644
--- a/tests/kms_setmode.c
+++ b/tests/kms_setmode.c
@@ -354,8 +354,7 @@ static void setup_crtcs(const struct test_config *tconf,
resources->crtcs[crtc->crtc_idx]);
crtc->crtc_id = drm_crtc->crtc_id;
drmModeFreeCrtc(drm_crtc);
- crtc->pipe_id = kmstest_get_pipe_from_crtc_id(drm_fd,
- crtc->crtc_id);
+ crtc->pipe_id = kmstest_get_crtc_index_from_id(drm_fd, crtc->crtc_id);
crtc->connector_count = 1;
for (j = i + 1; j < connector_count; j++)
--
2.47.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH i-g-t 2/3] lib/igt_kms: Drop the ioctl fallback for CRTC id to pipe mapping
2026-01-20 10:54 [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 1/3] lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id() Jani Nikula
@ 2026-01-20 10:54 ` Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index() Jani Nikula
2026-01-20 18:12 ` ✗ Fi.CI.BUILD: failure for lib/igt_kms: pipe vs CRTC index cleanups Patchwork
3 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2026-01-20 10:54 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula, ville.syrjala
The kernel support for i915_pipe debugfs has been around for 2½ years in
both i915 and xe. Drop the ioctl fallback for simplicity. Rename the
function __intel_get_pipe_from_crtc_index() as it's now purely about
CRTC index and not id.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
lib/igt_kms.c | 44 +++++++++-----------------------------------
1 file changed, 9 insertions(+), 35 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 57e6474f2c2d..f6769d31edcb 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1312,51 +1312,27 @@ void kmstest_dump_mode(drmModeModeInfo *mode)
}
/*
- * With non-contiguous pipes display, crtc mapping is not always same
- * as pipe mapping, In i915 pipe is enum id of i915's crtc object.
- * hence allocating upper bound igt_pipe array to support non-contiguos
- * pipe display and reading pipe enum for a crtc using GET_PIPE_FROM_CRTC_ID
- * ioctl for a pipe to do pipe ordering with respect to crtc list.
+ * The hardware pipe may be different from the CRTC index. Figure out the CRTC
+ * index to pipe mapping from the debugfs.
*/
-static int __intel_get_pipe_from_crtc_id(int fd, int crtc_id, int crtc_idx)
+static int __intel_get_pipe_from_crtc_index(int fd, int crtc_index)
{
char buf[2];
int debugfs_fd, res = 0;
+ char pipe_char;
- /*
- * No GET_PIPE_FROM_CRTC_ID ioctl support for XE. Instead read
- * from the debugfs "i915_pipe".
- *
- * This debugfs is applicable for both i915 & XE. For i915, still
- * we can fallback to ioctl method to support older kernels.
- */
- debugfs_fd = igt_debugfs_pipe_dir(fd, crtc_idx, O_RDONLY);
+ debugfs_fd = igt_debugfs_pipe_dir(fd, crtc_index, O_RDONLY);
if (debugfs_fd >= 0) {
res = igt_debugfs_simple_read(debugfs_fd, "i915_pipe", buf, sizeof(buf));
close(debugfs_fd);
}
- if (res <= 0) {
- /* Fallback to older ioctl method. */
- if (is_i915_device(fd)) {
- struct drm_i915_get_pipe_from_crtc_id get_pipe;
-
- get_pipe.pipe = 0;
- get_pipe.crtc_id = crtc_id;
+ igt_assert_f(res > 0, "Failed to read the debugfs i915_pipe.\n");
- do_ioctl(fd, DRM_IOCTL_I915_GET_PIPE_FROM_CRTC_ID,
- &get_pipe);
+ igt_assert_eq(sscanf(buf, "%c", &pipe_char), 1);
- return get_pipe.pipe;
- } else
- igt_assert_f(false, "XE: Failed to read the debugfs i915_pipe.\n");
- } else {
- char pipe;
-
- igt_assert_eq(sscanf(buf, "%c", &pipe), 1);
- return kmstest_pipe_to_index(pipe);
- }
+ return kmstest_pipe_to_index(pipe_char);
}
/**
@@ -3229,9 +3205,7 @@ void igt_display_require(igt_display_t *display, int drm_fd)
for (i = 0; i < resources->count_crtcs; i++) {
igt_crtc_t *pipe;
- int pipe_enum = (is_intel_dev)?
- __intel_get_pipe_from_crtc_id(drm_fd,
- resources->crtcs[i], i) : i;
+ int pipe_enum = is_intel_dev ? __intel_get_pipe_from_crtc_index(drm_fd, i) : i;
pipe = igt_crtc_for_pipe(display, pipe_enum);
pipe->pipe = pipe_enum;
--
2.47.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index()
2026-01-20 10:54 [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 1/3] lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id() Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 2/3] lib/igt_kms: Drop the ioctl fallback for CRTC id to pipe mapping Jani Nikula
@ 2026-01-20 10:54 ` Jani Nikula
2026-01-20 11:21 ` Jani Nikula
2026-01-20 18:12 ` ✗ Fi.CI.BUILD: failure for lib/igt_kms: pipe vs CRTC index cleanups Patchwork
3 siblings, 1 reply; 6+ messages in thread
From: Jani Nikula @ 2026-01-20 10:54 UTC (permalink / raw)
To: igt-dev; +Cc: jani.nikula, ville.syrjala
There's only a single user for kmstest_pipe_to_index(), and that should
be the extent of it. There's no reason for other code than the i915_pipe
debugfs parsing to convert from pipe name character to the enum
pipe. And for that, the name of the function is misleading anyway.
Inline the functionality in __intel_get_pipe_from_crtc_index(), using
igt_assert_f() for invalid values instead of propagating -EINVAL which
isn't even checked by the caller.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
lib/igt_kms.c | 24 ++++++------------------
lib/igt_kms.h | 1 -
tests/kms_setmode.c | 1 +
3 files changed, 7 insertions(+), 19 deletions(-)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f6769d31edcb..08b982f0f68f 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1061,22 +1061,6 @@ const char *kmstest_pipe_name(enum pipe pipe)
return str + (pipe * 2);
}
-/**
- * kmstest_pipe_to_index:
- * @pipe: display pipe in string format
- *
- * Returns: Index to corresponding pipe
- */
-int kmstest_pipe_to_index(char pipe)
-{
- int r = pipe - 'A';
-
- if (r < 0 || r >= IGT_MAX_PIPES)
- return -EINVAL;
-
- return r;
-}
-
/**
* kmstest_plane_type_name:
* @plane_type: display plane type
@@ -1318,7 +1302,7 @@ void kmstest_dump_mode(drmModeModeInfo *mode)
static int __intel_get_pipe_from_crtc_index(int fd, int crtc_index)
{
char buf[2];
- int debugfs_fd, res = 0;
+ int debugfs_fd, pipe, res = 0;
char pipe_char;
debugfs_fd = igt_debugfs_pipe_dir(fd, crtc_index, O_RDONLY);
@@ -1332,7 +1316,11 @@ static int __intel_get_pipe_from_crtc_index(int fd, int crtc_index)
igt_assert_eq(sscanf(buf, "%c", &pipe_char), 1);
- return kmstest_pipe_to_index(pipe_char);
+ pipe = pipe_char - 'A';
+
+ igt_assert_f(pipe >= 0 && pipe < IGT_MAX_PIPES, "i915_pipe %c out of range\n", pipe_char);
+
+ return pipe;
}
/**
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index d25c166eba4a..a3b3d578f16d 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -90,7 +90,6 @@ enum pipe {
IGT_MAX_PIPES
};
const char *kmstest_pipe_name(enum pipe pipe);
-int kmstest_pipe_to_index(char pipe);
const char *kmstest_plane_type_name(int plane_type);
enum port {
diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
index 8ed6113205f6..3f61f72f772b 100644
--- a/tests/kms_setmode.c
+++ b/tests/kms_setmode.c
@@ -354,6 +354,7 @@ static void setup_crtcs(const struct test_config *tconf,
resources->crtcs[crtc->crtc_idx]);
crtc->crtc_id = drm_crtc->crtc_id;
drmModeFreeCrtc(drm_crtc);
+ /* FIXME: The test functionally uses this as CRTC index, not pipe */
crtc->pipe_id = kmstest_get_crtc_index_from_id(drm_fd, crtc->crtc_id);
crtc->connector_count = 1;
--
2.47.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index()
2026-01-20 10:54 ` [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index() Jani Nikula
@ 2026-01-20 11:21 ` Jani Nikula
0 siblings, 0 replies; 6+ messages in thread
From: Jani Nikula @ 2026-01-20 11:21 UTC (permalink / raw)
To: igt-dev; +Cc: ville.syrjala
On Tue, 20 Jan 2026, Jani Nikula <jani.nikula@intel.com> wrote:
> There's only a single user for kmstest_pipe_to_index(), and that should
> be the extent of it. There's no reason for other code than the i915_pipe
> debugfs parsing to convert from pipe name character to the enum
> pipe. And for that, the name of the function is misleading anyway.
>
> Inline the functionality in __intel_get_pipe_from_crtc_index(), using
> igt_assert_f() for invalid values instead of propagating -EINVAL which
> isn't even checked by the caller.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> lib/igt_kms.c | 24 ++++++------------------
> lib/igt_kms.h | 1 -
> tests/kms_setmode.c | 1 +
> 3 files changed, 7 insertions(+), 19 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index f6769d31edcb..08b982f0f68f 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -1061,22 +1061,6 @@ const char *kmstest_pipe_name(enum pipe pipe)
> return str + (pipe * 2);
> }
>
> -/**
> - * kmstest_pipe_to_index:
> - * @pipe: display pipe in string format
> - *
> - * Returns: Index to corresponding pipe
> - */
> -int kmstest_pipe_to_index(char pipe)
> -{
> - int r = pipe - 'A';
> -
> - if (r < 0 || r >= IGT_MAX_PIPES)
> - return -EINVAL;
> -
> - return r;
> -}
> -
> /**
> * kmstest_plane_type_name:
> * @plane_type: display plane type
> @@ -1318,7 +1302,7 @@ void kmstest_dump_mode(drmModeModeInfo *mode)
> static int __intel_get_pipe_from_crtc_index(int fd, int crtc_index)
> {
> char buf[2];
> - int debugfs_fd, res = 0;
> + int debugfs_fd, pipe, res = 0;
> char pipe_char;
>
> debugfs_fd = igt_debugfs_pipe_dir(fd, crtc_index, O_RDONLY);
> @@ -1332,7 +1316,11 @@ static int __intel_get_pipe_from_crtc_index(int fd, int crtc_index)
>
> igt_assert_eq(sscanf(buf, "%c", &pipe_char), 1);
>
> - return kmstest_pipe_to_index(pipe_char);
> + pipe = pipe_char - 'A';
> +
> + igt_assert_f(pipe >= 0 && pipe < IGT_MAX_PIPES, "i915_pipe %c out of range\n", pipe_char);
> +
> + return pipe;
> }
>
> /**
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index d25c166eba4a..a3b3d578f16d 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -90,7 +90,6 @@ enum pipe {
> IGT_MAX_PIPES
> };
> const char *kmstest_pipe_name(enum pipe pipe);
> -int kmstest_pipe_to_index(char pipe);
> const char *kmstest_plane_type_name(int plane_type);
>
> enum port {
> diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
> index 8ed6113205f6..3f61f72f772b 100644
> --- a/tests/kms_setmode.c
> +++ b/tests/kms_setmode.c
> @@ -354,6 +354,7 @@ static void setup_crtcs(const struct test_config *tconf,
> resources->crtcs[crtc->crtc_idx]);
> crtc->crtc_id = drm_crtc->crtc_id;
> drmModeFreeCrtc(drm_crtc);
> + /* FIXME: The test functionally uses this as CRTC index, not pipe */
Argh, I git commit -a'd this hunk into the wrong patch. Was supposed to
be patch 1.
> crtc->pipe_id = kmstest_get_crtc_index_from_id(drm_fd, crtc->crtc_id);
>
> crtc->connector_count = 1;
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 6+ messages in thread
* ✗ Fi.CI.BUILD: failure for lib/igt_kms: pipe vs CRTC index cleanups
2026-01-20 10:54 [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups Jani Nikula
` (2 preceding siblings ...)
2026-01-20 10:54 ` [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index() Jani Nikula
@ 2026-01-20 18:12 ` Patchwork
3 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2026-01-20 18:12 UTC (permalink / raw)
To: Jani Nikula; +Cc: igt-dev
== Series Details ==
Series: lib/igt_kms: pipe vs CRTC index cleanups
URL : https://patchwork.freedesktop.org/series/160345/
State : failure
== Summary ==
Applying: lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id()
Using index info to reconstruct a base tree...
M lib/igt_kms.c
M lib/igt_kms.h
M tests/kms_async_flips.c
Falling back to patching base and 3-way merge...
Auto-merging tests/kms_async_flips.c
CONFLICT (content): Merge conflict in tests/kms_async_flips.c
Auto-merging lib/igt_kms.h
Auto-merging lib/igt_kms.c
Patch failed at 0001 lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id()
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-01-20 18:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-20 10:54 [PATCH i-g-t 0/3] lib/igt_kms: pipe vs CRTC index cleanups Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 1/3] lib/igt_kms: Always return CRTC index from kmstest_get_pipe_from_crtc_id() Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 2/3] lib/igt_kms: Drop the ioctl fallback for CRTC id to pipe mapping Jani Nikula
2026-01-20 10:54 ` [PATCH i-g-t 3/3] lib/igt_kms: Remove kmstest_pipe_to_index() Jani Nikula
2026-01-20 11:21 ` Jani Nikula
2026-01-20 18:12 ` ✗ Fi.CI.BUILD: failure for lib/igt_kms: pipe vs CRTC index cleanups Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox