* Re: [PATCH V4 16/16] xfs: Define max extent length based on on-disk format definition
From: Chandan Babu R @ 2022-01-05 13:51 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220105004706.GT31583@magnolia>
On 05 Jan 2022 at 06:17, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:19PM +0530, Chandan Babu R wrote:
>> The maximum extent length depends on maximum block count that can be stored in
>> a BMBT record. Hence this commit defines MAXEXTLEN based on
>> BMBT_BLOCKCOUNT_BITLEN.
>>
>> While at it, the commit also renames MAXEXTLEN to XFS_MAX_BMBT_EXTLEN.
>>
>> Suggested-by: Darrick J. Wong <djwong@kernel.org>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_alloc.c | 2 +-
>> fs/xfs/libxfs/xfs_bmap.c | 57 +++++++++++++++++-----------------
>> fs/xfs/libxfs/xfs_format.h | 21 +++++++------
>> fs/xfs/libxfs/xfs_inode_buf.c | 4 +--
>> fs/xfs/libxfs/xfs_trans_resv.c | 11 ++++---
>> fs/xfs/scrub/bmap.c | 2 +-
>> fs/xfs/xfs_bmap_util.c | 14 +++++----
>> fs/xfs/xfs_iomap.c | 28 ++++++++---------
>> 8 files changed, 72 insertions(+), 67 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
>> index 353e53b892e6..3f9b9cbfef43 100644
>> --- a/fs/xfs/libxfs/xfs_alloc.c
>> +++ b/fs/xfs/libxfs/xfs_alloc.c
>> @@ -2493,7 +2493,7 @@ __xfs_free_extent_later(
>>
>> ASSERT(bno != NULLFSBLOCK);
>> ASSERT(len > 0);
>> - ASSERT(len <= MAXEXTLEN);
>> + ASSERT(len <= XFS_MAX_BMBT_EXTLEN);
>> ASSERT(!isnullstartblock(bno));
>> agno = XFS_FSB_TO_AGNO(mp, bno);
>> agbno = XFS_FSB_TO_AGBNO(mp, bno);
>
> Yessss another unprefixed constant goes away.
>
> <snip>
>
>> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
>> index 3183f78fe7a3..dd5cffe63be3 100644
>> --- a/fs/xfs/libxfs/xfs_format.h
>> +++ b/fs/xfs/libxfs/xfs_format.h
>> @@ -885,15 +885,6 @@ enum xfs_dinode_fmt {
>> { XFS_DINODE_FMT_BTREE, "btree" }, \
>> { XFS_DINODE_FMT_UUID, "uuid" }
>>
>> -/*
>> - * Max values for extlen, extnum, aextnum.
>> - */
>> -#define MAXEXTLEN ((xfs_extlen_t)0x1fffff) /* 21 bits */
>> -#define XFS_MAX_EXTCNT_DATA_FORK ((xfs_extnum_t)0xffffffffffff) /* Unsigned 48-bits */
>> -#define XFS_MAX_EXTCNT_ATTR_FORK ((xfs_aextnum_t)0xffffffff) /* Unsigned 32-bits */
>> -#define XFS_MAX_EXTCNT_DATA_FORK_OLD ((xfs_extnum_t)0x7fffffff) /* Signed 32-bits */
>> -#define XFS_MAX_EXTCNT_ATTR_FORK_OLD ((xfs_aextnum_t)0x7fff) /* Signed 16-bits */
>> -
>> /*
>> * Inode minimum and maximum sizes.
>> */
>> @@ -1623,7 +1614,17 @@ typedef struct xfs_bmdr_block {
>> #define BMBT_BLOCKCOUNT_BITLEN 21
>>
>> #define BMBT_STARTOFF_MASK ((1ULL << BMBT_STARTOFF_BITLEN) - 1)
>> -#define BMBT_BLOCKCOUNT_MASK ((1ULL << BMBT_BLOCKCOUNT_BITLEN) - 1)
>> +
>> +/*
>> + * Max values for extlen and disk inode's extent counters.
>
> Nit: 'ondisk inode'
>
>
>> + */
>> +#define XFS_MAX_BMBT_EXTLEN ((xfs_extlen_t)(1ULL << BMBT_BLOCKCOUNT_BITLEN) - 1)
>> +#define XFS_MAX_EXTCNT_DATA_FORK ((xfs_extnum_t)0xffffffffffff) /* Unsigned 48-bits */
>> +#define XFS_MAX_EXTCNT_ATTR_FORK ((xfs_aextnum_t)0xffffffff) /* Unsigned 32-bits */
>> +#define XFS_MAX_EXTCNT_DATA_FORK_OLD ((xfs_extnum_t)0x7fffffff) /* Signed 32-bits */
>> +#define XFS_MAX_EXTCNT_ATTR_FORK_OLD ((xfs_aextnum_t)0x7fff) /* Signed 16-bits */
>> +
>> +#define BMBT_BLOCKCOUNT_MASK XFS_MAX_BMBT_EXTLEN
>
> Would this be simpler if XFS_MAX_EXTCNT* stay where they are, and only
> XFS_MAX_BMBT_EXTLEN moves down to be defined as an alias of
> BMBT_BLOCKCOUNT_MASK?
>
Yes, I think so. Also, all the *BMBT* macros defined around the same place
will probably help make the organization better.
--
chandan
^ permalink raw reply
* Re: [PATCH 1/4] RDMA/core: Calculate UDP source port based on flow label or lqpn/rqpn
From: Mark Zhang @ 2022-01-05 13:51 UTC (permalink / raw)
To: yanjun.zhu, liangwenpeng, liweihang, jgg, mustafa.ismail,
shiraz.saleem, zyjzyj2000, linux-rdma
In-Reply-To: <20220105080727.2143737-2-yanjun.zhu@linux.dev>
On 1/5/2022 4:07 PM, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> Calculate and set UDP source port based on the flow label. If flow label
> is not defined in GRH then calculate it based on lqpn/rqpn.
>
> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
> ---
> include/rdma/ib_verbs.h | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
> index 6e9ad656ecb7..2f122aa81f0f 100644
> --- a/include/rdma/ib_verbs.h
> +++ b/include/rdma/ib_verbs.h
> @@ -4749,6 +4749,23 @@ static inline u32 rdma_calc_flow_label(u32 lqpn, u32 rqpn)
> return (u32)(v & IB_GRH_FLOWLABEL_MASK);
> }
>
> +/**
> + * rdma_get_udp_sport - Calculate and set UDP source port based on the flow
> + * label. If flow label is not defined in GRH then
> + * calculate it based on lqpn/rqpn.
> + *
> + * @fl: flow label from GRH
Indent:
+ * @fl: flow label from GRH
> + * @lqpn: local qp number
> + * @rqpn: remote qp number
> + */
> +static inline u16 rdma_get_udp_sport(u32 fl, u32 lqpn, u32 rqpn)
> +{
> + if (!fl)
> + fl = rdma_calc_flow_label(lqpn, rqpn);
> +
> + return rdma_flow_label_to_udp_sport(fl);
> +}
> + > const struct ib_port_immutable*
> ib_port_immutable_read(struct ib_device *dev, unsigned int port);
> #endif /* IB_VERBS_H */
Maybe this and next patch can be squashed into one?
^ permalink raw reply
* Re: [PATCH V4 14/16] xfs: Enable bulkstat ioctl to support 64-bit per-inode extent counters
From: Chandan Babu R @ 2022-01-05 13:50 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220105002819.GQ31583@magnolia>
On 05 Jan 2022 at 05:58, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:17PM +0530, Chandan Babu R wrote:
>> The following changes are made to enable userspace to obtain 64-bit extent
>> counters,
>> 1. Carve out a new 64-bit field xfs_bulkstat->bs_extents64 from
>> xfs_bulkstat->bs_pad[] to hold 64-bit extent counter.
>> 2. Define the new flag XFS_BULK_IREQ_BULKSTAT for userspace to indicate that
>> it is capable of receiving 64-bit extent counters.
>>
>> Suggested-by: Darrick J. Wong <djwong@kernel.org>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_fs.h | 12 ++++++++----
>> fs/xfs/xfs_ioctl.c | 3 +++
>> fs/xfs/xfs_itable.c | 24 +++++++++++++++++++++++-
>> fs/xfs/xfs_itable.h | 2 ++
>> fs/xfs/xfs_iwalk.h | 7 +++++--
>> 5 files changed, 41 insertions(+), 7 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h
>> index 42bc39501d81..4e12530eb518 100644
>> --- a/fs/xfs/libxfs/xfs_fs.h
>> +++ b/fs/xfs/libxfs/xfs_fs.h
>> @@ -393,7 +393,7 @@ struct xfs_bulkstat {
>> uint32_t bs_extsize_blks; /* extent size hint, blocks */
>>
>> uint32_t bs_nlink; /* number of links */
>> - uint32_t bs_extents; /* number of extents */
>> + uint32_t bs_extents; /* 32-bit data fork extent counter */
>> uint32_t bs_aextents; /* attribute number of extents */
>> uint16_t bs_version; /* structure version */
>> uint16_t bs_forkoff; /* inode fork offset in bytes */
>> @@ -402,8 +402,9 @@ struct xfs_bulkstat {
>> uint16_t bs_checked; /* checked inode metadata */
>> uint16_t bs_mode; /* type and mode */
>> uint16_t bs_pad2; /* zeroed */
>> + uint64_t bs_extents64; /* 64-bit data fork extent counter */
>>
>> - uint64_t bs_pad[7]; /* zeroed */
>> + uint64_t bs_pad[6]; /* zeroed */
>> };
>>
>> #define XFS_BULKSTAT_VERSION_V1 (1)
>> @@ -484,8 +485,11 @@ struct xfs_bulk_ireq {
>> */
>> #define XFS_BULK_IREQ_SPECIAL (1 << 1)
>>
>> -#define XFS_BULK_IREQ_FLAGS_ALL (XFS_BULK_IREQ_AGNO | \
>> - XFS_BULK_IREQ_SPECIAL)
>> +#define XFS_BULK_IREQ_NREXT64 (1 << 2)
>> +
>> +#define XFS_BULK_IREQ_FLAGS_ALL (XFS_BULK_IREQ_AGNO | \
>> + XFS_BULK_IREQ_SPECIAL | \
>> + XFS_BULK_IREQ_NREXT64)
>>
>> /* Operate on the root directory inode. */
>> #define XFS_BULK_IREQ_SPECIAL_ROOT (1)
>> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
>> index 174cd8950cb6..d9e9a805b67b 100644
>> --- a/fs/xfs/xfs_ioctl.c
>> +++ b/fs/xfs/xfs_ioctl.c
>> @@ -893,6 +893,9 @@ xfs_bulk_ireq_setup(
>> if (XFS_INO_TO_AGNO(mp, breq->startino) >= mp->m_sb.sb_agcount)
>> return -ECANCELED;
>>
>> + if (hdr->flags & XFS_BULK_IREQ_NREXT64)
>> + breq->flags |= XFS_IBULK_NREXT64;
>> +
>> return 0;
>> }
>>
>> diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
>> index c08c79d9e311..53ec0afebdc9 100644
>> --- a/fs/xfs/xfs_itable.c
>> +++ b/fs/xfs/xfs_itable.c
>> @@ -20,6 +20,7 @@
>> #include "xfs_icache.h"
>> #include "xfs_health.h"
>> #include "xfs_trans.h"
>> +#include "xfs_errortag.h"
>>
>> /*
>> * Bulk Stat
>> @@ -64,6 +65,7 @@ xfs_bulkstat_one_int(
>> struct xfs_inode *ip; /* incore inode pointer */
>> struct inode *inode;
>> struct xfs_bulkstat *buf = bc->buf;
>> + xfs_extnum_t nextents;
>> int error = -EINVAL;
>>
>> if (xfs_internal_inum(mp, ino))
>> @@ -102,7 +104,27 @@ xfs_bulkstat_one_int(
>>
>> buf->bs_xflags = xfs_ip2xflags(ip);
>> buf->bs_extsize_blks = ip->i_extsize;
>> - buf->bs_extents = xfs_ifork_nextents(&ip->i_df);
>> +
>> + nextents = xfs_ifork_nextents(&ip->i_df);
>> + if (!(bc->breq->flags & XFS_IBULK_NREXT64)) {
>> + xfs_extnum_t max_nextents = XFS_MAX_EXTCNT_DATA_FORK_OLD;
>> +
>> + if (unlikely(XFS_TEST_ERROR(false, mp,
>> + XFS_ERRTAG_REDUCE_MAX_IEXTENTS)))
>> + max_nextents = 10;
>> +
>> + if (nextents > max_nextents) {
>> + xfs_iunlock(ip, XFS_ILOCK_SHARED);
>> + xfs_irele(ip);
>> + error = -EOVERFLOW;
>> + goto out;
>> + }
>> +
>> + buf->bs_extents = nextents;
>> + } else {
>> + buf->bs_extents64 = nextents;
>> + }
>> +
>> xfs_bulkstat_health(ip, buf);
>> buf->bs_aextents = xfs_ifork_nextents(ip->i_afp);
>> buf->bs_forkoff = XFS_IFORK_BOFF(ip);
>> diff --git a/fs/xfs/xfs_itable.h b/fs/xfs/xfs_itable.h
>> index 7078d10c9b12..a561acd95383 100644
>> --- a/fs/xfs/xfs_itable.h
>> +++ b/fs/xfs/xfs_itable.h
>> @@ -19,6 +19,8 @@ struct xfs_ibulk {
>> /* Only iterate within the same AG as startino */
>> #define XFS_IBULK_SAME_AG (XFS_IWALK_SAME_AG)
>>
>> +#define XFS_IBULK_NREXT64 (XFS_IWALK_NREXT64)
>> +
>> /*
>> * Advance the user buffer pointer by one record of the given size. If the
>> * buffer is now full, return the appropriate error code.
>> diff --git a/fs/xfs/xfs_iwalk.h b/fs/xfs/xfs_iwalk.h
>> index 37a795f03267..11be9dbb45c7 100644
>> --- a/fs/xfs/xfs_iwalk.h
>> +++ b/fs/xfs/xfs_iwalk.h
>> @@ -26,9 +26,12 @@ int xfs_iwalk_threaded(struct xfs_mount *mp, xfs_ino_t startino,
>> unsigned int inode_records, bool poll, void *data);
>>
>> /* Only iterate inodes within the same AG as @startino. */
>> -#define XFS_IWALK_SAME_AG (0x1)
>> +#define XFS_IWALK_SAME_AG (1 << 0)
>>
>> -#define XFS_IWALK_FLAGS_ALL (XFS_IWALK_SAME_AG)
>> +#define XFS_IWALK_NREXT64 (1 << 1)
>
> The ability of the caller to handle 64-bit extent counters is not
> relevant to the internal inode walking code, so I don't think this
> belongs in the iwalk flags namespace.
>
> IOWs, XFS_IBULK_NREXT64 should be defined like this:
>
> #define XFS_IBULK_NREXT64 (1U << 31)
>
> and xfs_bulkstat should be changed to translate only the relevant
> breq->flags into the appropriate IWALK bits. Sorry for the code
> smell...
Ok. I will incorporate this review comment in the next revision of the
patchset..
>
> --D
>
>> +
>> +#define XFS_IWALK_FLAGS_ALL (XFS_IWALK_SAME_AG | \
>> + XFS_IWALK_NREXT64)
>>
>> /* Walk all inode btree records in the filesystem starting from @startino. */
>> typedef int (*xfs_inobt_walk_fn)(struct xfs_mount *mp, struct xfs_trans *tp,
>> --
>> 2.30.2
>>
--
chandan
^ permalink raw reply
* [Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915: stop including i915_irq.h from i915_drv.h
From: Patchwork @ 2022-01-05 13:50 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
In-Reply-To: <20220105102131.988791-1-jani.nikula@intel.com>
[-- Attachment #1: Type: text/plain, Size: 30274 bytes --]
== Series Details ==
Series: drm/i915: stop including i915_irq.h from i915_drv.h
URL : https://patchwork.freedesktop.org/series/98500/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_11047_full -> Patchwork_21926_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_21926_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_21926_full, please notify your bug team to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_21926_full:
### IGT changes ###
#### Possible regressions ####
* igt@gem_workarounds@suspend-resume-fd:
- shard-skl: [PASS][1] -> [INCOMPLETE][2] +1 similar issue
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl4/igt@gem_workarounds@suspend-resume-fd.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@gem_workarounds@suspend-resume-fd.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@gem_mmap_gtt@basic-copy:
- {shard-dg1}: NOTRUN -> [SKIP][3] +3 similar issues
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-dg1-19/igt@gem_mmap_gtt@basic-copy.html
* igt@i915_pm_rps@min-max-config-loaded:
- {shard-dg1}: [FAIL][4] ([i915#4032]) -> [FAIL][5]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-dg1-13/igt@i915_pm_rps@min-max-config-loaded.html
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-dg1-13/igt@i915_pm_rps@min-max-config-loaded.html
* igt@testdisplay:
- {shard-tglu}: [PASS][6] -> [DMESG-WARN][7]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglu-1/igt@testdisplay.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglu-8/igt@testdisplay.html
Known issues
------------
Here are the changes found in Patchwork_21926_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_create@create-massive:
- shard-tglb: NOTRUN -> [DMESG-WARN][8] ([i915#3002])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@gem_create@create-massive.html
* igt@gem_ctx_isolation@preservation-s3@vcs0:
- shard-kbl: NOTRUN -> [DMESG-WARN][9] ([i915#180]) +4 similar issues
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@gem_ctx_isolation@preservation-s3@vcs0.html
* igt@gem_eio@in-flight-contexts-immediate:
- shard-tglb: [PASS][10] -> [TIMEOUT][11] ([i915#3063]) +1 similar issue
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglb7/igt@gem_eio@in-flight-contexts-immediate.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb2/igt@gem_eio@in-flight-contexts-immediate.html
* igt@gem_exec_fair@basic-flow@rcs0:
- shard-skl: NOTRUN -> [SKIP][12] ([fdo#109271]) +145 similar issues
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@gem_exec_fair@basic-flow@rcs0.html
- shard-tglb: [PASS][13] -> [FAIL][14] ([i915#2842])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglb1/igt@gem_exec_fair@basic-flow@rcs0.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb2/igt@gem_exec_fair@basic-flow@rcs0.html
* igt@gem_exec_fair@basic-none@vcs0:
- shard-apl: [PASS][15] -> [FAIL][16] ([i915#2842])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-apl4/igt@gem_exec_fair@basic-none@vcs0.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl2/igt@gem_exec_fair@basic-none@vcs0.html
* igt@gem_exec_fair@basic-none@vecs0:
- shard-kbl: [PASS][17] -> [FAIL][18] ([i915#2842])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-kbl1/igt@gem_exec_fair@basic-none@vecs0.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@gem_exec_fair@basic-none@vecs0.html
* igt@gem_exec_fair@basic-pace@rcs0:
- shard-kbl: NOTRUN -> [FAIL][19] ([i915#2842])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@gem_exec_fair@basic-pace@rcs0.html
* igt@gem_exec_fair@basic-throttle@rcs0:
- shard-iclb: [PASS][20] -> [FAIL][21] ([i915#2849])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb5/igt@gem_exec_fair@basic-throttle@rcs0.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb7/igt@gem_exec_fair@basic-throttle@rcs0.html
* igt@gem_huc_copy@huc-copy:
- shard-tglb: [PASS][22] -> [SKIP][23] ([i915#2190])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglb1/igt@gem_huc_copy@huc-copy.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb6/igt@gem_huc_copy@huc-copy.html
* igt@gem_lmem_swapping@parallel-random:
- shard-apl: NOTRUN -> [SKIP][24] ([fdo#109271] / [i915#4613])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@gem_lmem_swapping@parallel-random.html
* igt@gem_lmem_swapping@parallel-random-verify:
- shard-kbl: NOTRUN -> [SKIP][25] ([fdo#109271] / [i915#4613]) +3 similar issues
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@gem_lmem_swapping@parallel-random-verify.html
* igt@gem_lmem_swapping@random:
- shard-skl: NOTRUN -> [SKIP][26] ([fdo#109271] / [i915#4613])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl8/igt@gem_lmem_swapping@random.html
* igt@gem_lmem_swapping@smem-oom:
- shard-tglb: NOTRUN -> [SKIP][27] ([i915#4613])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@gem_lmem_swapping@smem-oom.html
* igt@gem_pread@exhaustion:
- shard-skl: NOTRUN -> [WARN][28] ([i915#2658])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl9/igt@gem_pread@exhaustion.html
* igt@gem_softpin@noreloc-s3:
- shard-snb: [PASS][29] -> [SKIP][30] ([fdo#109271])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-snb2/igt@gem_softpin@noreloc-s3.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-snb6/igt@gem_softpin@noreloc-s3.html
* igt@gem_userptr_blits@input-checking:
- shard-skl: NOTRUN -> [DMESG-WARN][31] ([i915#3002]) +1 similar issue
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@gem_userptr_blits@input-checking.html
* igt@gem_userptr_blits@vma-merge:
- shard-skl: NOTRUN -> [FAIL][32] ([i915#3318])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl10/igt@gem_userptr_blits@vma-merge.html
* igt@gen9_exec_parse@allowed-all:
- shard-glk: [PASS][33] -> [DMESG-WARN][34] ([i915#1436] / [i915#716])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-glk2/igt@gen9_exec_parse@allowed-all.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-glk7/igt@gen9_exec_parse@allowed-all.html
* igt@i915_pm_dc@dc6-dpms:
- shard-iclb: [PASS][35] -> [FAIL][36] ([i915#454])
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb6/igt@i915_pm_dc@dc6-dpms.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb3/igt@i915_pm_dc@dc6-dpms.html
- shard-kbl: NOTRUN -> [FAIL][37] ([i915#454])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@i915_pm_dc@dc6-dpms.html
* igt@i915_suspend@debugfs-reader:
- shard-apl: [PASS][38] -> [DMESG-WARN][39] ([i915#180]) +1 similar issue
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-apl4/igt@i915_suspend@debugfs-reader.html
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl2/igt@i915_suspend@debugfs-reader.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-skl: NOTRUN -> [FAIL][40] ([i915#3763])
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl1/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
- shard-glk: [PASS][41] -> [DMESG-WARN][42] ([i915#118])
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-glk3/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-glk6/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
- shard-apl: NOTRUN -> [SKIP][43] ([fdo#109271] / [i915#3777])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
- shard-kbl: NOTRUN -> [SKIP][44] ([fdo#109271] / [i915#3777])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl4/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-skl: NOTRUN -> [FAIL][45] ([i915#3743]) +2 similar issues
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_ccs@pipe-a-bad-rotation-90-y_tiled_gen12_rc_ccs_cc:
- shard-kbl: NOTRUN -> [SKIP][46] ([fdo#109271] / [i915#3886]) +7 similar issues
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@kms_ccs@pipe-a-bad-rotation-90-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
- shard-apl: NOTRUN -> [SKIP][47] ([fdo#109271] / [i915#3886]) +5 similar issues
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl2/igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs:
- shard-skl: NOTRUN -> [SKIP][48] ([fdo#109271] / [i915#3886]) +7 similar issues
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl1/igt@kms_ccs@pipe-c-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs.html
* igt@kms_chamelium@dp-hpd-storm-disable:
- shard-apl: NOTRUN -> [SKIP][49] ([fdo#109271] / [fdo#111827]) +8 similar issues
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@kms_chamelium@dp-hpd-storm-disable.html
* igt@kms_color_chamelium@pipe-a-ctm-blue-to-red:
- shard-kbl: NOTRUN -> [SKIP][50] ([fdo#109271] / [fdo#111827]) +14 similar issues
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@kms_color_chamelium@pipe-a-ctm-blue-to-red.html
* igt@kms_color_chamelium@pipe-b-ctm-max:
- shard-skl: NOTRUN -> [SKIP][51] ([fdo#109271] / [fdo#111827]) +10 similar issues
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl8/igt@kms_color_chamelium@pipe-b-ctm-max.html
* igt@kms_content_protection@atomic-dpms:
- shard-apl: NOTRUN -> [TIMEOUT][52] ([i915#1319])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@kms_content_protection@atomic-dpms.html
* igt@kms_cursor_crc@pipe-d-cursor-512x170-random:
- shard-tglb: NOTRUN -> [SKIP][53] ([fdo#109279] / [i915#3359])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@kms_cursor_crc@pipe-d-cursor-512x170-random.html
* igt@kms_cursor_legacy@2x-cursor-vs-flip-atomic:
- shard-tglb: NOTRUN -> [SKIP][54] ([fdo#109274] / [fdo#111825])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@kms_cursor_legacy@2x-cursor-vs-flip-atomic.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-skl: [PASS][55] -> [FAIL][56] ([i915#2346] / [i915#533])
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl7/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_fbcon_fbt@fbc-suspend:
- shard-apl: [PASS][57] -> [INCOMPLETE][58] ([i915#180] / [i915#1982])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-apl7/igt@kms_fbcon_fbt@fbc-suspend.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl6/igt@kms_fbcon_fbt@fbc-suspend.html
* igt@kms_flip@flip-vs-suspend-interruptible@c-dp1:
- shard-kbl: NOTRUN -> [INCOMPLETE][59] ([i915#636])
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html
* igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1:
- shard-skl: [PASS][60] -> [FAIL][61] ([i915#2122])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl6/igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1.html
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl5/igt@kms_flip@plain-flip-ts-check-interruptible@b-edp1.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt:
- shard-kbl: NOTRUN -> [SKIP][62] ([fdo#109271]) +168 similar issues
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-tglb: NOTRUN -> [SKIP][63] ([fdo#109280] / [fdo#111825]) +1 similar issue
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_hdr@bpc-switch:
- shard-skl: [PASS][64] -> [FAIL][65] ([i915#1188])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl4/igt@kms_hdr@bpc-switch.html
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl8/igt@kms_hdr@bpc-switch.html
* igt@kms_pipe_crc_basic@disable-crc-after-crtc-pipe-d:
- shard-apl: NOTRUN -> [SKIP][66] ([fdo#109271] / [i915#533])
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@kms_pipe_crc_basic@disable-crc-after-crtc-pipe-d.html
- shard-kbl: NOTRUN -> [SKIP][67] ([fdo#109271] / [i915#533]) +1 similar issue
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl4/igt@kms_pipe_crc_basic@disable-crc-after-crtc-pipe-d.html
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
- shard-kbl: [PASS][68] -> [DMESG-WARN][69] ([i915#180]) +2 similar issues
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-kbl3/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html
* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d:
- shard-skl: NOTRUN -> [SKIP][70] ([fdo#109271] / [i915#533])
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-d.html
* igt@kms_plane_alpha_blend@pipe-a-alpha-7efc:
- shard-skl: NOTRUN -> [FAIL][71] ([fdo#108145] / [i915#265]) +1 similar issue
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-alpha-7efc.html
- shard-kbl: NOTRUN -> [FAIL][72] ([fdo#108145] / [i915#265]) +1 similar issue
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@kms_plane_alpha_blend@pipe-a-alpha-7efc.html
* igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
- shard-skl: [PASS][73] -> [FAIL][74] ([fdo#108145] / [i915#265])
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl4/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html
* igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
- shard-apl: NOTRUN -> [SKIP][75] ([fdo#109271] / [i915#658])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl2/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
* igt@kms_psr2_sf@primary-plane-update-sf-dmg-area:
- shard-kbl: NOTRUN -> [SKIP][76] ([fdo#109271] / [i915#658])
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl7/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-skl: NOTRUN -> [SKIP][77] ([fdo#109271] / [i915#658]) +1 similar issue
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl4/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@psr2_sprite_blt:
- shard-iclb: [PASS][78] -> [SKIP][79] ([fdo#109441])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb8/igt@kms_psr@psr2_sprite_blt.html
* igt@kms_vblank@pipe-d-ts-continuation-idle:
- shard-apl: NOTRUN -> [SKIP][80] ([fdo#109271]) +121 similar issues
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl2/igt@kms_vblank@pipe-d-ts-continuation-idle.html
* igt@kms_writeback@writeback-fb-id:
- shard-kbl: NOTRUN -> [SKIP][81] ([fdo#109271] / [i915#2437]) +1 similar issue
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl1/igt@kms_writeback@writeback-fb-id.html
* igt@kms_writeback@writeback-invalid-parameters:
- shard-apl: NOTRUN -> [SKIP][82] ([fdo#109271] / [i915#2437])
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl1/igt@kms_writeback@writeback-invalid-parameters.html
* igt@kms_writeback@writeback-pixel-formats:
- shard-skl: NOTRUN -> [SKIP][83] ([fdo#109271] / [i915#2437])
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl8/igt@kms_writeback@writeback-pixel-formats.html
* igt@nouveau_crc@pipe-b-ctx-flip-detection:
- shard-tglb: NOTRUN -> [SKIP][84] ([i915#2530])
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb1/igt@nouveau_crc@pipe-b-ctx-flip-detection.html
* igt@sysfs_clients@fair-1:
- shard-skl: NOTRUN -> [SKIP][85] ([fdo#109271] / [i915#2994])
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@sysfs_clients@fair-1.html
* igt@sysfs_clients@recycle-many:
- shard-kbl: NOTRUN -> [SKIP][86] ([fdo#109271] / [i915#2994]) +1 similar issue
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl1/igt@sysfs_clients@recycle-many.html
* igt@sysfs_clients@split-10:
- shard-apl: NOTRUN -> [SKIP][87] ([fdo#109271] / [i915#2994])
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl6/igt@sysfs_clients@split-10.html
#### Possible fixes ####
* igt@drm_read@empty-block:
- {shard-rkl}: [SKIP][88] ([i915#1845]) -> [PASS][89] +8 similar issues
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-5/igt@drm_read@empty-block.html
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@drm_read@empty-block.html
* igt@feature_discovery@psr2:
- {shard-rkl}: [SKIP][90] ([i915#658]) -> [PASS][91]
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@feature_discovery@psr2.html
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@feature_discovery@psr2.html
* igt@gem_ctx_shared@detached-shared-gtt:
- {shard-rkl}: [INCOMPLETE][92] -> [PASS][93] +1 similar issue
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-5/igt@gem_ctx_shared@detached-shared-gtt.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@gem_ctx_shared@detached-shared-gtt.html
* igt@gem_eio@in-flight-contexts-10ms:
- shard-skl: [TIMEOUT][94] ([i915#3063]) -> [PASS][95]
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl4/igt@gem_eio@in-flight-contexts-10ms.html
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@gem_eio@in-flight-contexts-10ms.html
* igt@gem_eio@kms:
- shard-tglb: [FAIL][96] ([i915#232]) -> [PASS][97]
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglb8/igt@gem_eio@kms.html
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb6/igt@gem_eio@kms.html
* igt@gem_eio@unwedge-stress:
- shard-iclb: [TIMEOUT][98] ([i915#2481] / [i915#3070]) -> [PASS][99]
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb2/igt@gem_eio@unwedge-stress.html
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb1/igt@gem_eio@unwedge-stress.html
* igt@gem_exec_balancer@bonded-pair:
- {shard-tglu}: [FAIL][100] ([i915#1888]) -> [PASS][101] +1 similar issue
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglu-1/igt@gem_exec_balancer@bonded-pair.html
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglu-3/igt@gem_exec_balancer@bonded-pair.html
* igt@gem_exec_balancer@parallel-out-fence:
- shard-iclb: [SKIP][102] ([i915#4525]) -> [PASS][103] +2 similar issues
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb8/igt@gem_exec_balancer@parallel-out-fence.html
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb2/igt@gem_exec_balancer@parallel-out-fence.html
* igt@gem_exec_fair@basic-none@rcs0:
- shard-glk: [FAIL][104] ([i915#2842]) -> [PASS][105]
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-glk8/igt@gem_exec_fair@basic-none@rcs0.html
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-glk5/igt@gem_exec_fair@basic-none@rcs0.html
* igt@gem_exec_fair@basic-none@vcs0:
- shard-kbl: [FAIL][106] ([i915#2842]) -> [PASS][107] +2 similar issues
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-kbl1/igt@gem_exec_fair@basic-none@vcs0.html
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-kbl3/igt@gem_exec_fair@basic-none@vcs0.html
* igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-tglb: [FAIL][108] ([i915#2842]) -> [PASS][109]
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglb6/igt@gem_exec_fair@basic-pace-share@rcs0.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglb7/igt@gem_exec_fair@basic-pace-share@rcs0.html
* igt@gem_exec_whisper@basic-contexts-priority:
- {shard-rkl}: [DMESG-FAIL][110] -> [PASS][111]
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-5/igt@gem_exec_whisper@basic-contexts-priority.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-5/igt@gem_exec_whisper@basic-contexts-priority.html
* igt@gem_exec_whisper@basic-queues-priority-all:
- shard-glk: [DMESG-WARN][112] ([i915#118]) -> [PASS][113] +1 similar issue
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-glk7/igt@gem_exec_whisper@basic-queues-priority-all.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-glk5/igt@gem_exec_whisper@basic-queues-priority-all.html
* igt@gem_ppgtt@blt-vs-render-ctxn:
- {shard-tglu}: [INCOMPLETE][114] ([i915#750]) -> [PASS][115] +1 similar issue
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglu-7/igt@gem_ppgtt@blt-vs-render-ctxn.html
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglu-5/igt@gem_ppgtt@blt-vs-render-ctxn.html
* igt@gem_workarounds@suspend-resume-context:
- shard-apl: [DMESG-WARN][116] ([i915#180]) -> [PASS][117] +4 similar issues
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-apl3/igt@gem_workarounds@suspend-resume-context.html
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-apl6/igt@gem_workarounds@suspend-resume-context.html
* igt@gen9_exec_parse@allowed-single:
- shard-skl: [DMESG-WARN][118] ([i915#1436] / [i915#716]) -> [PASS][119]
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl6/igt@gen9_exec_parse@allowed-single.html
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl6/igt@gen9_exec_parse@allowed-single.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-skl: [DMESG-WARN][120] ([i915#1982]) -> [PASS][121]
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-skl8/igt@i915_module_load@reload-with-fault-injection.html
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-skl10/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_dc@dc9-dpms:
- shard-iclb: [SKIP][122] ([i915#4281]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb1/igt@i915_pm_dc@dc9-dpms.html
* igt@i915_pm_rc6_residency@rc6-fence:
- {shard-tglu}: [WARN][124] ([i915#2681]) -> [PASS][125]
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-tglu-1/igt@i915_pm_rc6_residency@rc6-fence.html
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-tglu-6/igt@i915_pm_rc6_residency@rc6-fence.html
* igt@i915_pm_rpm@dpms-mode-unset-lpsp:
- {shard-rkl}: [SKIP][126] ([i915#1397]) -> [PASS][127]
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_ccs@pipe-a-bad-rotation-90-y_tiled_gen12_rc_ccs:
- {shard-rkl}: [SKIP][128] ([i915#1845] / [i915#4098]) -> [PASS][129] +1 similar issue
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_ccs@pipe-a-bad-rotation-90-y_tiled_gen12_rc_ccs.html
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_ccs@pipe-a-bad-rotation-90-y_tiled_gen12_rc_ccs.html
* igt@kms_color@pipe-a-ctm-max:
- {shard-rkl}: [SKIP][130] ([i915#1149] / [i915#1849]) -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-5/igt@kms_color@pipe-a-ctm-max.html
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_color@pipe-a-ctm-max.html
* igt@kms_color@pipe-a-legacy-gamma:
- {shard-rkl}: [SKIP][132] ([i915#1849] / [i915#4070]) -> [PASS][133] +1 similar issue
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_color@pipe-a-legacy-gamma.html
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_color@pipe-a-legacy-gamma.html
* igt@kms_cursor_crc@pipe-a-cursor-128x128-rapid-movement:
- {shard-rkl}: [SKIP][134] ([fdo#112022] / [i915#4070]) -> [PASS][135] +1 similar issue
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_cursor_crc@pipe-a-cursor-128x128-rapid-movement.html
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_cursor_crc@pipe-a-cursor-128x128-rapid-movement.html
* igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
- {shard-rkl}: [SKIP][136] ([fdo#111825] / [i915#4070]) -> [PASS][137]
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
* igt@kms_cursor_legacy@cursora-vs-flipa-legacy:
- {shard-rkl}: ([SKIP][138], [SKIP][139]) ([fdo#111825] / [i915#4070]) -> [PASS][140]
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-4/igt@kms_cursor_legacy@cursora-vs-flipa-legacy.html
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipa-legacy.html
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipa-legacy.html
* igt@kms_cursor_legacy@flip-vs-cursor-toggle:
- shard-iclb: [FAIL][141] ([i915#2346]) -> [PASS][142] +1 similar issue
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-iclb7/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-iclb5/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html
* igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-xtiled:
- {shard-rkl}: [SKIP][143] ([fdo#111314]) -> [PASS][144] +1 similar issue
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11047/shard-rkl-1/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-xtiled.html
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/shard-rkl-6/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-xtiled.html
* igt@kms_flip@basic-flip-vs-wf_vblank@a-edp1:
- shar
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21926/index.html
[-- Attachment #2: Type: text/html, Size: 33431 bytes --]
^ permalink raw reply
* Re: [PATCH V4 13/16] xfs: Conditionally upgrade existing inodes to use 64-bit extent counters
From: Chandan Babu R @ 2022-01-05 13:49 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220105001806.GP31583@magnolia>
On 05 Jan 2022 at 05:48, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:16PM +0530, Chandan Babu R wrote:
>> This commit upgrades inodes to use 64-bit extent counters when they are read
>> from disk. Inodes are upgraded only when the filesystem instance has
>> XFS_SB_FEAT_INCOMPAT_NREXT64 incompat flag set.
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_inode_buf.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
>> index fe21e9808f80..b8e4e1f69989 100644
>> --- a/fs/xfs/libxfs/xfs_inode_buf.c
>> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
>> @@ -253,6 +253,12 @@ xfs_inode_from_disk(
>> }
>> if (xfs_is_reflink_inode(ip))
>> xfs_ifork_init_cow(ip);
>> +
>> + if ((from->di_version == 3) &&
>> + xfs_has_nrext64(ip->i_mount) &&
>> + !xfs_dinode_has_nrext64(from))
>> + ip->i_diflags2 |= XFS_DIFLAG2_NREXT64;
>
> The indentation levels of the if test should not be aligned with the if
> body, and this should be in xfs_trans_log_inode so that the metadata
> update is staged properly with a transaction. V3 did it this way, so
> I'm a little surprised to see V4 regressing that...?
The following is the thought process behind upgrading an inode to
XFS_DIFLAG2_NREXT64 when it is read from the disk,
1. With support for dynamic upgrade, The extent count limits of an inode needs
to be determined by checking flags present within the inode i.e. we need to
satisfy self-describing metadata property. This helps tools like xfs_repair
and scrub to verify inode's extent count limits without having to refer to
other metadata objects (e.g. superblock feature flags).
2. Upgrade when performed inside xfs_trans_log_inode() may cause
xfs_iext_count_may_overflow() to return -EFBIG when the inode's data/attr
extent count is already close to 2^31/2^15 respectively. Hence none of the
file operations will be able to add new extents to a file.
--
chandan
^ permalink raw reply
* Re: [Buildroot] candidate packages : ros2 and wxwidgets
From: Thierry Bultel @ 2022-01-05 13:49 UTC (permalink / raw)
To: buildroot
In-Reply-To: <5d0600a1-eb8c-8d69-cf9a-fee4fbca0c73@smile.fr>
> We also have some companies interested by ROS2 but they are using meta-ros Yocto
> layer.
>
That would be therefore of less interest to them, unless they are
thinking of
switching to buildroot.
In my case, I rather see companies that just start to enter in "the
embedded world" but already use ROS(1/2) on desktops,
so it is still not to late for them to make the good choice.
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply
* Re: [PATCH honister 0/1] arm-bsp/secure-partitions: add check for null attribute field
From: Jon Mason @ 2022-01-05 13:48 UTC (permalink / raw)
To: meta-arm, Ross.Burton, gowtham.sureshkumar@arm.com; +Cc: nd
In-Reply-To: <20220104172345.22414-1-gowtham.sureshkumar@arm.com>
On Tue, 4 Jan 2022 17:23:44 +0000, gowtham.sureshkumar@arm.com wrote:
> UEFI spec says that if 0 is passed in the attributes filed in
> setVariable() API, it means that it's a delete variable call.
> Currently smm gateway doesn't handle this case. This change
> is to add above mentioned check.
>
> Vishnu Banavath (1):
> arm-bsp/secure-partitions: add check for null attribute field
>
> [...]
Applied, thanks!
[1/1] arm-bsp/secure-partitions: add check for null attribute field
commit: 15815c7d4989b84607ed1a0e4f75738258d4e296
Best regards,
--
Jon Mason <jon.mason@arm.com>
^ permalink raw reply
* Re: [PATCH honister 0/1] arm-bsp/u-boot: corstone1000: Disable mm_communicate failure log
From: Jon Mason @ 2022-01-05 13:48 UTC (permalink / raw)
To: meta-arm, Ross.Burton, gowtham.sureshkumar@arm.com; +Cc: nd
In-Reply-To: <20220104171503.18533-1-gowtham.sureshkumar@arm.com>
On Tue, 4 Jan 2022 17:15:02 +0000, gowtham.sureshkumar@arm.com wrote:
> When a getVariable() call is made with data size set to 0,
> mm_communicate should return EFI_BUFFER_TOO_SMALL. This is
> an expected behavior. There should not be any failure logs
> in this case. So the error log is commented here.
>
> Gowtham Suresh Kumar (1):
> arm-bsp/u-boot: corstone1000: Disable mm_communicate failure log
>
> [...]
Applied, thanks!
[1/1] arm-bsp/u-boot: corstone1000: Disable mm_communicate failure log
commit: 3d1183ab54317118b965ffd10bafa2651bb1da70
Best regards,
--
Jon Mason <jon.mason@arm.com>
^ permalink raw reply
* Re: [PATCH bpf-next 2/2] perf: stop using deprecated bpf__object_next() API
From: Jiri Olsa @ 2022-01-05 13:49 UTC (permalink / raw)
To: Christy Lee
Cc: Andrii Nakryiko, Christy Lee, Andrii Nakryiko,
Arnaldo Carvalho de Melo, bpf, linux-perf-use., Kernel Team,
He Kuang, Wang Nan, Wang ShaoBo, YueHaibing
In-Reply-To: <YdRccTaunl9Fo63X@krava>
On Tue, Jan 04, 2022 at 03:40:49PM +0100, Jiri Olsa wrote:
> On Wed, Dec 29, 2021 at 11:01:35AM -0800, Christy Lee wrote:
>
> SNIP
>
> > > >
> > > > I don't use it, I just know it's there.. that's why I asked ;-)
> > > >
> > > > it's possible to specify bpf program on the perf command line
> > > > to be attached to event, like:
> > > >
> > > > # cat tools/perf/examples/bpf/hello.c
> > > > #include <stdio.h>
> > > >
> > > > int syscall_enter(openat)(void *args)
> > > > {
> > > > puts("Hello, world\n");
> > > > return 0;
> > > > }
> > > >
> > > > license(GPL);
> > > > #
> > > > # perf trace -e openat,tools/perf/examples/bpf/hello.c cat /etc/passwd > /dev/null
> > > > 0.016 ( ): __bpf_stdout__:Hello, world
> > > > 0.018 ( 0.010 ms): cat/9079 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC) = 3
> > > > 0.057 ( ): __bpf_stdout__:Hello, world
> > > > 0.059 ( 0.011 ms): cat/9079 openat(dfd: CWD, filename: /lib64/libc.so.6, flags: CLOEXEC) = 3
> > > > 0.417 ( ): __bpf_stdout__:Hello, world
> > > > 0.419 ( 0.009 ms): cat/9079 openat(dfd: CWD, filename: /etc/passwd) = 3
> > > > #
> > > >
> > > > I took that example from commit message
> > [...]
> >
> > I found the original commit aa3abf30bb28addcf593578d37447d42e3f65fc3
> > that included a test case, but I'm having trouble reproducing it due to syntax
> > error. I am running this on bpf-next master without my patches.
> >
> > I ran 'perf test -v LLVM' and used it's output to generate a script for
> > compiling the perf test object:
> >
> > --------------------------------------------------
> > $ cat ~/bin/hello-ebpf
> > INPUT_FILE=/tmp/test.c
> > OUTPUT_FILE=/tmp/test.o
> >
> > export KBUILD_DIR=/lib/modules/5.12.0-0_fbk2_3390_g7ecb4ac46d7f/build
> > export NR_CPUS=56
> > export LINUX_VERSION_CODE=0x50c00
> > export CLANG_EXEC=/data/users/christylee/devtools/llvm/latest/bin/clang
> > export CLANG_OPTIONS=-xc
> > export KERNEL_INC_OPTIONS="-nostdinc -isystem
> > /data/users/christylee/devtools/gcc/10.3.0/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include
> > -I./arch/\
> > x86/include -I./arch/x86/include/generated -I./include
> > -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi
> > -I./include/uapi -I./in\
> > clude/generated/uapi -include ./include/linux/compiler-version.h
> > -include ./include/linux/kconfig.h"
> > export PERF_BPF_INC_OPTIONS=-I/home/christylee/lib/perf/include/bpf
> > export WORKING_DIR=/lib/modules/5.12.0-0_fbk2_3390_g7ecb4ac46d7f/build
> > export CLANG_SOURCE=-
> >
> > rm -f $OUTPUT_FILE
> > cat $INPUT_FILE |
> > /data/users/christylee/devtools/llvm/latest/bin/clang -D__KERNEL__
> > -D__NR_CPUS__=56 -DLINUX_VERSION_CODE=0x50c00 -xc -I/ho\
> > me/christylee/lib/perf/include/bpf -nostdinc -isystem
> > /data/users/christylee/devtools/gcc/10.3.0/lib/gcc/x86_64-pc-linux-gnu/10.3.0/include
> > \
> > -I./arch/x86/include -I./arch/x86/include/generated -I./include
> > -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi
> > -I./include/ua\
> > pi -I./include/generated/uapi -include
> > ./include/linux/compiler-version.h -include ./include/linux/kconfig.h
> > -Wno-unused-value -Wno-pointer-\
> > sign -working-directory
> > /lib/modules/5.12.0-0_fbk2_3390_g7ecb4ac46d7f/build -c - -target bpf
> > -O2 -o $OUTPUT_FILE
> > --------------------------------------------------
> >
> > I then wrote and compiled a script that ask to get asks to put a probe
> > at a function that
> > does not exists in the kernel, it errors out as expected:
> >
> > $ cat /tmp/test.c
> > __attribute__((section("fork=does_not_exist"), used)) int fork(void *ctx) {
> > return 0;
> > }
> >
> > char _license[] __attribute__((section("license"), used)) = "GPL";
> > int _version __attribute__((section("version"), used)) = 0x40100;
> > $ cd ~/bin && ./hello-ebpf
> > $ perf record --event /tmp/test.o sleep 1
> > Using perf wrapper that supports hot-text. Try perf.real if you
> > encounter any issues.
> > Probe point 'does_not_exist' not found.
> > event syntax error: '/tmp/test.o'
> > \___ You need to check probing points in BPF file
> >
> > (add -v to see detail)
> > Run 'perf list' for a list of valid events
> >
> > Usage: perf record [<options>] [<command>]
> > or: perf record [<options>] -- <command> [<options>]
> >
> > -e, --event <event> event selector. use 'perf list' to list
> > available events
> >
> > ---------------------------------------------------
> >
> > Next I changed the attribute to something that exists in the kernel.
> > As expected, it errors out
> > with permission problem:
> > $ cat /tmp/test.c
> > __attribute__((section("fork=fork_init"), used)) int fork(void *ctx) {
> > return 0;
> > }
> > char _license[] __attribute__((section("license"), used)) = "GPL";
> > int _version __attribute__((section("version"), used)) = 0x40100;
> > $ grep fork_init /proc/kallsyms
> > ffffffff8146e250 T xfs_ifork_init_cow
> > ffffffff83980481 T fork_init
> > $ cd ~/bin && ./hello-ebpf
> > $ perf record --event /tmp/test.o sleep 1
> > Using perf wrapper that supports hot-text. Try perf.real if you
> > encounter any issues.
> > Failed to open kprobe_events: Permission denied
> > event syntax error: '/tmp/test.o'
> > \___ You need to be root
> >
> > (add -v to see detail)
> > Run 'perf list' for a list of valid events
> >
> > Usage: perf record [<options>] [<command>]
> > or: perf record [<options>] -- <command> [<options>]
> >
> > -e, --event <event> event selector. use 'perf list' to list
> > available events
> >
> > ---------------------------------------------------
> >
> > So I reran as root, but this time I get an invalid syntax error:
> >
> > # perf record --event /tmp/test.o -v sleep 1
> > Using perf wrapper that supports hot-text. Try perf.real if you
> > encounter any issues.
> > Failed to write event: Invalid argument
> > event syntax error: '/tmp/test.o'
> > \___ Invalid argument
> >
> > (add -v to see detail)
> > Run 'perf list' for a list of valid events
> >
> > Usage: perf record [<options>] [<command>]
> > or: perf record [<options>] -- <command> [<options>]
> >
> > -e, --event <event> event selector. use 'perf list' to list
> > available events
> > ---------------------------------------------------
> >
> > Is there a different way to attach a custom event probe point?
> >
>
> nice, good question ;-)
>
> looks like there are no volunteers from original authors,
> I'll check on that
there's small bug in perf trace that makes it to die early,
(fix below) but other than that it works.. I'll send full
patch later
you need to specify full path for bpf object, not like in the
example I pasted above.. I recall fixing that in code because
it clashed with pmu syntax
so on fedora 35 I can run following with the change below:
# ./perf trace -e openat,/home/jolsa/linux-qemu/tools/perf/examples/bpf/hello.c
/home/jolsa/linux-qemu/tools/perf/examples/bpf/hello.c:5:2: warning: variable length array folded to constant array as an extension [-Wgnu-folding-constant]
puts("Hello, world\n");
^
/home/jolsa/lib/perf/include/bpf/stdio.h:14:10: note: expanded from macro 'puts'
char __from[__len] = from; \
^
1 warning generated.
0.000 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
0.016 ( 0.031 ms): systemd-resolv/1142 openat(dfd: CWD, filename: 0x6b1c4a70, flags: RDONLY|CLOEXEC) = -1 ENOENT (No such file or directory)
0.070 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
0.074 ( 0.011 ms): systemd-resolv/1142 openat(dfd: CWD, filename: 0x6b1c4a70, flags: RDONLY|CLOEXEC) = -1 ENOENT (No such file or directory)
0.097 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
0.101 ( 0.010 ms): systemd-resolv/1142 openat(dfd: CWD, filename: 0x6b1c4a70, flags: RDONLY|CLOEXEC) = -1 ENOENT (No such file or directory)
0.123 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
0.127 ( 0.010 ms): systemd-resolv/1142 openat(dfd: CWD, filename: 0x6b1c4a70, flags: RDONLY|CLOEXEC) = -1 ENOENT (No such file or directory)
0.148 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
0.152 ( 0.010 ms): systemd-resolv/1142 openat(dfd: CWD, filename: 0x6b1c4a70, flags: RDONLY|CLOEXEC) = -1 ENOENT (No such file or directory)
0.219 ( ): systemd-resolv/1142 __bpf_stdout__(Hello, world)
...
jirka
---
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 97121fb45842..df9fc00b4cd6 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -3936,6 +3936,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
bool draining = false;
trace->live = true;
+ signal(SIGCHLD, sig_handler);
if (!trace->raw_augmented_syscalls) {
if (trace->trace_syscalls && trace__add_syscall_newtp(trace))
@@ -4884,7 +4885,6 @@ int cmd_trace(int argc, const char **argv)
signal(SIGSEGV, sighandler_dump_stack);
signal(SIGFPE, sighandler_dump_stack);
- signal(SIGCHLD, sig_handler);
signal(SIGINT, sig_handler);
trace.evlist = evlist__new();
^ permalink raw reply related
* Re: [PATCH V4 12/16] xfs: Introduce per-inode 64-bit extent counters
From: Chandan Babu R @ 2022-01-05 13:47 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david, Dave Chinner
In-Reply-To: <20220105010415.GH31606@magnolia>
On 05 Jan 2022 at 06:34, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:15PM +0530, Chandan Babu R wrote:
>> This commit introduces new fields in the on-disk inode format to support
>> 64-bit data fork extent counters and 32-bit attribute fork extent
>> counters. The new fields will be used only when an inode has
>> XFS_DIFLAG2_NREXT64 flag set. Otherwise we continue to use the regular 32-bit
>> data fork extent counters and 16-bit attribute fork extent counters.
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> Suggested-by: Dave Chinner <dchinner@redhat.com>
>> ---
>> fs/xfs/libxfs/xfs_format.h | 22 +++++++--
>> fs/xfs/libxfs/xfs_inode_buf.c | 49 ++++++++++++++++++--
>> fs/xfs/libxfs/xfs_inode_fork.h | 10 ++++-
>> fs/xfs/libxfs/xfs_log_format.h | 22 +++++++--
>> fs/xfs/xfs_inode_item.c | 23 ++++++++--
>> fs/xfs/xfs_inode_item_recover.c | 79 ++++++++++++++++++++++++++++-----
>> 6 files changed, 176 insertions(+), 29 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
>> index eff86f6c4c99..2868cec1154d 100644
>> --- a/fs/xfs/libxfs/xfs_format.h
>> +++ b/fs/xfs/libxfs/xfs_format.h
>> @@ -792,16 +792,30 @@ struct xfs_dinode {
>> __be32 di_nlink; /* number of links to file */
>> __be16 di_projid_lo; /* lower part of owner's project id */
>> __be16 di_projid_hi; /* higher part owner's project id */
>> - __u8 di_pad[6]; /* unused, zeroed space */
>> - __be16 di_flushiter; /* incremented on flush */
>> + union {
>> + __be64 di_big_dextcnt; /* NREXT64 data extents */
>
> Hm. I was expecting "__be64 di_big_nextents" and "__be32
> di_big_naextents" but I'm not sure if you're just following what Dave
> suggested back in September or if there's a reason to deviate?
>
Yes, I have followed what Dave had suggested. But I think di_big_n[a]extents
field names are consistent with the existing extent counter field names. I
will fix this up too.
>> + __u8 di_v3_pad[8]; /* !NREXT64 V3 inode zeroed space */
>> + struct {
>> + __u8 di_v2_pad[6]; /* V2 inode zeroed space */
>> + __be16 di_flushiter; /* V2 inode incremented on flush */
>> + };
>> + };
>> xfs_timestamp_t di_atime; /* time last accessed */
>> xfs_timestamp_t di_mtime; /* time last modified */
>> xfs_timestamp_t di_ctime; /* time created/inode modified */
>> __be64 di_size; /* number of bytes in file */
>> __be64 di_nblocks; /* # of direct & btree blocks used */
>> __be32 di_extsize; /* basic/minimum extent size for file */
>> - __be32 di_nextents; /* number of extents in data fork */
>> - __be16 di_anextents; /* number of extents in attribute fork*/
>> + union {
>> + struct {
>> + __be32 di_big_aextcnt; /* NREXT64 attr extents */
>> + __be16 di_nrext64_pad; /* NREXT64 unused, zero */
>> + } __packed;
>> + struct {
>> + __be32 di_nextents; /* !NREXT64 data extents */
>> + __be16 di_anextents; /* !NREXT64 attr extents */
>> + } __packed;
>> + };
>> __u8 di_forkoff; /* attr fork offs, <<3 for 64b align */
>> __s8 di_aformat; /* format of attr fork's data */
>> __be32 di_dmevmask; /* DMIG event mask */
>> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
>> index 34f360a38603..fe21e9808f80 100644
>> --- a/fs/xfs/libxfs/xfs_inode_buf.c
>> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
>> @@ -279,6 +279,25 @@ xfs_inode_to_disk_ts(
>> return ts;
>> }
>>
>> +static inline void
>> +xfs_inode_to_disk_iext_counters(
>> + struct xfs_inode *ip,
>> + struct xfs_dinode *to)
>> +{
>> + if (xfs_inode_has_nrext64(ip)) {
>> + to->di_big_dextcnt = cpu_to_be64(xfs_ifork_nextents(&ip->i_df));
>> + to->di_big_aextcnt = cpu_to_be32(xfs_ifork_nextents(ip->i_afp));
>> + /*
>> + * We might be upgrading the inode to use larger extent counters
>> + * than was previously used. Hence zero the unused field.
>> + */
>> + to->di_nrext64_pad = cpu_to_be16(0);
>
> If you upgrade the inode to DIFLAG_NREXT64 in xfs_trans_log_inode, won't
> zeroing xfs_log_dinode.di_nrext64_pad also clean out the xfs_dinode
> field?
>
In the event where the log tail gets unpinned the corresponding inode item
gets pushed (via xfs_inode_item_push()), the incore inode's contents are then
written to the disk by xfs_inode_to_disk(). At this instance, the ondisk inode
can have a non-zero value at xfs_dinode->di_nrext64_pad since this field maps
to the older 16-bit attr fork extent counter. Hence this field has to be
zeroed out.
> For that matter, what /was/ the resolution of the discussion about how
> log recovery should work w.r.t. changing the nrext64 inode flag? I
> thought that the inode/transaction LSN checks during recovery suffice to
> prevent recovery of pre-change values into a post-change ondisk inode?
>
Yes, The current inode recovery mechanism does prevent overwriting areas of an
upgraded ondisk inode with values from fields belonging to a non-upgraded log
dinode.
The following code snippet from xlog_recover_inode_commit_pass2() skips replay
of xfs_log_dinode entries when ondisk inode's LSN is greater than checkpoint
transaction's LSN,
if (dip->di_version >= 3) {
xfs_lsn_t lsn = be64_to_cpu(dip->di_lsn);
if (lsn && lsn != -1 && XFS_LSN_CMP(lsn, current_lsn) > 0) {
trace_xfs_log_recover_inode_skip(log, in_f);
error = 0;
goto out_owner_change;
}
}
And as Dave had clarified earlier
(https://lore.kernel.org/all/20210916100647.176018-7-chandan.babu@oracle.com/T/#m7b43e474e8473b03cc03e884f23aa173e539a60c),
in the event that we have three checkpoint transactions having the same LSN
with the 3rd one setting DIFLAG_NREXT64 flag, The inode can have inconsistent
data after the 1st and the 2nd transactions are replayed. But we are assured
of the inode returning to its consistent state since the 3rd transaction is
guaranteed to be replayed. However, This scenario should not occur since we
now set DIFLAG_NREXT64 during xfs_inode_from_disk().
>> + } else {
>> + to->di_nextents = cpu_to_be32(xfs_ifork_nextents(&ip->i_df));
>> + to->di_anextents = cpu_to_be16(xfs_ifork_nextents(ip->i_afp));
>> + }
>> +}
>> +
>> void
>> xfs_inode_to_disk(
>> struct xfs_inode *ip,
>> @@ -296,7 +315,6 @@ xfs_inode_to_disk(
>> to->di_projid_lo = cpu_to_be16(ip->i_projid & 0xffff);
>> to->di_projid_hi = cpu_to_be16(ip->i_projid >> 16);
>>
>> - memset(to->di_pad, 0, sizeof(to->di_pad));
>> to->di_atime = xfs_inode_to_disk_ts(ip, inode->i_atime);
>> to->di_mtime = xfs_inode_to_disk_ts(ip, inode->i_mtime);
>> to->di_ctime = xfs_inode_to_disk_ts(ip, inode->i_ctime);
>> @@ -307,8 +325,6 @@ xfs_inode_to_disk(
>> to->di_size = cpu_to_be64(ip->i_disk_size);
>> to->di_nblocks = cpu_to_be64(ip->i_nblocks);
>> to->di_extsize = cpu_to_be32(ip->i_extsize);
>> - to->di_nextents = cpu_to_be32(xfs_ifork_nextents(&ip->i_df));
>> - to->di_anextents = cpu_to_be16(xfs_ifork_nextents(ip->i_afp));
>> to->di_forkoff = ip->i_forkoff;
>> to->di_aformat = xfs_ifork_format(ip->i_afp);
>> to->di_flags = cpu_to_be16(ip->i_diflags);
>> @@ -323,11 +339,14 @@ xfs_inode_to_disk(
>> to->di_lsn = cpu_to_be64(lsn);
>> memset(to->di_pad2, 0, sizeof(to->di_pad2));
>> uuid_copy(&to->di_uuid, &ip->i_mount->m_sb.sb_meta_uuid);
>> - to->di_flushiter = 0;
>> + memset(to->di_v3_pad, 0, sizeof(to->di_v3_pad));
>> } else {
>> to->di_version = 2;
>> to->di_flushiter = cpu_to_be16(ip->i_flushiter);
>> + memset(to->di_v2_pad, 0, sizeof(to->di_v2_pad));
>> }
>> +
>> + xfs_inode_to_disk_iext_counters(ip, to);
>> }
>>
>> static xfs_failaddr_t
>> @@ -397,6 +416,24 @@ xfs_dinode_verify_forkoff(
>> return NULL;
>> }
>>
>> +static xfs_failaddr_t
>> +xfs_dinode_verify_nextents(
>> + struct xfs_mount *mp,
>> + struct xfs_dinode *dip)
>> +{
>> + if (xfs_dinode_has_nrext64(dip)) {
>> + if (!xfs_has_nrext64(mp))
>> + return __this_address;
>> + if (dip->di_nrext64_pad != 0)
>> + return __this_address;
>> + } else {
>> + if (dip->di_version == 3 && dip->di_big_dextcnt != 0)
>> + return __this_address;
>> + }
>> +
>> + return NULL;
>> +}
>> +
>> xfs_failaddr_t
>> xfs_dinode_verify(
>> struct xfs_mount *mp,
>> @@ -440,6 +477,10 @@ xfs_dinode_verify(
>> if ((S_ISLNK(mode) || S_ISDIR(mode)) && di_size == 0)
>> return __this_address;
>>
>> + fa = xfs_dinode_verify_nextents(mp, dip);
>> + if (fa)
>> + return fa;
>> +
>> nextents = xfs_dfork_data_extents(dip);
>> nextents += xfs_dfork_attr_extents(dip);
>> nblocks = be64_to_cpu(dip->di_nblocks);
>> diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h
>> index 0cfc351648f9..fa5143fb889b 100644
>> --- a/fs/xfs/libxfs/xfs_inode_fork.h
>> +++ b/fs/xfs/libxfs/xfs_inode_fork.h
>> @@ -156,14 +156,20 @@ static inline xfs_extnum_t
>> xfs_dfork_data_extents(
>> struct xfs_dinode *dip)
>> {
>> - return be32_to_cpu(dip->di_nextents);
>> + if (xfs_dinode_has_nrext64(dip))
>> + return be64_to_cpu(dip->di_big_dextcnt);
>> + else
>> + return be32_to_cpu(dip->di_nextents);
>
> No need for the else in these helpers.
>
Ok. I will fix this.
>> }
>>
>> static inline xfs_extnum_t
>> xfs_dfork_attr_extents(
>> struct xfs_dinode *dip)
>> {
>> - return be16_to_cpu(dip->di_anextents);
>> + if (xfs_dinode_has_nrext64(dip))
>> + return be32_to_cpu(dip->di_big_aextcnt);
>> + else
>> + return be16_to_cpu(dip->di_anextents);
>> }
>>
>> static inline xfs_extnum_t
>> diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h
>> index fd66e70248f7..46aed637c98b 100644
>> --- a/fs/xfs/libxfs/xfs_log_format.h
>> +++ b/fs/xfs/libxfs/xfs_log_format.h
>> @@ -388,16 +388,30 @@ struct xfs_log_dinode {
>> uint32_t di_nlink; /* number of links to file */
>> uint16_t di_projid_lo; /* lower part of owner's project id */
>> uint16_t di_projid_hi; /* higher part of owner's project id */
>> - uint8_t di_pad[6]; /* unused, zeroed space */
>> - uint16_t di_flushiter; /* incremented on flush */
>> + union {
>> + uint64_t di_big_dextcnt; /* NREXT64 data extents */
>> + uint8_t di_v3_pad[8]; /* !NREXT64 V3 inode zeroed space */
>> + struct {
>> + uint8_t di_v2_pad[6]; /* V2 inode zeroed space */
>> + uint16_t di_flushiter; /* V2 inode incremented on flush */
>> + };
>> + };
>> xfs_log_timestamp_t di_atime; /* time last accessed */
>> xfs_log_timestamp_t di_mtime; /* time last modified */
>> xfs_log_timestamp_t di_ctime; /* time created/inode modified */
>> xfs_fsize_t di_size; /* number of bytes in file */
>> xfs_rfsblock_t di_nblocks; /* # of direct & btree blocks used */
>> xfs_extlen_t di_extsize; /* basic/minimum extent size for file */
>> - uint32_t di_nextents; /* number of extents in data fork */
>> - uint16_t di_anextents; /* number of extents in attribute fork*/
>> + union {
>> + struct {
>> + uint32_t di_big_aextcnt; /* NREXT64 attr extents */
>> + uint16_t di_nrext64_pad; /* NREXT64 unused, zero */
>> + } __packed;
>> + struct {
>> + uint32_t di_nextents; /* !NREXT64 data extents */
>> + uint16_t di_anextents; /* !NREXT64 attr extents */
>> + } __packed;
>> + };
>> uint8_t di_forkoff; /* attr fork offs, <<3 for 64b align */
>> int8_t di_aformat; /* format of attr fork's data */
>> uint32_t di_dmevmask; /* DMIG event mask */
>> diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
>> index 90d8e591baf8..82f4b9bb871b 100644
>> --- a/fs/xfs/xfs_inode_item.c
>> +++ b/fs/xfs/xfs_inode_item.c
>> @@ -358,6 +358,21 @@ xfs_copy_dm_fields_to_log_dinode(
>> }
>> }
>>
>> +static inline void
>> +xfs_inode_to_log_dinode_iext_counters(
>> + struct xfs_inode *ip,
>> + struct xfs_log_dinode *to)
>> +{
>> + if (xfs_inode_has_nrext64(ip)) {
>> + to->di_big_dextcnt = xfs_ifork_nextents(&ip->i_df);
>> + to->di_big_aextcnt = xfs_ifork_nextents(ip->i_afp);
>> + to->di_nrext64_pad = 0;
>> + } else {
>> + to->di_nextents = xfs_ifork_nextents(&ip->i_df);
>> + to->di_anextents = xfs_ifork_nextents(ip->i_afp);
>> + }
>> +}
>> +
>> static void
>> xfs_inode_to_log_dinode(
>> struct xfs_inode *ip,
>> @@ -373,7 +388,6 @@ xfs_inode_to_log_dinode(
>> to->di_projid_lo = ip->i_projid & 0xffff;
>> to->di_projid_hi = ip->i_projid >> 16;
>>
>> - memset(to->di_pad, 0, sizeof(to->di_pad));
>> memset(to->di_pad3, 0, sizeof(to->di_pad3));
>> to->di_atime = xfs_inode_to_log_dinode_ts(ip, inode->i_atime);
>> to->di_mtime = xfs_inode_to_log_dinode_ts(ip, inode->i_mtime);
>> @@ -385,8 +399,6 @@ xfs_inode_to_log_dinode(
>> to->di_size = ip->i_disk_size;
>> to->di_nblocks = ip->i_nblocks;
>> to->di_extsize = ip->i_extsize;
>> - to->di_nextents = xfs_ifork_nextents(&ip->i_df);
>> - to->di_anextents = xfs_ifork_nextents(ip->i_afp);
>> to->di_forkoff = ip->i_forkoff;
>> to->di_aformat = xfs_ifork_format(ip->i_afp);
>> to->di_flags = ip->i_diflags;
>> @@ -406,11 +418,14 @@ xfs_inode_to_log_dinode(
>> to->di_lsn = lsn;
>> memset(to->di_pad2, 0, sizeof(to->di_pad2));
>> uuid_copy(&to->di_uuid, &ip->i_mount->m_sb.sb_meta_uuid);
>> - to->di_flushiter = 0;
>> + memset(to->di_v3_pad, 0, sizeof(to->di_v3_pad));
>> } else {
>> to->di_version = 2;
>> to->di_flushiter = ip->i_flushiter;
>> + memset(to->di_v2_pad, 0, sizeof(to->di_v2_pad));
>> }
>> +
>> + xfs_inode_to_log_dinode_iext_counters(ip, to);
>> }
>>
>> /*
>> diff --git a/fs/xfs/xfs_inode_item_recover.c b/fs/xfs/xfs_inode_item_recover.c
>> index 767a551816a0..7434ad4772dc 100644
>> --- a/fs/xfs/xfs_inode_item_recover.c
>> +++ b/fs/xfs/xfs_inode_item_recover.c
>> @@ -148,6 +148,22 @@ static inline bool xfs_log_dinode_has_nrext64(const struct xfs_log_dinode *ld)
>> (ld->di_flags2 & XFS_DIFLAG2_NREXT64);
>> }
>>
>> +static inline void
>> +xfs_log_dinode_to_disk_iext_counters(
>> + struct xfs_log_dinode *from,
>> + struct xfs_dinode *to)
>> +{
>> + if (xfs_log_dinode_has_nrext64(from)) {
>> + to->di_big_dextcnt = cpu_to_be64(from->di_big_dextcnt);
>> + to->di_big_aextcnt = cpu_to_be32(from->di_big_aextcnt);
>> + to->di_nrext64_pad = cpu_to_be16(from->di_nrext64_pad);
>> + } else {
>> + to->di_nextents = cpu_to_be32(from->di_nextents);
>> + to->di_anextents = cpu_to_be16(from->di_anextents);
>> + }
>> +
>> +}
>> +
>> STATIC void
>> xfs_log_dinode_to_disk(
>> struct xfs_log_dinode *from,
>> @@ -164,7 +180,6 @@ xfs_log_dinode_to_disk(
>> to->di_nlink = cpu_to_be32(from->di_nlink);
>> to->di_projid_lo = cpu_to_be16(from->di_projid_lo);
>> to->di_projid_hi = cpu_to_be16(from->di_projid_hi);
>> - memcpy(to->di_pad, from->di_pad, sizeof(to->di_pad));
>>
>> to->di_atime = xfs_log_dinode_to_disk_ts(from, from->di_atime);
>> to->di_mtime = xfs_log_dinode_to_disk_ts(from, from->di_mtime);
>> @@ -173,8 +188,6 @@ xfs_log_dinode_to_disk(
>> to->di_size = cpu_to_be64(from->di_size);
>> to->di_nblocks = cpu_to_be64(from->di_nblocks);
>> to->di_extsize = cpu_to_be32(from->di_extsize);
>> - to->di_nextents = cpu_to_be32(from->di_nextents);
>> - to->di_anextents = cpu_to_be16(from->di_anextents);
>> to->di_forkoff = from->di_forkoff;
>> to->di_aformat = from->di_aformat;
>> to->di_dmevmask = cpu_to_be32(from->di_dmevmask);
>> @@ -192,10 +205,13 @@ xfs_log_dinode_to_disk(
>> to->di_lsn = cpu_to_be64(lsn);
>> memcpy(to->di_pad2, from->di_pad2, sizeof(to->di_pad2));
>> uuid_copy(&to->di_uuid, &from->di_uuid);
>> - to->di_flushiter = 0;
>> + memcpy(to->di_v3_pad, from->di_v3_pad, sizeof(to->di_v3_pad));
>> } else {
>> to->di_flushiter = cpu_to_be16(from->di_flushiter);
>> + memcpy(to->di_v2_pad, from->di_v2_pad, sizeof(to->di_v2_pad));
>> }
>> +
>> + xfs_log_dinode_to_disk_iext_counters(from, to);
>> }
>>
>> STATIC int
>> @@ -209,6 +225,8 @@ xlog_recover_inode_commit_pass2(
>> struct xfs_mount *mp = log->l_mp;
>> struct xfs_buf *bp;
>> struct xfs_dinode *dip;
>> + xfs_extnum_t nextents;
>> + xfs_aextnum_t anextents;
>> int len;
>> char *src;
>> char *dest;
>> @@ -348,21 +366,60 @@ xlog_recover_inode_commit_pass2(
>> goto out_release;
>> }
>> }
>> - if (unlikely(ldip->di_nextents + ldip->di_anextents > ldip->di_nblocks)){
>> - XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(5)",
>> +
>> + if (xfs_log_dinode_has_nrext64(ldip)) {
>> + if (!xfs_has_nrext64(mp) || (ldip->di_nrext64_pad != 0)) {
>> + XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(5)",
>> + XFS_ERRLEVEL_LOW, mp, ldip,
>> + sizeof(*ldip));
>> + xfs_alert(mp,
>> + "%s: Bad inode log record, rec ptr "PTR_FMT", "
>> + "dino ptr "PTR_FMT", dino bp "PTR_FMT", "
>> + "ino %Ld, xfs_has_nrext64(mp) = %d, "
>> + "ldip->di_nrext64_pad = %u",
>> + __func__, item, dip, bp, in_f->ilf_ino,
>> + xfs_has_nrext64(mp), ldip->di_nrext64_pad);
>> + error = -EFSCORRUPTED;
>> + goto out_release;
>> + }
>> + } else {
>> + if (ldip->di_version == 3 && ldip->di_big_dextcnt != 0) {
>> + XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(6)",
>> + XFS_ERRLEVEL_LOW, mp, ldip,
>> + sizeof(*ldip));
>> + xfs_alert(mp,
>> + "%s: Bad inode log record, rec ptr "PTR_FMT", "
>> + "dino ptr "PTR_FMT", dino bp "PTR_FMT", "
>> + "ino %Ld, ldip->di_big_dextcnt = %llu",
>> + __func__, item, dip, bp, in_f->ilf_ino,
>> + ldip->di_big_dextcnt);
>> + error = -EFSCORRUPTED;
>> + goto out_release;
>> + }
>> + }
>> +
>> + if (xfs_log_dinode_has_nrext64(ldip)) {
>> + nextents = ldip->di_big_dextcnt;
>> + anextents = ldip->di_big_aextcnt;
>> + } else {
>> + nextents = ldip->di_nextents;
>> + anextents = ldip->di_anextents;
>> + }
>> +
>> + if (unlikely(nextents + anextents > ldip->di_nblocks)) {
>> + XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(7)",
>> XFS_ERRLEVEL_LOW, mp, ldip,
>> sizeof(*ldip));
>> xfs_alert(mp,
>> "%s: Bad inode log record, rec ptr "PTR_FMT", dino ptr "PTR_FMT", "
>> - "dino bp "PTR_FMT", ino %Ld, total extents = %d, nblocks = %Ld",
>> + "dino bp "PTR_FMT", ino %Ld, total extents = %llu, nblocks = %Ld",
>> __func__, item, dip, bp, in_f->ilf_ino,
>> - ldip->di_nextents + ldip->di_anextents,
>> - ldip->di_nblocks);
>> + nextents + anextents, ldip->di_nblocks);
>> error = -EFSCORRUPTED;
>> goto out_release;
>> }
>> if (unlikely(ldip->di_forkoff > mp->m_sb.sb_inodesize)) {
>> - XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(6)",
>> + XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(8)",
>> XFS_ERRLEVEL_LOW, mp, ldip,
>> sizeof(*ldip));
>> xfs_alert(mp,
>> @@ -374,7 +431,7 @@ xlog_recover_inode_commit_pass2(
>> }
>> isize = xfs_log_dinode_size(mp);
>> if (unlikely(item->ri_buf[1].i_len > isize)) {
>> - XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(7)",
>> + XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(9)",
>> XFS_ERRLEVEL_LOW, mp, ldip,
>> sizeof(*ldip));
>> xfs_alert(mp,
>> --
>> 2.30.2
>>
--
chandan
^ permalink raw reply
* [qemu-mainline test] 167606: tolerable FAIL - PUSHED
From: osstest service owner @ 2022-01-05 13:47 UTC (permalink / raw)
To: xen-devel
flight 167606 qemu-mainline real [real]
http://logs.test-lab.xenproject.org/osstest/logs/167606/
Failures :-/ but no regressions.
Tests which did not succeed, but are not blocking:
test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stop fail like 167604
test-armhf-armhf-libvirt 16 saverestore-support-check fail like 167604
test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 167604
test-amd64-i386-xl-qemuu-win7-amd64 19 guest-stop fail like 167604
test-armhf-armhf-libvirt-raw 15 saverestore-support-check fail like 167604
test-armhf-armhf-libvirt-qcow2 15 saverestore-support-check fail like 167604
test-amd64-i386-xl-qemuu-ws16-amd64 19 guest-stop fail like 167604
test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stop fail like 167604
test-amd64-i386-xl-pvshim 14 guest-start fail never pass
test-arm64-arm64-xl-seattle 15 migrate-support-check fail never pass
test-amd64-i386-libvirt-xsm 15 migrate-support-check fail never pass
test-arm64-arm64-xl-seattle 16 saverestore-support-check fail never pass
test-arm64-arm64-xl 15 migrate-support-check fail never pass
test-arm64-arm64-xl 16 saverestore-support-check fail never pass
test-amd64-amd64-libvirt 15 migrate-support-check fail never pass
test-amd64-amd64-libvirt-xsm 15 migrate-support-check fail never pass
test-amd64-i386-libvirt 15 migrate-support-check fail never pass
test-arm64-arm64-xl-xsm 15 migrate-support-check fail never pass
test-arm64-arm64-xl-thunderx 15 migrate-support-check fail never pass
test-arm64-arm64-xl-credit2 15 migrate-support-check fail never pass
test-arm64-arm64-xl-thunderx 16 saverestore-support-check fail never pass
test-arm64-arm64-xl-xsm 16 saverestore-support-check fail never pass
test-arm64-arm64-xl-credit2 16 saverestore-support-check fail never pass
test-arm64-arm64-libvirt-xsm 15 migrate-support-check fail never pass
test-arm64-arm64-libvirt-xsm 16 saverestore-support-check fail never pass
test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check fail never pass
test-amd64-i386-libvirt-raw 14 migrate-support-check fail never pass
test-arm64-arm64-libvirt-raw 14 migrate-support-check fail never pass
test-arm64-arm64-libvirt-raw 15 saverestore-support-check fail never pass
test-armhf-armhf-xl-multivcpu 15 migrate-support-check fail never pass
test-amd64-amd64-libvirt-vhd 14 migrate-support-check fail never pass
test-armhf-armhf-xl-multivcpu 16 saverestore-support-check fail never pass
test-arm64-arm64-xl-vhd 14 migrate-support-check fail never pass
test-arm64-arm64-xl-vhd 15 saverestore-support-check fail never pass
test-armhf-armhf-xl-credit1 15 migrate-support-check fail never pass
test-armhf-armhf-xl-credit1 16 saverestore-support-check fail never pass
test-armhf-armhf-libvirt 15 migrate-support-check fail never pass
test-armhf-armhf-xl-credit2 15 migrate-support-check fail never pass
test-armhf-armhf-xl-credit2 16 saverestore-support-check fail never pass
test-armhf-armhf-xl-rtds 15 migrate-support-check fail never pass
test-armhf-armhf-xl-rtds 16 saverestore-support-check fail never pass
test-armhf-armhf-xl-arndale 15 migrate-support-check fail never pass
test-armhf-armhf-xl-arndale 16 saverestore-support-check fail never pass
test-armhf-armhf-xl-cubietruck 15 migrate-support-check fail never pass
test-armhf-armhf-xl-cubietruck 16 saverestore-support-check fail never pass
test-arm64-arm64-xl-credit1 15 migrate-support-check fail never pass
test-arm64-arm64-xl-credit1 16 saverestore-support-check fail never pass
test-armhf-armhf-libvirt-raw 14 migrate-support-check fail never pass
test-armhf-armhf-libvirt-qcow2 14 migrate-support-check fail never pass
test-armhf-armhf-xl-vhd 14 migrate-support-check fail never pass
test-armhf-armhf-xl-vhd 15 saverestore-support-check fail never pass
test-armhf-armhf-xl 15 migrate-support-check fail never pass
test-armhf-armhf-xl 16 saverestore-support-check fail never pass
version targeted for testing:
qemuu 58140d3964c7c545f0880d978f279ed7b4cb41b8
baseline version:
qemuu 67e41fe0cfb62e6cdfa659f0155417d17e5274ea
Last test of basis 167604 2022-01-04 18:08:12 Z 0 days
Testing same since 167606 2022-01-05 03:10:16 Z 0 days 1 attempts
------------------------------------------------------------
People who touched revisions under test:
Laurent Vivier <laurent@vivier.eu>
Philippe Mathieu-Daudé <f4bug@amsat.org>
Richard Henderson <richard.henderson@linaro.org>
Xiaoyao Li <xiaoyao.li@intel.com>
jobs:
build-amd64-xsm pass
build-arm64-xsm pass
build-i386-xsm pass
build-amd64 pass
build-arm64 pass
build-armhf pass
build-i386 pass
build-amd64-libvirt pass
build-arm64-libvirt pass
build-armhf-libvirt pass
build-i386-libvirt pass
build-amd64-pvops pass
build-arm64-pvops pass
build-armhf-pvops pass
build-i386-pvops pass
test-amd64-amd64-xl pass
test-amd64-coresched-amd64-xl pass
test-arm64-arm64-xl pass
test-armhf-armhf-xl pass
test-amd64-i386-xl pass
test-amd64-coresched-i386-xl pass
test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm pass
test-amd64-i386-libvirt-qemuu-debianhvm-amd64-xsm pass
test-amd64-amd64-xl-qemuu-debianhvm-i386-xsm pass
test-amd64-i386-xl-qemuu-debianhvm-i386-xsm pass
test-amd64-amd64-libvirt-xsm pass
test-arm64-arm64-libvirt-xsm pass
test-amd64-i386-libvirt-xsm pass
test-amd64-amd64-xl-xsm pass
test-arm64-arm64-xl-xsm pass
test-amd64-i386-xl-xsm pass
test-amd64-amd64-qemuu-nested-amd fail
test-amd64-amd64-xl-pvhv2-amd pass
test-amd64-i386-qemuu-rhel6hvm-amd pass
test-amd64-amd64-dom0pvh-xl-amd pass
test-amd64-amd64-xl-qemuu-debianhvm-amd64 pass
test-amd64-i386-xl-qemuu-debianhvm-amd64 pass
test-amd64-i386-freebsd10-amd64 pass
test-amd64-amd64-qemuu-freebsd11-amd64 pass
test-amd64-amd64-qemuu-freebsd12-amd64 pass
test-amd64-amd64-xl-qemuu-ovmf-amd64 pass
test-amd64-i386-xl-qemuu-ovmf-amd64 pass
test-amd64-amd64-xl-qemuu-win7-amd64 fail
test-amd64-i386-xl-qemuu-win7-amd64 fail
test-amd64-amd64-xl-qemuu-ws16-amd64 fail
test-amd64-i386-xl-qemuu-ws16-amd64 fail
test-armhf-armhf-xl-arndale pass
test-amd64-amd64-xl-credit1 pass
test-arm64-arm64-xl-credit1 pass
test-armhf-armhf-xl-credit1 pass
test-amd64-amd64-xl-credit2 pass
test-arm64-arm64-xl-credit2 pass
test-armhf-armhf-xl-credit2 pass
test-armhf-armhf-xl-cubietruck pass
test-amd64-amd64-xl-qemuu-dmrestrict-amd64-dmrestrict pass
test-amd64-i386-xl-qemuu-dmrestrict-amd64-dmrestrict pass
test-amd64-i386-freebsd10-i386 pass
test-amd64-amd64-qemuu-nested-intel pass
test-amd64-amd64-xl-pvhv2-intel pass
test-amd64-i386-qemuu-rhel6hvm-intel pass
test-amd64-amd64-dom0pvh-xl-intel pass
test-amd64-amd64-libvirt pass
test-armhf-armhf-libvirt pass
test-amd64-i386-libvirt pass
test-amd64-amd64-xl-multivcpu pass
test-armhf-armhf-xl-multivcpu pass
test-amd64-amd64-pair pass
test-amd64-i386-pair pass
test-amd64-amd64-libvirt-pair pass
test-amd64-i386-libvirt-pair pass
test-amd64-amd64-xl-pvshim pass
test-amd64-i386-xl-pvshim fail
test-amd64-amd64-pygrub pass
test-armhf-armhf-libvirt-qcow2 pass
test-amd64-amd64-xl-qcow2 pass
test-arm64-arm64-libvirt-raw pass
test-armhf-armhf-libvirt-raw pass
test-amd64-i386-libvirt-raw pass
test-amd64-amd64-xl-rtds pass
test-armhf-armhf-xl-rtds pass
test-arm64-arm64-xl-seattle pass
test-amd64-amd64-xl-qemuu-debianhvm-amd64-shadow pass
test-amd64-i386-xl-qemuu-debianhvm-amd64-shadow pass
test-amd64-amd64-xl-shadow pass
test-amd64-i386-xl-shadow pass
test-arm64-arm64-xl-thunderx pass
test-amd64-amd64-libvirt-vhd pass
test-arm64-arm64-xl-vhd pass
test-armhf-armhf-xl-vhd pass
test-amd64-i386-xl-vhd pass
------------------------------------------------------------
sg-report-flight on osstest.test-lab.xenproject.org
logs: /home/logs/logs
images: /home/logs/images
Logs, config files, etc. are available at
http://logs.test-lab.xenproject.org/osstest/logs
Explanation of these reports, and of osstest in general, is at
http://xenbits.xen.org/gitweb/?p=osstest.git;a=blob;f=README.email;hb=master
http://xenbits.xen.org/gitweb/?p=osstest.git;a=blob;f=README;hb=master
Test harness code can be found at
http://xenbits.xen.org/gitweb?p=osstest.git;a=summary
Pushing revision :
To xenbits.xen.org:/home/xen/git/qemu-xen.git
67e41fe0cf..58140d3964 58140d3964c7c545f0880d978f279ed7b4cb41b8 -> upstream-tested
^ permalink raw reply
* Re: [PATCH 2/2] spapr: Fix support of POWER5+ processors
From: Fabiano Rosas @ 2022-01-05 13:41 UTC (permalink / raw)
To: Cédric Le Goater, qemu-ppc, qemu-devel
Cc: David Gibson, Cédric Le Goater, Greg Kurz
In-Reply-To: <20220105095142.3990430-3-clg@kaod.org>
Cédric Le Goater <clg@kaod.org> writes:
> POWER5+ (ISA v2.03) processors are supported by the pseries machine
> but they do not have Altivec instructions. Do not advertise support
> for it in the DT.
>
> To be noted that this test is in contradiction with the assert in
> cap_vsx_apply().
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Tested-by: Fabiano Rosas <farosas@linux.ibm.com>
^ permalink raw reply
* Re: [PATCH V4 11/16] xfs: Introduce macros to represent new maximum extent counts for data/attr forks
From: Chandan Babu R @ 2022-01-05 13:46 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220105004205.GR31583@magnolia>
On 05 Jan 2022 at 06:12, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:14PM +0530, Chandan Babu R wrote:
>> This commit defines new macros to represent maximum extent counts allowed by
>> filesystems which have support for large per-inode extent counters.
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_bmap.c | 8 +++-----
>> fs/xfs/libxfs/xfs_bmap_btree.c | 2 +-
>> fs/xfs/libxfs/xfs_format.h | 8 +++++---
>> fs/xfs/libxfs/xfs_inode_buf.c | 3 ++-
>> fs/xfs/libxfs/xfs_inode_fork.c | 2 +-
>> fs/xfs/libxfs/xfs_inode_fork.h | 19 +++++++++++++++----
>> 6 files changed, 27 insertions(+), 15 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
>> index 4113622e9733..0ce58e4a9c44 100644
>> --- a/fs/xfs/libxfs/xfs_bmap.c
>> +++ b/fs/xfs/libxfs/xfs_bmap.c
>> @@ -61,10 +61,8 @@ xfs_bmap_compute_maxlevels(
>> int sz; /* root block size */
>>
>> /*
>> - * The maximum number of extents in a file, hence the maximum number of
>> - * leaf entries, is controlled by the size of the on-disk extent count,
>> - * either a signed 32-bit number for the data fork, or a signed 16-bit
>> - * number for the attr fork.
>> + * The maximum number of extents in a fork, hence the maximum number of
>> + * leaf entries, is controlled by the size of the on-disk extent count.
>> *
>> * Note that we can no longer assume that if we are in ATTR1 that the
>> * fork offset of all the inodes will be
>> @@ -74,7 +72,7 @@ xfs_bmap_compute_maxlevels(
>> * ATTR2 we have to assume the worst case scenario of a minimum size
>> * available.
>> */
>> - maxleafents = xfs_iext_max_nextents(whichfork);
>> + maxleafents = xfs_iext_max_nextents(xfs_has_nrext64(mp), whichfork);
>> if (whichfork == XFS_DATA_FORK)
>> sz = XFS_BMDR_SPACE_CALC(MINDBTPTRS);
>> else
>> diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c
>> index 453309fc85f2..e8d21d69b9ff 100644
>> --- a/fs/xfs/libxfs/xfs_bmap_btree.c
>> +++ b/fs/xfs/libxfs/xfs_bmap_btree.c
>> @@ -611,7 +611,7 @@ xfs_bmbt_maxlevels_ondisk(void)
>> minrecs[1] = xfs_bmbt_block_maxrecs(blocklen, false) / 2;
>>
>> /* One extra level for the inode root. */
>> - return xfs_btree_compute_maxlevels(minrecs, MAXEXTNUM) + 1;
>> + return xfs_btree_compute_maxlevels(minrecs, XFS_MAX_EXTCNT_DATA_FORK) + 1;
>> }
>>
>> /*
>> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
>> index 9934c320bf01..eff86f6c4c99 100644
>> --- a/fs/xfs/libxfs/xfs_format.h
>> +++ b/fs/xfs/libxfs/xfs_format.h
>> @@ -873,9 +873,11 @@ enum xfs_dinode_fmt {
>> /*
>> * Max values for extlen, extnum, aextnum.
>> */
>> -#define MAXEXTLEN ((xfs_extlen_t)0x001fffff) /* 21 bits */
>> -#define MAXEXTNUM ((xfs_extnum_t)0x7fffffff) /* signed int */
>> -#define MAXAEXTNUM ((xfs_aextnum_t)0x7fff) /* signed short */
>> +#define MAXEXTLEN ((xfs_extlen_t)0x1fffff) /* 21 bits */
>> +#define XFS_MAX_EXTCNT_DATA_FORK ((xfs_extnum_t)0xffffffffffff) /* Unsigned 48-bits */
>> +#define XFS_MAX_EXTCNT_ATTR_FORK ((xfs_aextnum_t)0xffffffff) /* Unsigned 32-bits */
>> +#define XFS_MAX_EXTCNT_DATA_FORK_OLD ((xfs_extnum_t)0x7fffffff) /* Signed 32-bits */
>> +#define XFS_MAX_EXTCNT_ATTR_FORK_OLD ((xfs_aextnum_t)0x7fff) /* Signed 16-bits */
>
> Could you change the #define value to a shift and subtract like you do
> for MAXEXTLEN^WXFS_MAX_BMBT_EXTLEN in patch 16?
>
> e.g.
>
> #define XFS_MAX_EXTCNT_DATA_FORK ((xfs_extnum_t)((1ULL << 48) - 1))
Sure. I will incorporate the above change.
>
> Also, you might want to document briefly in this header file why it is
> that the bmbt is limited to 2^48 extents even though the dinode fields
> are 64 bits wide and there can be up to 2^54 blocks mapped by a fork.
> ISTR the reason is to avoid having the bmbt cursor cache have to handle
> a 12-level btree or something, right?
>
> (Sorry, it's been a while...)
>
The discussion initially started with the observation that anything more than
2^43 extents on a 1k block sized filesystem can cause a BMBT tree's height to
become larger than XFS_BTREE_MAXLEVELS (i.e. 9). Increasing the value of
XFS_BTREE_MAXLEVELS was not an option since that would cause the following
sequence of events,
1. An increase in the rmapbt's maximum height (on filesystems which have both
reflink and rmap features enabled).
2. An increase in transaction reservation values.
However this is no longer an issue since the btree cursor now contains a
variable length array and XFS_BTREE_MAXLEVELS is now removed.
2^48 as the maximum extent count was arrived at based on the following logic,
2^63 (max file size) / 64k (max block size) = 2^47
i.e. 2^47 can be a valid upper bound for all block sizes.
Rounding up 47 to the nearest multiple of bits-per-byte results in 48. Hence
2^48 was chosen as the maximum data fork extent count.
I will include the above description in the next version of the patchset.
>>
>> /*
>> * Inode minimum and maximum sizes.
>> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
>> index 860d32816909..34f360a38603 100644
>> --- a/fs/xfs/libxfs/xfs_inode_buf.c
>> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
>> @@ -361,7 +361,8 @@ xfs_dinode_verify_fork(
>> return __this_address;
>> break;
>> case XFS_DINODE_FMT_BTREE:
>> - max_extents = xfs_iext_max_nextents(whichfork);
>> + max_extents = xfs_iext_max_nextents(xfs_dinode_has_nrext64(dip),
>> + whichfork);
>> if (di_nextents > max_extents)
>> return __this_address;
>> break;
>> diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
>> index ce690abe5dce..a3a3b54f9c55 100644
>> --- a/fs/xfs/libxfs/xfs_inode_fork.c
>> +++ b/fs/xfs/libxfs/xfs_inode_fork.c
>> @@ -746,7 +746,7 @@ xfs_iext_count_may_overflow(
>> if (whichfork == XFS_COW_FORK)
>> return 0;
>>
>> - max_exts = xfs_iext_max_nextents(whichfork);
>> + max_exts = xfs_iext_max_nextents(xfs_inode_has_nrext64(ip), whichfork);
>>
>> if (XFS_TEST_ERROR(false, ip->i_mount, XFS_ERRTAG_REDUCE_MAX_IEXTENTS))
>> max_exts = 10;
>> diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h
>> index 4a8b77d425df..0cfc351648f9 100644
>> --- a/fs/xfs/libxfs/xfs_inode_fork.h
>> +++ b/fs/xfs/libxfs/xfs_inode_fork.h
>> @@ -133,12 +133,23 @@ static inline int8_t xfs_ifork_format(struct xfs_ifork *ifp)
>> return ifp->if_format;
>> }
>>
>> -static inline xfs_extnum_t xfs_iext_max_nextents(int whichfork)
>> +static inline xfs_extnum_t xfs_iext_max_nextents(bool has_big_extcnt,
>
> has_nrext64, to be consistent with most everywhere else?
>
You are right. I will fix this.
> --D
>
>> + int whichfork)
>> {
>> - if (whichfork == XFS_DATA_FORK || whichfork == XFS_COW_FORK)
>> - return MAXEXTNUM;
>> + switch (whichfork) {
>> + case XFS_DATA_FORK:
>> + case XFS_COW_FORK:
>> + return has_big_extcnt ? XFS_MAX_EXTCNT_DATA_FORK
>> + : XFS_MAX_EXTCNT_DATA_FORK_OLD;
>> +
>> + case XFS_ATTR_FORK:
>> + return has_big_extcnt ? XFS_MAX_EXTCNT_ATTR_FORK
>> + : XFS_MAX_EXTCNT_ATTR_FORK_OLD;
>>
>> - return MAXAEXTNUM;
>> + default:
>> + ASSERT(0);
>> + return 0;
>> + }
>> }
>>
>> static inline xfs_extnum_t
>> --
>> 2.30.2
>>
--
chandan
^ permalink raw reply
* Re: Which linux kernel version should I choose?
From: Wei Liu @ 2022-01-05 13:45 UTC (permalink / raw)
To: Li Hongyu; +Cc: Wei Liu, rust-for-linux
In-Reply-To: <61d51c88.1c69fb81.3b0da.ae02SMTPIN_ADDED_BROKEN@mx.google.com>
On Wed, Jan 05, 2022 at 12:19:56PM +0800, Li Hongyu wrote:
> Hi Wei Liu,
>
> Thanks for your help sincerely. I tried to reply to you the day before
> yesterday. But it seems something goes wrong. The reply email did not show
> in the kernel email list. I am not sure whether you receive my reply. So I
> resend this email. If this bothers you, please do let me know.
No worries. I did get your original reply.
I'm not bothered. There is no need to apologize.
Wei.
^ permalink raw reply
* Re: [PATCH V4 08/16] xfs: Introduce XFS_FSOP_GEOM_FLAGS_NREXT64
From: Chandan Babu R @ 2022-01-05 13:44 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220105000524.GO31583@magnolia>
On 05 Jan 2022 at 05:35, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:11PM +0530, Chandan Babu R wrote:
>> XFS_FSOP_GEOM_FLAGS_NREXT64 indicates that the current filesystem instance
>> supports 64-bit per-inode extent counters.
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>> ---
>> fs/xfs/libxfs/xfs_fs.h | 1 +
>> fs/xfs/libxfs/xfs_sb.c | 2 ++
>> 2 files changed, 3 insertions(+)
>>
>> diff --git a/fs/xfs/libxfs/xfs_fs.h b/fs/xfs/libxfs/xfs_fs.h
>> index c43877c8a279..42bc39501d81 100644
>> --- a/fs/xfs/libxfs/xfs_fs.h
>> +++ b/fs/xfs/libxfs/xfs_fs.h
>> @@ -251,6 +251,7 @@ typedef struct xfs_fsop_resblks {
>> #define XFS_FSOP_GEOM_FLAGS_REFLINK (1 << 20) /* files can share blocks */
>> #define XFS_FSOP_GEOM_FLAGS_BIGTIME (1 << 21) /* 64-bit nsec timestamps */
>> #define XFS_FSOP_GEOM_FLAGS_INOBTCNT (1 << 22) /* inobt btree counter */
>> +#define XFS_FSOP_GEOM_FLAGS_NREXT64 (1 << 23) /* 64-bit extent counter */
>>
>> /*
>> * Minimum and maximum sizes need for growth checks.
>> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
>> index bd632389ae92..0c1add39177f 100644
>> --- a/fs/xfs/libxfs/xfs_sb.c
>> +++ b/fs/xfs/libxfs/xfs_sb.c
>> @@ -1138,6 +1138,8 @@ xfs_fs_geometry(
>> } else {
>> geo->logsectsize = BBSIZE;
>> }
>> + if (xfs_has_nrext64(mp))
>> + geo->flags |= XFS_FSOP_GEOM_FLAGS_NREXT64;
>> geo->rtsectsize = sbp->sb_blocksize;
>> geo->dirblocksize = xfs_dir2_dirblock_bytes(sbp);
>>
>> --
>> 2.30.2
>>
I think you accidently missed typing your response to this patch?
--
chandan
^ permalink raw reply
* Re: [PATCH] iomap: Address soft lockup in iomap_finish_ioend()
From: hch @ 2022-01-05 13:43 UTC (permalink / raw)
To: Dave Chinner
Cc: hch@infradead.org, Trond Myklebust, bfoster@redhat.com,
linux-fsdevel@vger.kernel.org, trondmy@kernel.org,
axboe@kernel.dk, djwong@kernel.org, linux-xfs@vger.kernel.org,
willy@infradead.org
In-Reply-To: <20220104211605.GI945095@dread.disaster.area>
On Wed, Jan 05, 2022 at 08:16:05AM +1100, Dave Chinner wrote:
> > > + if (ioend->io_inline_bio.bi_iter.bi_sector + (ioend->io_size >> 9) !=
> >
> > This open codes bio_end_sector()
>
> No, it doesn't. The ioend can have chained bios or have others merged
> and concatenated to the ioend->io_list, so ioend->io_size != length
> of the first bio in the chain....
>
> > > + next->io_inline_bio.bi_iter.bi_sector)
> >
> > But more importantly I don't think just using the inline_bio makes sense
> > here as the ioend can have multiple bios. Fortunately we should always
> > have the last built bio available in ->io_bio.
>
> Except merging chains ioends and modifies the head io_size to
> account for the chained ioends we add to ioend->io_list. Hence
> ioend->io_bio is not the last bio in a contiguous ioend chain.
Indeed. We could use bio_end_sector on io_bio or this.
^ permalink raw reply
* Re: [PATCH V4 05/16] xfs: Use basic types to define xfs_log_dinode's di_nextents and di_anextents
From: Chandan Babu R @ 2022-01-05 13:43 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, david
In-Reply-To: <20220104235014.GL31583@magnolia>
On 05 Jan 2022 at 05:20, Darrick J. Wong wrote:
> On Tue, Dec 14, 2021 at 02:15:08PM +0530, Chandan Babu R wrote:
>> A future commit will increase the width of xfs_extnum_t in order to facilitate
>> larger per-inode extent counters. Hence this patch now uses basic types to
>> define xfs_log_dinode->[di_nextents|dianextents].
>>
>> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
>
> I wonder how this didn't trip the xfs_ondisk.h checks in the last
> revision of the patches, but ... who cares, let's see what I think of
> how /this/ version handles the field enlargements.
>
This change was part of "xfs: Rename inode's extent counter fields based on
their width" patch in v3 patchset. As Dave had correctly complained, this
change had to be done in a separate patch.
> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
>
> --D
>
>> ---
>> fs/xfs/libxfs/xfs_log_format.h | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h
>> index b322db523d65..fd66e70248f7 100644
>> --- a/fs/xfs/libxfs/xfs_log_format.h
>> +++ b/fs/xfs/libxfs/xfs_log_format.h
>> @@ -396,8 +396,8 @@ struct xfs_log_dinode {
>> xfs_fsize_t di_size; /* number of bytes in file */
>> xfs_rfsblock_t di_nblocks; /* # of direct & btree blocks used */
>> xfs_extlen_t di_extsize; /* basic/minimum extent size for file */
>> - xfs_extnum_t di_nextents; /* number of extents in data fork */
>> - xfs_aextnum_t di_anextents; /* number of extents in attribute fork*/
>> + uint32_t di_nextents; /* number of extents in data fork */
>> + uint16_t di_anextents; /* number of extents in attribute fork*/
>> uint8_t di_forkoff; /* attr fork offs, <<3 for 64b align */
>> int8_t di_aformat; /* format of attr fork's data */
>> uint32_t di_dmevmask; /* DMIG event mask */
>> --
>> 2.30.2
>>
--
chandan
^ permalink raw reply
* Re: [PATCH] iomap: Address soft lockup in iomap_finish_ioend()
From: hch @ 2022-01-05 13:42 UTC (permalink / raw)
To: Darrick J. Wong
Cc: Dave Chinner, hch@infradead.org, Matthew Wilcox, Trond Myklebust,
bfoster@redhat.com, linux-fsdevel@vger.kernel.org,
trondmy@kernel.org, axboe@kernel.dk, linux-xfs@vger.kernel.org
In-Reply-To: <20220104231230.GG31606@magnolia>
On Tue, Jan 04, 2022 at 03:12:30PM -0800, Darrick J. Wong wrote:
> As I see it, the problem here is that we're spending too much time
> calling iomap_finish_page_writeback over and over and over, right?
>
> If we have a single page with a single mapping that fits in a single
> bio, that means we call bio_add_page once, and on the other end we call
> iomap_finish_page_writeback once.
iomap_finish_page_writeback is called once per page, and the folio
equivalent will be called once per folio, yes.
But usually call bio_add_page mutliple times, due to the silly one block
at a time loop in iomap_writepage_map. But that is someting we can
easily fix.
^ permalink raw reply
* Re: [PATCH 1/2] target/ppc: Add popcntb instruction to POWER5+ processors
From: Fabiano Rosas @ 2022-01-05 13:40 UTC (permalink / raw)
To: Cédric Le Goater, qemu-ppc, qemu-devel
Cc: David Gibson, Cédric Le Goater, Greg Kurz
In-Reply-To: <20220105095142.3990430-2-clg@kaod.org>
Cédric Le Goater <clg@kaod.org> writes:
> popcntb instruction was added in ISA v2.02. Add support for POWER5+
> processors since they implement ISA v2.03.
>
> PPC970 CPUs implement v2.01 and do not support popcntb.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
^ permalink raw reply
* Re: [PATCH net] scripts/pahole-flags.sh: Make sure pahole --version works
From: Daniel Borkmann @ 2022-01-05 13:42 UTC (permalink / raw)
To: Saeed Mahameed, David S. Miller, Jakub Kicinski
Cc: netdev, bpf, Saeed Mahameed, Andrii Nakryiko, Jiri Olsa
In-Reply-To: <20211231075607.94752-1-saeed@kernel.org>
On 12/31/21 8:56 AM, Saeed Mahameed wrote:
> From: Saeed Mahameed <saeedm@nvidia.com>
>
> I had a broken pahole and it's been driving me crazy to see tons of the
> following error messages on every build.
>
> pahole: symbol lookup error: pahole: undefined symbol: btf_gen_floats
> scripts/pahole-flags.sh: line 12: [: : integer expression expected
> scripts/pahole-flags.sh: line 16: [: : integer expression expected
>
> Address this by redirecting pahole --version stderr to devnull,
> and validate stdout has a non empty string, otherwise exit silently.
I'll leave this up to Andrii, but broken pahole version sounds like it would
have been better to fix the local pahole installation instead [rather than the
kernel having to guard against it, especially if it's driving you crazy]?
I could image that silent exit on empty version string due to broken pahole
deployment might rather waste developer's time to then go and debug why btf
wasn't generated..
> Fixes: 9741e07ece7c ("kbuild: Unify options for BTF generation for vmlinux and modules")
> CC: Andrii Nakryiko <andrii@kernel.org>
> CC: Jiri Olsa <jolsa@redhat.com>
> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
> ---
> scripts/pahole-flags.sh | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/pahole-flags.sh b/scripts/pahole-flags.sh
> index e6093adf4c06..b3b53f890d40 100755
> --- a/scripts/pahole-flags.sh
> +++ b/scripts/pahole-flags.sh
> @@ -7,7 +7,8 @@ if ! [ -x "$(command -v ${PAHOLE})" ]; then
> exit 0
> fi
>
> -pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
> +pahole_ver=$(${PAHOLE} --version 2>/dev/null | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/')
> +[ -z "${pahole_ver}" ] && exit 0
>
> if [ "${pahole_ver}" -ge "118" ] && [ "${pahole_ver}" -le "121" ]; then
> # pahole 1.18 through 1.21 can't handle zero-sized per-CPU vars
>
^ permalink raw reply
* Re: [RFC v2 4/8] drm/amdgpu: Serialize non TDR gpu recovery with TDRs
From: Christian König @ 2022-01-05 13:41 UTC (permalink / raw)
To: Lazar, Lijo, Andrey Grodzovsky, dri-devel, amd-gfx; +Cc: horace.chen, Monk.Liu
In-Reply-To: <6f64e1d2-eec5-04da-2497-9ee2e7dfcf12@amd.com>
Am 05.01.22 um 14:26 schrieb Lazar, Lijo:
> On 1/5/2022 6:45 PM, Christian König wrote:
>> Am 05.01.22 um 14:11 schrieb Lazar, Lijo:
>>> On 1/5/2022 6:01 PM, Christian König wrote:
>>>> Am 05.01.22 um 10:54 schrieb Lazar, Lijo:
>>>>> On 12/23/2021 3:35 AM, Andrey Grodzovsky wrote:
>>>>>> Use reset domain wq also for non TDR gpu recovery trigers
>>>>>> such as sysfs and RAS. We must serialize all possible
>>>>>> GPU recoveries to gurantee no concurrency there.
>>>>>> For TDR call the original recovery function directly since
>>>>>> it's already executed from within the wq. For others just
>>>>>> use a wrapper to qeueue work and wait on it to finish.
>>>>>>
>>>>>> v2: Rename to amdgpu_recover_work_struct
>>>>>>
>>>>>> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
>>>>>> ---
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 33
>>>>>> +++++++++++++++++++++-
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 2 +-
>>>>>> 3 files changed, 35 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> index b5ff76aae7e0..8e96b9a14452 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> @@ -1296,6 +1296,8 @@ bool amdgpu_device_has_job_running(struct
>>>>>> amdgpu_device *adev);
>>>>>> bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev);
>>>>>> int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> struct amdgpu_job* job);
>>>>>> +int amdgpu_device_gpu_recover_imp(struct amdgpu_device *adev,
>>>>>> + struct amdgpu_job *job);
>>>>>> void amdgpu_device_pci_config_reset(struct amdgpu_device *adev);
>>>>>> int amdgpu_device_pci_reset(struct amdgpu_device *adev);
>>>>>> bool amdgpu_device_need_post(struct amdgpu_device *adev);
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> index 7c063fd37389..258ec3c0b2af 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> @@ -4979,7 +4979,7 @@ static void amdgpu_device_recheck_guilty_jobs(
>>>>>> * Returns 0 for success or an error on failure.
>>>>>> */
>>>>>> -int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> +int amdgpu_device_gpu_recover_imp(struct amdgpu_device *adev,
>>>>>> struct amdgpu_job *job)
>>>>>> {
>>>>>> struct list_head device_list, *device_list_handle = NULL;
>>>>>> @@ -5237,6 +5237,37 @@ int amdgpu_device_gpu_recover(struct
>>>>>> amdgpu_device *adev,
>>>>>> return r;
>>>>>> }
>>>>>> +struct amdgpu_recover_work_struct {
>>>>>> + struct work_struct base;
>>>>>> + struct amdgpu_device *adev;
>>>>>> + struct amdgpu_job *job;
>>>>>> + int ret;
>>>>>> +};
>>>>>> +
>>>>>> +static void amdgpu_device_queue_gpu_recover_work(struct
>>>>>> work_struct *work)
>>>>>> +{
>>>>>> + struct amdgpu_recover_work_struct *recover_work =
>>>>>> container_of(work, struct amdgpu_recover_work_struct, base);
>>>>>> +
>>>>>> + recover_work->ret =
>>>>>> amdgpu_device_gpu_recover_imp(recover_work->adev,
>>>>>> recover_work->job);
>>>>>> +}
>>>>>> +/*
>>>>>> + * Serialize gpu recover into reset domain single threaded wq
>>>>>> + */
>>>>>> +int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> + struct amdgpu_job *job)
>>>>>> +{
>>>>>> + struct amdgpu_recover_work_struct work = {.adev = adev, .job
>>>>>> = job};
>>>>>> +
>>>>>> + INIT_WORK(&work.base, amdgpu_device_queue_gpu_recover_work);
>>>>>> +
>>>>>> + if (!queue_work(adev->reset_domain.wq, &work.base))
>>>>>> + return -EAGAIN;
>>>>>> +
>>>>>
>>>>> The decision to schedule a reset is made at this point. Subsequent
>>>>> accesses to hardware may not be reliable. So should the flag
>>>>> in_reset be set here itself rather than waiting for the work to
>>>>> start execution?
>>>>
>>>> No, when we race and lose the VM is completely lost and probably
>>>> restarted by the hypervisor.
>>>>
>>>> And when we race and win we properly set the flag before signaling
>>>> the hypervisor that it can continue with the reset.
>>>>
>>>
>>> I was talking about baremetal case. When this was synchronous,
>>> in_reset flag is set as one of the first things and amdgpu_in_reset
>>> is checked to prevent further hardware accesses. This design only
>>> changes the recover part and doesn't change the hardware perspective.
>>
>>> Potential accesses from other processes need to be blocked as soon
>>> as we determine a reset is required.
>>
>> That's an incorrect assumption.
>>
>> Accessing the hardware is perfectly ok as long as the reset hasn't
>> started yet. In other words even when the hardware is locked up you
>> can still happily read/write registers or access the VRAM BAR.
>>
>
> Not sure if that is 100% correct like a recovery triggered by RAS
> error (depends on the access done).
Yeah, for RAS there should just be one error triggered as far as I know.
Otherwise we have a problem because there can be any number of hardware
accesses between RAS interrupt and setting the in_reset flag anyway.
There are some cases where we shouldn't access the hardware any more.
E.g. we had cases of static discharge with external mining cases for
example.
But in those case the hardware is so severely gone that the user should
either replace it completely or at least power cycle the system.
Regards,
Christian.
>
> Thanks,
> Lijo
>
>> Only when the hardware is currently performing a reset, then we can't
>> touch it or there might be unfortunate consequences (usually complete
>> system lockup).
>>
>> Regards,
>> Christian.
>>
>>> Are we expecting the work to be immediately executed and set the flags?
>>>
>>> Thanks,
>>> Lijo
>>>
>>>>> Also, what about having the reset_active or in_reset flag in the
>>>>> reset_domain itself?
>>>>
>>>> Of hand that sounds like a good idea.
>>>>
>>>> Regards,
>>>> Christian.
>>>>
>>>>>
>>>>> Thanks,
>>>>> Lijo
>>>>>
>>>>>> + flush_work(&work.base);
>>>>>> +
>>>>>> + return work.ret;
>>>>>> +}
>>>>>> +
>>>>>> /**
>>>>>> * amdgpu_device_get_pcie_info - fence pcie info about the PCIE
>>>>>> slot
>>>>>> *
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> index bfc47bea23db..38c9fd7b7ad4 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> @@ -63,7 +63,7 @@ static enum drm_gpu_sched_stat
>>>>>> amdgpu_job_timedout(struct drm_sched_job *s_job)
>>>>>> ti.process_name, ti.tgid, ti.task_name, ti.pid);
>>>>>> if (amdgpu_device_should_recover_gpu(ring->adev)) {
>>>>>> - amdgpu_device_gpu_recover(ring->adev, job);
>>>>>> + amdgpu_device_gpu_recover_imp(ring->adev, job);
>>>>>> } else {
>>>>>> drm_sched_suspend_timeout(&ring->sched);
>>>>>> if (amdgpu_sriov_vf(adev))
>>>>>>
>>>>
>>
^ permalink raw reply
* Re: [RFC v2 4/8] drm/amdgpu: Serialize non TDR gpu recovery with TDRs
From: Christian König @ 2022-01-05 13:41 UTC (permalink / raw)
To: Lazar, Lijo, Andrey Grodzovsky, dri-devel, amd-gfx
Cc: horace.chen, daniel, Monk.Liu
In-Reply-To: <6f64e1d2-eec5-04da-2497-9ee2e7dfcf12@amd.com>
Am 05.01.22 um 14:26 schrieb Lazar, Lijo:
> On 1/5/2022 6:45 PM, Christian König wrote:
>> Am 05.01.22 um 14:11 schrieb Lazar, Lijo:
>>> On 1/5/2022 6:01 PM, Christian König wrote:
>>>> Am 05.01.22 um 10:54 schrieb Lazar, Lijo:
>>>>> On 12/23/2021 3:35 AM, Andrey Grodzovsky wrote:
>>>>>> Use reset domain wq also for non TDR gpu recovery trigers
>>>>>> such as sysfs and RAS. We must serialize all possible
>>>>>> GPU recoveries to gurantee no concurrency there.
>>>>>> For TDR call the original recovery function directly since
>>>>>> it's already executed from within the wq. For others just
>>>>>> use a wrapper to qeueue work and wait on it to finish.
>>>>>>
>>>>>> v2: Rename to amdgpu_recover_work_struct
>>>>>>
>>>>>> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
>>>>>> ---
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 33
>>>>>> +++++++++++++++++++++-
>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 2 +-
>>>>>> 3 files changed, 35 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> index b5ff76aae7e0..8e96b9a14452 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>>>>> @@ -1296,6 +1296,8 @@ bool amdgpu_device_has_job_running(struct
>>>>>> amdgpu_device *adev);
>>>>>> bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev);
>>>>>> int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> struct amdgpu_job* job);
>>>>>> +int amdgpu_device_gpu_recover_imp(struct amdgpu_device *adev,
>>>>>> + struct amdgpu_job *job);
>>>>>> void amdgpu_device_pci_config_reset(struct amdgpu_device *adev);
>>>>>> int amdgpu_device_pci_reset(struct amdgpu_device *adev);
>>>>>> bool amdgpu_device_need_post(struct amdgpu_device *adev);
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> index 7c063fd37389..258ec3c0b2af 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>>>>>> @@ -4979,7 +4979,7 @@ static void amdgpu_device_recheck_guilty_jobs(
>>>>>> * Returns 0 for success or an error on failure.
>>>>>> */
>>>>>> -int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> +int amdgpu_device_gpu_recover_imp(struct amdgpu_device *adev,
>>>>>> struct amdgpu_job *job)
>>>>>> {
>>>>>> struct list_head device_list, *device_list_handle = NULL;
>>>>>> @@ -5237,6 +5237,37 @@ int amdgpu_device_gpu_recover(struct
>>>>>> amdgpu_device *adev,
>>>>>> return r;
>>>>>> }
>>>>>> +struct amdgpu_recover_work_struct {
>>>>>> + struct work_struct base;
>>>>>> + struct amdgpu_device *adev;
>>>>>> + struct amdgpu_job *job;
>>>>>> + int ret;
>>>>>> +};
>>>>>> +
>>>>>> +static void amdgpu_device_queue_gpu_recover_work(struct
>>>>>> work_struct *work)
>>>>>> +{
>>>>>> + struct amdgpu_recover_work_struct *recover_work =
>>>>>> container_of(work, struct amdgpu_recover_work_struct, base);
>>>>>> +
>>>>>> + recover_work->ret =
>>>>>> amdgpu_device_gpu_recover_imp(recover_work->adev,
>>>>>> recover_work->job);
>>>>>> +}
>>>>>> +/*
>>>>>> + * Serialize gpu recover into reset domain single threaded wq
>>>>>> + */
>>>>>> +int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
>>>>>> + struct amdgpu_job *job)
>>>>>> +{
>>>>>> + struct amdgpu_recover_work_struct work = {.adev = adev, .job
>>>>>> = job};
>>>>>> +
>>>>>> + INIT_WORK(&work.base, amdgpu_device_queue_gpu_recover_work);
>>>>>> +
>>>>>> + if (!queue_work(adev->reset_domain.wq, &work.base))
>>>>>> + return -EAGAIN;
>>>>>> +
>>>>>
>>>>> The decision to schedule a reset is made at this point. Subsequent
>>>>> accesses to hardware may not be reliable. So should the flag
>>>>> in_reset be set here itself rather than waiting for the work to
>>>>> start execution?
>>>>
>>>> No, when we race and lose the VM is completely lost and probably
>>>> restarted by the hypervisor.
>>>>
>>>> And when we race and win we properly set the flag before signaling
>>>> the hypervisor that it can continue with the reset.
>>>>
>>>
>>> I was talking about baremetal case. When this was synchronous,
>>> in_reset flag is set as one of the first things and amdgpu_in_reset
>>> is checked to prevent further hardware accesses. This design only
>>> changes the recover part and doesn't change the hardware perspective.
>>
>>> Potential accesses from other processes need to be blocked as soon
>>> as we determine a reset is required.
>>
>> That's an incorrect assumption.
>>
>> Accessing the hardware is perfectly ok as long as the reset hasn't
>> started yet. In other words even when the hardware is locked up you
>> can still happily read/write registers or access the VRAM BAR.
>>
>
> Not sure if that is 100% correct like a recovery triggered by RAS
> error (depends on the access done).
Yeah, for RAS there should just be one error triggered as far as I know.
Otherwise we have a problem because there can be any number of hardware
accesses between RAS interrupt and setting the in_reset flag anyway.
There are some cases where we shouldn't access the hardware any more.
E.g. we had cases of static discharge with external mining cases for
example.
But in those case the hardware is so severely gone that the user should
either replace it completely or at least power cycle the system.
Regards,
Christian.
>
> Thanks,
> Lijo
>
>> Only when the hardware is currently performing a reset, then we can't
>> touch it or there might be unfortunate consequences (usually complete
>> system lockup).
>>
>> Regards,
>> Christian.
>>
>>> Are we expecting the work to be immediately executed and set the flags?
>>>
>>> Thanks,
>>> Lijo
>>>
>>>>> Also, what about having the reset_active or in_reset flag in the
>>>>> reset_domain itself?
>>>>
>>>> Of hand that sounds like a good idea.
>>>>
>>>> Regards,
>>>> Christian.
>>>>
>>>>>
>>>>> Thanks,
>>>>> Lijo
>>>>>
>>>>>> + flush_work(&work.base);
>>>>>> +
>>>>>> + return work.ret;
>>>>>> +}
>>>>>> +
>>>>>> /**
>>>>>> * amdgpu_device_get_pcie_info - fence pcie info about the PCIE
>>>>>> slot
>>>>>> *
>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> index bfc47bea23db..38c9fd7b7ad4 100644
>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
>>>>>> @@ -63,7 +63,7 @@ static enum drm_gpu_sched_stat
>>>>>> amdgpu_job_timedout(struct drm_sched_job *s_job)
>>>>>> ti.process_name, ti.tgid, ti.task_name, ti.pid);
>>>>>> if (amdgpu_device_should_recover_gpu(ring->adev)) {
>>>>>> - amdgpu_device_gpu_recover(ring->adev, job);
>>>>>> + amdgpu_device_gpu_recover_imp(ring->adev, job);
>>>>>> } else {
>>>>>> drm_sched_suspend_timeout(&ring->sched);
>>>>>> if (amdgpu_sriov_vf(adev))
>>>>>>
>>>>
>>
^ permalink raw reply
* Re: [PATCH] serial: imx: reduce RX interrupt frequency
From: Marc Kleine-Budde @ 2022-01-05 13:40 UTC (permalink / raw)
To: Sergey Organov
Cc: Greg Kroah-Hartman, Fabio Estevam, linux-serial, Jiri Slaby,
Tomasz Moń, k.drobinski, NXP Linux Team,
Pengutronix Kernel Team, Shawn Guo, Sascha Hauer
In-Reply-To: <87pmp64831.fsf@osv.gnss.ru>
[-- Attachment #1: Type: text/plain, Size: 2178 bytes --]
On 05.01.2022 16:37:22, Sergey Organov wrote:
> Marc Kleine-Budde <mkl@pengutronix.de> writes:
>
> > On 05.01.2022 16:00:34, Sergey Organov wrote:
> >> Greg Kroah-Hartman <gregkh@linuxfoundation.org> writes:
> >>
> >> > On Tue, Jan 04, 2022 at 11:32:03AM +0100, Tomasz Moń wrote:
> >> >> Triggering RX interrupt for every byte defeats the purpose of aging
> >> >> timer and leads to interrupt starvation at high baud rates.
> >> >>
> >> >> Increase receiver trigger level to 8 to increase the minimum period
> >> >> between RX interrupts to 8 characters time. The tradeoff is increased
> >> >> latency. In the worst case scenario, where RX data has intercharacter
> >> >> delay slightly less than aging timer (8 characters time), it can take
> >> >> up to 63 characters time for the interrupt to be raised since the
> >> >> reception of the first character.
> >> >
> >> > Why can't you do this dynamically based on the baud rate so as to always
> >> > work properly for all speeds without increased delays for slower ones?
> >>
> >> I don't like the idea of dynamic threshold as I don't think increased
> >> complexity is worth it.
> >>
> >> In fact the threshold works "properly" on any baud rate, as maximum
> >> latency is proportional to the current baud rate, and if somebody does
> >> care about *absolute* latency, increasing baud rate is the primary
> >> solution.
> >
> > Nope - this only works if you have both sides under control.... Which is
> > not the case in our $CUSTROMER's use case.
>
> Yep, if one can't use primary solution, they need to come up with
> something else.
Please don't break existing use cases while improving the kernel.
> Where is that historical "low-latency" bit, by the
> way?
...has been removed:
https://lore.kernel.org/all/20210105120239.28031-11-jslaby@suse.cz/
Is there an option to bring that back?
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply
* Re: [Buildroot] candidate packages : ros2 and wxwidgets
From: Romain Naour @ 2022-01-05 13:40 UTC (permalink / raw)
To: Thomas Petazzoni, Thierry Bultel; +Cc: buildroot
In-Reply-To: <20220105142924.4b11ed83@windsurf>
Hello,
Le 05/01/2022 à 14:29, Thomas Petazzoni a écrit :
> Hello Thierry,
>
> On Wed, 5 Jan 2022 10:46:46 +0100
> Thierry Bultel <thierry.bultel@linatsea.fr> wrote:
>
>> For a number of companies, I can see a growing interest in having ros2
>> support in buildroot.
>> Currently, people wanting to prototype (or make a product) a robotics
>> applications, are stuck
>> to either yocto, or, worse, to a desktop-like distribution.
We also have some companies interested by ROS2 but they are using meta-ros Yocto
layer.
>>
>> Another topic is charts displaying for sailing. The most famous
>> application (mostly used
>> on raspberry by sailors) is OpenCpn, which is great but relies on wxWidgets.
>>
>> Whereas I am looking for a sponsor for adding ros2 to buildroot,
>> (because it is a quite significant work,
>> that implies to add a new build framework), I am thinking about using my
>> (little) free time for wxWidgets (and OpenCpn later).
>> There has been an attempt is the past
>> (https://bugs.busybox.net/show_bug.cgi?id=261) but it does not
>> seem to have lead to anything else since that time.
>>
>> What are your thought about these both packages ? Any ideas, or links to
>> some WIP stuff ?
>
> These packages would certainly be very welcome. ROS2 especially makes a
> lot of sense.
>
> Some prior work:
>
> https://github.com/mchalain/br_ros
> http://lists.busybox.net/pipermail/buildroot/2019-March/246497.html
This is for ROS (v1), this series must be reworked for ROS2.
Marc had no time for cleaning and upstreaming this series :-/
>
> I'll be happy to help in the review of such packages.
Same here, I'll try to help.
Best regards,
Romain
>
> Best regards,
>
> Thomas
>
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply
* Re: slow snd_rawmidi_drain() for VirMidi devcies
From: Stefan Sauer @ 2022-01-05 13:39 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
In-Reply-To: <s5hiluzjy3d.wl-tiwai@suse.de>
- 28,78% 0,00% rawmidi_alsa [snd_rawmidi] [k]
snd_rawmidi_drain_output
- snd_rawmidi_drain_output
- 26,59% msleep
schedule_timeout
schedule
+ __schedule
+ 2,13% schedule_timeout
Seems to be because of:
https://github.com/torvalds/linux/blob/master/sound/core/rawmidi.c#L244
if (substream->ops->drain)
substream->ops->drain(substream);
else
msleep(50);
It see what fileops have no drain impl:
https://github.com/torvalds/linux/blob/master/sound/core/rawmidi.c#L1708
and I see
https://github.com/torvalds/linux/blob/master/sound/core/seq/seq_virmidi.c#L329
that define no drain op. Not which ones are actually used here :/
The docs confirm teh 50 ms wait though:
https://github.com/torvalds/linux/blob/master/Documentation/sound/kernel-api/writing-an-alsa-driver.rst#drain-callback
would it make sense to have a dummy drain function for the seq_virmidi
output ops?
Stefan
Am Di., 4. Jan. 2022 um 16:54 Uhr schrieb Takashi Iwai <tiwai@suse.de>:
> On Sat, 01 Jan 2022 12:49:13 +0100,
> Stefan Sauer wrote:
> >
> > hi,
> >
> > I've tried to link BitwigStudio to the webapp cables.gl over virmidi.
> > Unfortunately Bitwig Studio only supports rawmidi. What I discovered is
> > that there is a strange slowness when sending data to virmidi caused
> > by snd_rawmidi_drain().
> >
> > I've posted two tiny, self-contained c apps to:
> > https://gist.github.com/ensonic/c7588b87fa6c1fa94a8f753b1e0aa394
> > See some examples below. 2 observations:
> > * snd_rawmidi_type() is *not* reporting virmidi as VIRTUAL
> > * snd_rawmidi_drain() takes about 60ms! on virtual vs. less that 0.1 ms
> on
> > usb midi (I checked all my hw midi and the worst was avg=1ms on physical
> > midi image unitor8)
> >
> > When comparing the implementations:
> >
> https://github.com/alsa-project/alsa-lib/blob/master/src/rawmidi/rawmidi_virt.c#L173
> >
> https://github.com/alsa-project/alsa-lib/blob/master/src/rawmidi/rawmidi_hw.c#L164
> > I see that the hw one results in an IOCTL which I can see when striking
> the
> > code and I wonder if this is the root cause? Why is rawmidi_virt.c not
> used
> > for virmidi?
> > >From poking at snd_rawmidi_open_conf() I have not yet figured where
> this is
> > decided ....
> >
> > Stefan
> >
> > > amidi -l
> > Dir Device Name
> > IO hw:0,0,0 Scarlett 18i20 USB MIDI 1
> > IO hw:3,0,0 nanoKEY2 nanoKEY2 _ KEYBOARD
> > IO hw:5,0,0 nanoKONTROL nanoKONTROL _ SLIDE
> > IO hw:10,0 Virtual Raw MIDI (16 subdevices)
> > IO hw:11,0 Virtual Raw MIDI (16 subdevices)
> >
> > # using direct i/o to virmidi - all good
> > > ./rawmidi_oss /dev/midi11 0
> > Using device '/dev/midi11' without draining
> > write took min= 0.0015 ms, avg= 0.0016 ms, max= 0.0110 ms
> > > ./rawmidi_oss /dev/midi11 1
> > Using device '/dev/midi11' with draining
> > write took min= 0.0015 ms, avg= 0.0017 ms, max= 0.0101 ms
> > drain took min= 0.0001 ms, avg= 0.0001 ms, max= 0.0008 ms
> >
> > # using snd_rawmidi to virmidi - slow drain operations
> > > ./rawmidi_alsa hw:11,0 0
> > Using device 'hw:11,0' without draining
> > SND_RAWMIDI_TYPE_HW
> > write took min= 0.0010 ms, avg= 0.0011 ms, max= 0.0056 ms
> > > ./rawmidi_alsa hw:11,0 1
> > Using device 'hw:11,0' with draining
> > SND_RAWMIDI_TYPE_HW
> > write took min= 0.0016 ms, avg= 0.0040 ms, max= 0.0077 ms
> > drain took min= 55.9951 ms, avg= 60.4330 ms, max= 64.0653 ms
> >
> > # using snd_rawmidi to usb hw - all good
> > > ./rawmidi_alsa hw:3,0 0
> > Using device 'hw:3,0' without draining
> > SND_RAWMIDI_TYPE_HW
> > write took min= 0.0012 ms, avg= 0.0015 ms, max= 0.0121 ms
> > > ./rawmidi_alsa hw:3,0 1
> > Using device 'hw:3,0' with draining
> > SND_RAWMIDI_TYPE_HW
> > write took min= 0.0024 ms, avg= 0.0032 ms, max= 0.0110 ms
> > drain took min= 0.0293 ms, avg= 0.0636 ms, max= 0.2277 ms
>
> This kind of thing needs profiling. You can try perf or whatever
> available, and identify which call takes long. My wild guess is
> something about snd_seq_sync_output_queue(), maybe poll syscall takes
> unexpected long.
>
>
> thanks,
>
> Takashi
>
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
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.