Submitting Patches to Linux
We currently submit patches for Linux from our next branch. I try to give a short overview about it using some patches submitted to GregKH.
Following steps must always be done:
- get the linux-integration repository (we assume that the linux branch is up to date)
- get the newest patches from next
- merge next into linux
- check for compat code
- check difference with next
- tag the current commit
- rebase on top of previous tag
- squash/cleanup patches
- check if all versions compile cleanly against a current version of linux-next and sparse (cgcc)
- format patches
- check commit messages author/signed-off-by of patches
- Add "Staging: batman-adv: " before each commit subject
- get current version of linux-next
- create working branch on linux-next
- apply all patches on linux next
- check if all patches build again with linux next
- format patches on top of linux-next master
- check if all patches are checkpatch.pl clean
- submit patches
get the linux-integration repository
'-(%)-> git clone git+ssh://git@open-mesh.net/srv/git/ecsv/linux-merge.git Initialized empty Git repository in /home/sven/tmp/linux-merge/.git/ remote: Counting objects: 1544059, done. remote: Compressing objects: 100% (252781/252781), done. .... '-(%)-> cd linux-merge
get the newest patches from next
'-(%)-(linux)> git checkout -b next --track origin/next Branch next set up to track remote branch next from origin. Switched to a new branch 'next' '-(%)-(next)> git pull http://git.open-mesh.net/batman-adv.git next From http://git.open-mesh.net/batman-adv.git * branch next -> FETCH_HEAD Updating 1a0a622..9ec2d8f Fast-forward Makefile | 34 +++++++++++++++++++++------------- Makefile.kbuild | 2 +- aggregation.h | 5 +++++ bat_debugfs.h | 6 +++--- bat_sysfs.h | 6 +++--- bitarray.h | 4 ++++ compat.h | 5 +++++ hard-interface.h | 5 +++++ hash.h | 8 +++++--- icmp_socket.h | 5 +++++ main.c | 2 +- main.h | 13 +++++++++---- originator.c | 6 ++---- originator.h | 5 +++++ packet.h | 5 +++++ ring_buffer.h | 5 +++++ routing.c | 6 +++--- routing.h | 5 +++++ send.c | 14 +++++++------- send.h | 5 +++++ soft-interface.c | 6 +++--- soft-interface.h | 7 ++++++- translation-table.c | 3 +-- translation-table.h | 5 +++++ types.h | 6 +++--- vis.c | 14 +++++++------- vis.h | 7 ++++++- 27 files changed, 135 insertions(+), 59 deletions(-) '-(%)-(next)> git push origin next Counting objects: 80, done. Delta compression using up to 2 threads. Compressing objects: 100% (52/52), done. Writing objects: 100% (52/52), 8.32 KiB, done. Total 52 (delta 43), reused 0 (delta 0) Generating commit mails...done fatal: Not a valid object name master:drivers/staging/batman-adv/TODO To git+ssh://git@open-mesh.net/srv/git/ecsv/linux-merge.git 1a0a622..9ec2d8f next -> next
merge next into linux
'-(%)-(next)> git checkout linux Checking out files: 100% (32337/32337), done. Switched to branch 'linux' '-(%)-(linux)> git merge -s subtree next Auto-merging drivers/staging/batman-adv/Makefile CONFLICT (content): Merge conflict in drivers/staging/batman-adv/Makefile CONFLICT (delete/modify): drivers/staging/batman-adv/Makefile.kbuild deleted in HEAD and modified in next. Version next of drivers/staging/batman-adv/Makefile.kbuild left in tree. CONFLICT (delete/modify): drivers/staging/batman-adv/compat.h deleted in HEAD and modified in next. Version next of drivers/staging/batman-adv/compat.h left in tree. Auto-merging drivers/staging/batman-adv/main.c Auto-merging drivers/staging/batman-adv/originator.c Auto-merging drivers/staging/batman-adv/routing.c Auto-merging drivers/staging/batman-adv/send.c Auto-merging drivers/staging/batman-adv/soft-interface.c Auto-merging drivers/staging/batman-adv/translation-table.c Auto-merging drivers/staging/batman-adv/vis.c Automatic merge failed; fix conflicts and then commit the result. '-(%)-(linux)> git rm drivers/staging/batman-adv/Makefile.kbuild drivers/staging/batman-adv/compat.h drivers/staging/batman-adv/Makefile: needs merge drivers/staging/batman-adv/Makefile.kbuild: needs merge drivers/staging/batman-adv/compat.h: needs merge rm 'drivers/staging/batman-adv/Makefile.kbuild' rm 'drivers/staging/batman-adv/compat.h' '-(%)-(linux)> vim drivers/staging/batman-adv/Makefile '-(%)-(linux)> git add drivers/staging/batman-adv/Makefile '-(%)-(linux)> git commit [linux f2204f0] Merge branch 'next' into linux
check for compat code
git grep compat.h drivers/staging/batman-adv/ drivers/staging/batman-adv/CHANGELOG:* all kernel version compatibility functions has been moved to compat.h
check difference with next
git diff next: linux:drivers/staging/batman-adv/
Here you should see the
- new added Kconfig, TODO, sysfs-class-net-batman-adv and sysfs-class-net-mesh
- A special Makefile which only contains obj-m and a batman-adv-objs line
- removed Makefile.kbuild, bat_printk.c and compat.h
- removed references to compat.h from each file
- README file with removed parts about how it can be compiled outside of the kernel, against which version it compiles and information how you compile the module outside of the kernel with debugging support
tag the current commit
'-(%)-(linux)> git describe --tags GregKH-20100618-10-gf2204f0 '-(%)-(linux)> git tag GregKH-20100625 '-(%)-(linux)> git push origin GregKH-20100625 Counting objects: 24, done. Delta compression using up to 2 threads. Compressing objects: 100% (12/12), done. Writing objects: 100% (12/12), 1.75 KiB, done. Total 12 (delta 11), reused 0 (delta 0) Generating commit mails...done fatal: Not a valid object name master:drivers/staging/batman-adv/TODO To git+ssh://git@open-mesh.net/srv/git/ecsv/linux-merge.git * [new tag] GregKH-20100625 -> GregKH-20100625
rebase on top of previous tag
'-(%)-(linux)> git checkout -b patches '-(%)-(patches)> git rebase -s subtree GregKH-20100618 First, rewinding head to replay your work on top of it... Auto-merging drivers/staging/batman-adv/main.c Auto-merging drivers/staging/batman-adv/routing.c Auto-merging drivers/staging/batman-adv/send.c Auto-merging drivers/staging/batman-adv/soft-interface.c Auto-merging drivers/staging/batman-adv/vis.c [detached HEAD 166b2ca] batman-adv: Convert names from Java to C style Author: Antonio Quartulli <ordex@ritirata.org> 7 files changed, 18 insertions(+), 18 deletions(-) Committed: 0001 batman-adv: Convert names from Java to C style Auto-merging drivers/staging/batman-adv/translation-table.c [detached HEAD 5cd6523] batman-adv: Avoid rounding issues for local hna timeout Author: Linus Lüssing <linus.luessing@web.de> 1 files changed, 1 insertions(+), 1 deletions(-) Committed: 0002 batman-adv: Avoid rounding issues for local hna timeout Auto-merging drivers/staging/batman-adv/originator.c Auto-merging drivers/staging/batman-adv/translation-table.c Auto-merging drivers/staging/batman-adv/vis.c [detached HEAD 83d1bc8] batman-adv: Lower resolution for timeouts Author: Simon Wunderlich <siwu@hrz.tu-chemnitz.de> 5 files changed, 7 insertions(+), 10 deletions(-) Committed: 0003 batman-adv: Lower resolution for timeouts Auto-merging drivers/staging/batman-adv/send.c [detached HEAD 9e9605f] batman-adv: replace manual calculation by msecs_to_jiffies() for better readability Author: Marek Lindner <lindner_marek@yahoo.de> 1 files changed, 4 insertions(+), 4 deletions(-) Committed: 0004 batman-adv: replace manual calculation by msecs_to_jiffies() for better readability [detached HEAD 043aa9a] Staging: batman-adv: Add sysfs abi documentation about bonding Author: Marek Lindner <lindner_marek@yahoo.de> 1 files changed, 8 insertions(+), 0 deletions(-) Committed: 0005 Staging: batman-adv: Add sysfs abi documentation about bonding [detached HEAD f6d8bab] batman-adv: adapting source version to revised versioning scheme Author: Marek Lindner <lindner_marek@yahoo.de> 1 files changed, 1 insertions(+), 1 deletions(-) Committed: 0006 batman-adv: adapting source version to revised versioning scheme Auto-merging drivers/staging/batman-adv/Makefile CONFLICT (content): Merge conflict in drivers/staging/batman-adv/Makefile When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort". '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> vim drivers/staging/batman-adv/Makefile '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> git add drivers/staging/batman-adv/Makefile '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> git rebase -s subtree --continue Already applied: 0007 batman-adv: Use nproc to get number of available processors CONFLICT (delete/modify): drivers/staging/batman-adv/compat.h deleted in GregKH-20100618 and modified in HEAD~1. Version HEAD~1 of drivers/staging/batman-adv/compat.h left in tree. When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort". '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> git rm drivers/staging/batman-adv/compat.h drivers/staging/batman-adv/compat.h: needs merge rm 'drivers/staging/batman-adv/compat.h' '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> git rebase -s subtree --continue [detached HEAD a85d1b4] batman-adv: Add include guards to all header files 17 files changed, 78 insertions(+), 12 deletions(-) Committed: 0008 batman-adv: Add include guards to all header files Auto-merging drivers/staging/batman-adv/Makefile CONFLICT (content): Merge conflict in drivers/staging/batman-adv/Makefile CONFLICT (delete/modify): drivers/staging/batman-adv/Makefile.kbuild deleted in GregKH-20100618 and modified in HEAD~0. Version HEAD~0 of drivers/staging/batman-adv/Makefile.kbuild left in tree. When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort". '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> git rm drivers/staging/batman-adv/Makefile.kbuild drivers/staging/batman-adv/Makefile: needs merge drivers/staging/batman-adv/Makefile.kbuild: needs merge rm 'drivers/staging/batman-adv/Makefile.kbuild' '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> vim drivers/staging/batman-adv/Makefile '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> git add drivers/staging/batman-adv/Makefile '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> git rebase -s subtree --continue Already applied: 0009 batman-adv: Add support for git revision string All done. '-(%)-(patches)> git diff linux
The last diff must be empty or we did something wrong.
squash/cleanup patches
'-(%)-(patches)> git rebase -i GregKH-20100618 Successfully rebased and updated refs/heads/patches
check if all versions compile cleanly against a current version of linux-next and sparse (cgcc)
'-(%)-(patches)> git rev-list --reverse GregKH-20100618.. 166b2caa61fce5260aed4e119671764331fdc62a 5cd65234b12021fe1f28e28e455a6b6a06712ec2 83d1bc8bb328bcfa42be492fe0e2648b77c18af2 9e9605f0fe000f1097cb43271540ab2b76b2a782 043aa9a54a5296c6027a5bcd808b8d29cea8a474 f6d8baba5fce6161bc2cee9c97e0afbc139942c0 a85d1b45e4cde0c882a41baaefeec0cd5502416f '-(%)-(patches)> cd drivers/staging/batman-adv/ '-(%)-(patches)> git checkout 166b2caa61fce5260aed4e119671764331fdc62a Previous HEAD position was a85d1b4... batman-adv: Avoid rounding issues for local hna timeout HEAD is now at 166b2ca... batman-adv: Convert names from Java to C style '-(%)-(166b2caa61fce5260aed4e119671764331fdc62a)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` ... '-(%)-(166b2caa61fce5260aed4e119671764331fdc62a)> git checkout 5cd65234b12021fe1f28e28e455a6b6a06712ec2 Previous HEAD position was 166b2ca... batman-adv: Convert names from Java to C style HEAD is now at 5cd6523... batman-adv: Avoid rounding issues for local hna timeout '-(%)-(83d1bc8bb328bcfa42be492fe0e2648b77c18af2)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` .... '-(%)-(83d1bc8bb328bcfa42be492fe0e2648b77c18af2)> git checkout 9e9605f0fe000f1097cb43271540ab2b76b2a782 Previous HEAD position was 83d1bc8... batman-adv: Lower resolution for timeouts HEAD is now at 9e9605f... batman-adv: replace manual calculation by msecs_to_jiffies() for better readability '-(%)-(9e9605f0fe000f1097cb43271540ab2b76b2a782)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` .... '-(%)-(9e9605f0fe000f1097cb43271540ab2b76b2a782)> git checkout 043aa9a54a5296c6027a5bcd808b8d29cea8a474 Previous HEAD position was 9e9605f... batman-adv: replace manual calculation by msecs_to_jiffies() for better readability HEAD is now at 043aa9a... Staging: batman-adv: Add sysfs abi documentation about bonding '-(%)-(043aa9a54a5296c6027a5bcd808b8d29cea8a474)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` ... '-(%)-(043aa9a54a5296c6027a5bcd808b8d29cea8a474)> git checkout f6d8baba5fce6161bc2cee9c97e0afbc139942c0 Previous HEAD position was 043aa9a... Staging: batman-adv: Add sysfs abi documentation about bonding HEAD is now at f6d8bab... batman-adv: adapting source version to revised versioning scheme '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` ... '-(%)-(f6d8baba5fce6161bc2cee9c97e0afbc139942c0)> git checkout a85d1b45e4cde0c882a41baaefeec0cd5502416f Previous HEAD position was f6d8bab... batman-adv: adapting source version to revised versioning scheme HEAD is now at a85d1b4... batman-adv: Add include guards to all header files '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> make CONFIG_BATMAN_ADV=m CC=cgcc -C /home/sven/tmp/linux-next M=`pwd` ... '-(%)-(a85d1b45e4cde0c882a41baaefeec0cd5502416f)> git checkout patches Switched to branch 'patches' '-(%)-(patches)> cd ../../../
format patches
'-(%)-(patches)> git format-patch --patience -s -M GregKH-20100618 0001-batman-adv-Convert-names-from-Java-to-C-style.patch 0002-batman-adv-Avoid-rounding-issues-for-local-hna-timeo.patch 0003-batman-adv-Lower-resolution-for-timeouts.patch 0004-batman-adv-replace-manual-calculation-by-msecs_to_ji.patch 0005-Staging-batman-adv-Add-sysfs-abi-documentation-about.patch 0006-batman-adv-adapting-source-version-to-revised-versio.patch 0007-batman-adv-Add-include-guards-to-all-header-files.patch '-(%)-(patches)> vim 00*.patch
Usually I add "Staging: batman-adv: " right when checking the signed-off-by and author (from) line.
apply all patches on linux next
'-(%)-(patches)> cd ../linux-next '-(%)-(master)> git fetch '-(%)-(master)> git reset --hard origin/master HEAD is now at c3116ae Add linux-next specific files for 20100625 '-(%)-(master)> git checkout -b greg Switched to a new branch 'greg' '-(%)-(greg)> git am -3 ../linux-merge/00*.patch Applying: Staging: batman-adv: Convert names from Java to C style Applying: Staging: batman-adv: Avoid rounding issues for local hna timeout Applying: Staging: batman-adv: Lower resolution for timeouts Applying: Staging: batman-adv: replace manual calculation by msecs_to_jiffies() for better readability Applying: Staging: batman-adv: Add sysfs abi documentation about bonding Applying: Staging: batman-adv: adapting source version to revised versioning scheme Applying: Staging: batman-adv: Add include guards to all header files
check if all patches build again with linux next
'-(%)-(greg)> make ....
format patches on top of linux-next master
'-(%)-(greg)> git format-patch -s --patience -M master 0001-Staging-batman-adv-Convert-names-from-Java-to-C-styl.patch 0002-Staging-batman-adv-Avoid-rounding-issues-for-local-h.patch 0003-Staging-batman-adv-Lower-resolution-for-timeouts.patch 0004-Staging-batman-adv-replace-manual-calculation-by-mse.patch 0005-Staging-batman-adv-Add-sysfs-abi-documentation-about.patch 0006-Staging-batman-adv-adapting-source-version-to-revise.patch 0007-Staging-batman-adv-Add-include-guards-to-all-header-.patch '-(%)-(greg)> ./scripts/checkpatch.pl --strict 00*.patch total: 0 errors, 0 warnings, 0 checks, 135 lines checked 0001-Staging-batman-adv-Convert-names-from-Java-to-C-styl.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 8 lines checked 0002-Staging-batman-adv-Avoid-rounding-issues-for-local-h.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 55 lines checked 0003-Staging-batman-adv-Lower-resolution-for-timeouts.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 19 lines checked 0004-Staging-batman-adv-replace-manual-calculation-by-mse.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 14 lines checked 0005-Staging-batman-adv-Add-sysfs-abi-documentation-about.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 8 lines checked 0006-Staging-batman-adv-adapting-source-version-to-revise.patch has no obvious style problems and is ready for submission. total: 0 errors, 0 warnings, 0 checks, 239 lines checked 0007-Staging-batman-adv-Add-include-guards-to-all-header-.patch has no obvious style problems and is ready for submission.
submit patches
'-(%)-(greg)> git shortlog master.. > shortlog '-(%)-(greg)> git diff --stat master.. >> shortlog '-(%)-(greg)> git send-email --cc=b.a.t.m.a.n@lists.open-mesh.net --to greg@kroah.com --compose 00*.patch
Now I will write something like
From Sven Eckelmann <sven.eckelmann@gmx.de> # This line is ignored.
GIT: Lines beginning in "GIT:" will be removed.
GIT: Consider including an overall diffstat or table of contents
GIT: for the patch you are writing.
GIT:
GIT: Clear the body content if you don't wish to send a summary.
From: Sven Eckelmann <sven.eckelmann@gmx.de>
Subject: Staging: batman-adv for 2.6.36 (3)
In-Reply-To:
Hi,
here are patches targeted for 2.6.36. All patches needed for that patchset are
already part of your staging-next tree.
All patches are cleanup patches and no new feature is added.
thanks,
Sven
Antonio Quartulli (1):
Staging: batman-adv: Convert names from Java to C style
Linus Lüssing (1):
Staging: batman-adv: Avoid rounding issues for local hna timeout
Marek Lindner (4):
Staging: batman-adv: replace manual calculation by msecs_to_jiffies() for better readability
Staging: batman-adv: Add sysfs abi documentation about bonding
Staging: batman-adv: adapting source version to revised versioning scheme
Staging: batman-adv: fix early debugfs deinitialization
Simon Wunderlich (1):
Staging: batman-adv: Lower resolution for timeouts
Sven Eckelmann (1):
Staging: batman-adv: Add include guards to all header files
drivers/staging/batman-adv/aggregation.h | 5 +++++
drivers/staging/batman-adv/bat_debugfs.h | 6 +++---
drivers/staging/batman-adv/bat_sysfs.h | 6 +++---
drivers/staging/batman-adv/bitarray.h | 4 ++++
drivers/staging/batman-adv/hard-interface.h | 5 +++++
drivers/staging/batman-adv/hash.h | 8 +++++---
drivers/staging/batman-adv/icmp_socket.h | 5 +++++
drivers/staging/batman-adv/main.c | 4 ++--
drivers/staging/batman-adv/main.h | 13 +++++++++----
drivers/staging/batman-adv/originator.c | 6 ++----
drivers/staging/batman-adv/originator.h | 5 +++++
drivers/staging/batman-adv/packet.h | 5 +++++
drivers/staging/batman-adv/ring_buffer.h | 5 +++++
drivers/staging/batman-adv/routing.c | 6 +++---
drivers/staging/batman-adv/routing.h | 5 +++++
drivers/staging/batman-adv/send.c | 14 +++++++-------
drivers/staging/batman-adv/send.h | 5 +++++
drivers/staging/batman-adv/soft-interface.c | 6 +++---
drivers/staging/batman-adv/soft-interface.h | 7 ++++++-
drivers/staging/batman-adv/sysfs-class-net-mesh | 8 ++++++++
drivers/staging/batman-adv/translation-table.c | 3 +--
drivers/staging/batman-adv/translation-table.h | 5 +++++
drivers/staging/batman-adv/types.h | 6 +++---
drivers/staging/batman-adv/vis.c | 14 +++++++-------
drivers/staging/batman-adv/vis.h | 7 ++++++-
25 files changed, 117 insertions(+), 46 deletions(-)
