Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: Gustavo Sousa <gustavo.sousa@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 17:53:43 +0300	[thread overview]
Message-ID: <5815af33af2ec1fe4473edd9a77e23c06d152fa7@intel.com> (raw)
In-Reply-To: <87lddkpwlq.fsf@intel.com>

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.

> 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.

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.

>
>> +		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

  reply	other threads:[~2026-05-15 14:54 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 [this message]
2026-05-15 15:39     ` Gustavo Sousa

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=5815af33af2ec1fe4473edd9a77e23c06d152fa7@intel.com \
    --to=jani.nikula@intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=ashutosh.dixit@intel.com \
    --cc=gustavo.sousa@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --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