From: Gustavo Sousa <gustavo.sousa@intel.com>
To: Jani Nikula <jani.nikula@intel.com>,
Kamil Konieczny <kamil.konieczny@linux.intel.com>,
<igt-dev@lists.freedesktop.org>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>,
Ashutosh Dixit <ashutosh.dixit@intel.com>,
Karthik B S <karthik.b.s@intel.com>,
"Kamil Konieczny" <kamil.konieczny@linux.intel.com>
Subject: Re: [PATCH i-g-t v2] scripts: Add new script for verbatim sync with kernel
Date: Fri, 15 May 2026 12:39:16 -0300 [thread overview]
Message-ID: <87fr3sptqz.fsf@intel.com> (raw)
In-Reply-To: <5815af33af2ec1fe4473edd9a77e23c06d152fa7@intel.com>
Jani Nikula <jani.nikula@intel.com> writes:
> On Fri, 15 May 2026, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
>> Kamil Konieczny <kamil.konieczny@linux.intel.com> writes:
>>
>>> From: Jani Nikula <jani.nikula@intel.com>
>>>
>>> This is a helper script used in cases when a verbatim kernel
>>> file should be copied into igt-dev.
>>>
>>> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
>>> Cc: Karthik B S <karthik.b.s@intel.com>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>> Signed-off-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>>> ---
>>> scripts/sync_with_kernel.sh | 57 +++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 57 insertions(+)
>>> create mode 100755 scripts/sync_with_kernel.sh
>>>
>>> diff --git a/scripts/sync_with_kernel.sh b/scripts/sync_with_kernel.sh
>>> new file mode 100755
>>> index 000000000..65753677c
>>> --- /dev/null
>>> +++ b/scripts/sync_with_kernel.sh
>>> @@ -0,0 +1,57 @@
>>> +#!/bin/sh
>>> +# SPDX-License-Identifier: MIT
>>> +#
>>> +# Copyright © 2026 Intel Corporation
>>> +#
>>> +# Author: Jani Nikula <jani.nikula@intel.com>
>>> +#
>>> +# Use this for verbatim copies from kernel into igt-dev-tools
>>> +# Change paths to yours, update the repos, cd to IGT, and run.
>>> +
>>> +SINCE=962601ac4c78
>>
>> So, the plan is for us to keep updating the SINCE value manually? I
>> wonder if we could do better.
>
> It's just a starting point to not go through the entire history. It'll
> find the matching commit after that. It's sufficient to update SINCE
> when it gets too slow.
Makes sense. I guess we could add a comment so that people are aware
that we don't need to update this constantly.
>
>> One idea is to try to infer it from the files in the IGT repository: for
>> each file, we can try to find the latest IGT commit in the format "...:
>> sync ... with kernel commit ...". In case we do not find any, I guess we
>> can fallback to using ..HEAD as the revision range when searching for
>> $last down below.
>>
>>> +KERNEL=$HOME/src/linux
>>> +IGT=$HOME/src/intel-gpu-tools
>>
>> I think the script should not assume specific locations for the
>> repositories. I think:
>>
>> - The location for the kernel repository should be given as an argument;
>> - We should assume that scripts/sync_with_kernel.sh is called from the
>> IGT repository and we can infer the repository toplevel directory
>> based on "$(realpath "$(dirname "${BASH_SOURCE[0]}")")" and "git
>> rev-parse --show-toplevel".
>
> Fair; I originally wrote this for myself.
>
>>> +
>>> +declare -g -A map
>>> +map["drivers/gpu/drm/i915/display/intel_vbt_defs.h"]="tools/intel_vbt_defs.h"
>>> +map["drivers/gpu/drm/i915/display/intel_dsi_vbt_defs.h"]="tools/intel_dsi_vbt_defs.h"
>>> +map["include/drm/intel/pciids.h"]="lib/pciids.h"
>>> +
>>> +cd $KERNEL
>>> +
>>> +for infile in "${!map[@]}"; do
>>> + outfile=${map[$infile]}
>>> +
>>> + echo "processing $infile -> $outfile"
>>> +
>>> + last=
>>> + for commit in $(git log --reverse --pretty=%h $SINCE..HEAD -- $infile); do
>>> + if ! git cat-file -e $commit:$infile 2>/dev/null; then
>>> + continue
>>> + fi
>>> + if git show $commit:$infile | diff -q $IGT/$outfile - >/dev/null; then
>>> + last=$commit
>>> + break
>>> + fi
>>> + done
>
> This is the bit that finds the last matching commit.
>
>>> +
>>> + if [[ -z "$last" ]]; then
>>> + echo "last update to $infile not found"
>>> + continue
>>> + fi
>>> +
>>> + for commit in $(git log --reverse --pretty=%h $last..HEAD -- $infile); do
>>
>> Do we really need the intermediate commits when synchronizing? What
>> would be the value in adding those?
>
> I wrote this at a time when I'd done a lot of refactoring kernel
> side. When each of those kernel changes needed corresponding IGT changes
> *outside* of the files being synced, it was tremendously helpful to
> split it to smaller changes.
Ah. Got it.
>
> If there's no such need, you can trivially manually squash them with git
> rebase -i, but I think it's helpful for the script to do individual
> changes.
Sounds good.
--
Gustavo Sousa
>
>>
>>> + prefix="${outfile%.*}"
>>> + base="$(basename $outfile)"
>>> + # ref=$(git cite $commit)
>>> + # alias: cite = log -1 --abbrev=12 '--format=%h (\"%s\")'
>>> + ref=$(git log -1 --abbrev=12 '--format=%h (\"%s\")' $commit)
>>> + git show $commit:$infile > $IGT/$outfile
>>> + cd $IGT
>>> + git commit -as \
>>
>> We can avoid changing directories with git -C "$IGT" commit ...
>>
>> Also, perhaps using "git commit ... -- $IGT/$outfile" is safer than
>> using "git commit -a ...".
>
> Fair.
>
> BR,
> Jani.
>
>>
>> --
>> Gustavo Sousa
>>
>>> + -m "${prefix}: sync ${base} with kernel commit $commit" \
>>> + -m "Synchronize ${base} with kernel commit:" \
>>> + -m "$ref"
>>> + cd -
>>> + done
>>> +done
>>> --
>>> 2.54.0
>
> --
> Jani Nikula, Intel
prev parent reply other threads:[~2026-05-15 15:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-14 13:27 [PATCH i-g-t v2] scripts: Add new script for verbatim sync with kernel Kamil Konieczny
2026-05-15 8:10 ` Jani Nikula
2026-05-15 10:33 ` Kamil Konieczny
2026-05-15 14:37 ` Gustavo Sousa
2026-05-15 14:53 ` Jani Nikula
2026-05-15 15:39 ` Gustavo Sousa [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fr3sptqz.fsf@intel.com \
--to=gustavo.sousa@intel.com \
--cc=ankit.k.nautiyal@intel.com \
--cc=ashutosh.dixit@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=kamil.konieczny@linux.intel.com \
--cc=karthik.b.s@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox