SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
HKG18-TR02: Upstreaming 101
Daniel Lezcano
Introduction
● This presentation is focused on upstreaming the Linux
code
● What means upstreaming ?
● The Linux kernel development cycle
● The Linux kernel code organization
● Contributions
● Writing one patch
● Writing several patches
● Conclusion
● Introducing Upstreaming 201
What is upstreaming ?
● Bring your private changes to the mainstream kernel
● Be prepared to:
○ restart from scratch
○ change your approach
○ be part of the OSS community
● No deadline, no schedule, no obligation to take a patch
○ Linux is evolution, best proposed solution wins
○ Consensus is the key
Why upstream ?
● The Linux kernel has one rule: no regression
○ The community won’t break your code
● The submitted code will be reviewed in detail
○ Better quality
● The community will give support
○ Better knowledge
● Stop porting out of tree code to newer kernel
○ Save money and effort
The Linux kernel development cycle
1. Iterative release candidates: v4.10-rcX, up to -rc8
○ Usually every Sunday
2. New release: v4.10
3. Merge window
4. New release candidate: v4.11-rc1
5. … and so on
The Linux kernel development cycle
● A new release every 3 months
● When to send patches?
○ Fixes: anytime
○ New code and cleanup: depend on the maintainer
● How long is the merge window?
○ The merge window lasts two weeks
● How to know if the merge window is happening?
○ As soon as there is a new release
● How to know if the merge window is finished?
○ As soon as there is a -rc1
The Linux kernel development cycle
● Automatic with a RSS feed:
○ https://www.kernel.org/feeds/kdist.xml
● Manually by polling:
○ https://www.kernel.org/
Linux-next : catching the issues early
● Linux-next integrates all the different trees
○ Kudos to Stephen Rothwell
● Image of the future Linux release ahead of the schedule
● Testing with this tree allows to catch the bugs before they
hit mainline
How to start contributing ?
● Code review
○ Cleanups
○ Trivial fixes
○ Potential issue
● Compilation test coverage
○ Cross compile and fix errors / warnings
○ Use rare compilation option (eg. headers_check, sparse, …)
● Communicate
○ Dig into mailing lists to help people
○ Review patches
● Test linux-next
○ Boot and fix bugs
○ Report compilation warnings
● Debug
○ https://bugzilla.kernel.org
Linaro contribution for 4.9
Total 16592 patches
kernel: 642
scripts: 65
arch: 4742
drivers: 9835
lib: 33
net: 463
mm: 34
block: 30
fs: 143
tools: 120
Source : http://www.remword.com/kps_result/
Linux code organization
● Huge number of files, more than 40,000
● Organized in subsystems
● Posix implementation
● Architecture specific
● Frameworks
● Drivers
● Network stack
Linux kernel code organization
Topmost Linux dir
kernel
IPC
net
tools
scripts arch drivers
mm
lib
block
fs
net
usb
clock
arm64
mm
arm
Linux kernel code organization
Topmost Linux dir
kernel
IPC
net
mm
block
fs
● Generic code and framework
● Scheduling
● Process management
● POSIX kernel implementation
● Interrupt handling
● Network protocols
● Memory management
● Block device management
● File systems
● Power management
Linux kernel code organization
Topmost Linux dir
lib ● Generic code
● Integer math: CRC, div
● List manipulation, red-black tree
● String manipulation
● … a lot of useful functions
Linux kernel code organization
Topmost Linux dir
tools
scripts ● Scripts to help making Linux better
○ Patch checking, header check
○ Kernel symbol size comparison
○ ...
● Userspace tools with a dependency on the
kernel sources
Linux kernel code organization
Topmost Linux dir
arch
arm64
mm
arm
● Architecture specific code
● Memory management, locks, ...
● Everything which is arch specific
● Fills the gaps left by the generic code
Linux kernel code organization
Topmost Linux dir
drivers
net
usb
clock
● All peripherals drivers
● Contains a generic framework
● Peripheral specific code based on the
generic framework above
● Base object for the driver model
What is a maintainer ?
● Responsible of a part of the Linux kernel code
● Ensure the code complies with some rules:
○ Coding style
○ Consistency
○ Consensus
○ Technically relevant
● A maintainer is a gatekeeper
Maintainership
● Each directory falls under the umbrella of a maintainer
● Each maintainer has its own tree
● Each proposed change must stick to the relevant tree
● After a kernel release, all the maintainers’ tree are merged
together : it is the merge window
● Topmost maintainer is Linus Torvalds
● All maintainers are listed in the MAINTAINERS file
Example of a merge process
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+net v4.10+tip
v4.10+tip v4.10+tip
Example of a merge process
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+net v4.10+tip
v4.10+tip v4.10+tip
patch
patch
patch
patch
Example of a merge process
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+net v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
Example of a merge process - step 1
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 1
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 1
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+tip++
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 2
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 2
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10++++
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 2
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10++++
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Example of a merge process - step 3
kernel
irq
time
drivers
clocksource
drivers
irqchip
drivers
irqchip
drivers
clocksource
kernel
irq
time
drivers
irqchip
drivers
clocksource
net
ipv4
Linus Torvald’s tree - v4.10-rc1
v4.10+tip
v4.10+tip+irqchip v4.10+tip+clocksource
net
ipv4
v4.10+net
Communication
● All development communication through the mailing lists
○ Important mailing lists for Linaro: lkml@, lakml@
○ MAINTAINERS file gives the subsystem <-> mailing list
○ http://vger.kernel.org/vger-lists.html
● Public discussion, no point-to-point
○ Reply-all always
● Opensource events: Linux Plumbers Conference,
Embedded Linux Conference, Linaro Connect
Where to begin ?
● Send a simple contribution
○ But don’t flood with too trivial patches
■ Read trivial@kernel.org rules
● One example with a checkpatch script
○ Run it in a directory where you will be working in the future
■ Eg. drivers/acpi
○ Target one ERROR spotted by checkpatch
○ Beware of false positives
for i in $(ls drivers/acpi/utils.c); do
./scripts/checkpatch -f $i
done
A simple contribution
● Compile, test first and then commit
○ Even if the change is trivial
● Write a nice description:
○ Why and what
○ One simple sentence prefixed with the subsystem name ...
○ … followed by a more detailed description
A simple contribution
● Read the Developer Certificate of Origin:
○ Documentation/process/submitting-patches.rst
● Make sure you fully understand what that means
○ You are legally responsible of your changes
● When committing, add your Signed-off-by
● Don’t send more than 2 trivial changes
A simple contribution
● A list of examples:
○ https://goo.gl/q7NqcZ : Fixing checkpatch errors
○ https://goo.gl/JCn2y : Fixing missing kfree
○ https://goo.gl/ASrbOU : Remove unused parameter
○ https://goo.gl/uiktEV : Remove pointless code
A more complex contribution
● Split the changes into several patches
● Bring the changes step by step, incremental changes
● Make sure the changes are git-bisect safe
○ Not following this rule will hurt your karma in the community
● Set the scene by cleaning up the place before sending a
complex contribution
A more complex contribution
● Some examples:
○ Changing the loopback to be multi-instantiated:
■ https://goo.gl/q6w1Ay : Change the static variable to a pointer
■ https://goo.gl/tdNth4 : Dynamically allocate the loopback
○ A cleanup to catch clocksource initialization error
■ https://lkml.org/lkml/2016/6/16/781
○ A very complex change for CPU hotplug:
■ https://goo.gl/c2NpDY : A long description of the changes
Before going to Upstreaming 201
Be sure you have the right mindset
Before going to Upstreaming 201
Be altruist
Before going to Upstreaming 201
Be polite
Before going to Upstreaming 201
Be patient
Before going to Upstreaming 201
Be humble
Before going to Upstreaming 201
Be factual
Before going to Upstreaming 201
Always take into account the
comments
Before going to Upstreaming 201
Don’t send competing patches,
find a consensus
Before going to Upstreaming 201
● Read all the documentation Documentation/process/*:
○ Coding style rules
○ Give all the details introduced in this presentation
○ Developer Certificate of Origin
● More material at:
○ https://kernelnewbies.org
Before going to Upstreaming 201
● Ready to send patches for review ?
○ No … I’m scared of what they’ll think of my code
● Be sure you have the right mindset:
○ Be altruist
○ Be polite
○ Be patient
○ Be humble
○ Always take into account the comments
■ You can disagree, stick to technical reasons
○ Comments can be harsh, stay polite and factual
■ Stick to technical reasons
○ Don’t be afraid, increase self confidence
■ Read the kernel documentation
■ Be altruist to encourage yourself to have a positive attitude
Thank You
#HKG18
HKG18 keynotes and videos on: connect.linaro.org
For further information: www.linaro.org

Contenu connexe

Plus de Linaro

Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
Linaro
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
Linaro
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
Linaro
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
Linaro
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
Linaro
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
Linaro
 
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
Linaro
 
HKG18-317 - Arm Server Ready Program
HKG18-317 - Arm Server Ready ProgramHKG18-317 - Arm Server Ready Program
HKG18-317 - Arm Server Ready Program
Linaro
 
HKG18-312 - CMSIS-NN
HKG18-312 - CMSIS-NNHKG18-312 - CMSIS-NN
HKG18-312 - CMSIS-NN
Linaro
 
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
Linaro
 
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
Linaro
 
HKG18-212 - Trusted Firmware M: Introduction
HKG18-212 - Trusted Firmware M: IntroductionHKG18-212 - Trusted Firmware M: Introduction
HKG18-212 - Trusted Firmware M: Introduction
Linaro
 
HKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 ServersHKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 Servers
Linaro
 
HKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with CoresightHKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with Coresight
Linaro
 

Plus de Linaro (20)

Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
Yutaka Ishikawa - Post-K and Arm HPC Ecosystem - Linaro Arm HPC Workshop Sant...
 
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
Andrew J Younge - Vanguard Astra - Petascale Arm Platform for U.S. DOE/ASC Su...
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening KeynoteHKG18-100K1 - George Grey: Opening Keynote
HKG18-100K1 - George Grey: Opening Keynote
 
HKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP WorkshopHKG18-318 - OpenAMP Workshop
HKG18-318 - OpenAMP Workshop
 
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainlineHKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
HKG18-501 - EAS on Common Kernel 4.14 and getting (much) closer to mainline
 
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and allHKG18-315 - Why the ecosystem is a wonderful thing, warts and all
HKG18-315 - Why the ecosystem is a wonderful thing, warts and all
 
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse HypervisorHKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
HKG18- 115 - Partitioning ARM Systems with the Jailhouse Hypervisor
 
HKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMUHKG18-TR08 - Upstreaming SVE in QEMU
HKG18-TR08 - Upstreaming SVE in QEMU
 
HKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8MHKG18-113- Secure Data Path work with i.MX8M
HKG18-113- Secure Data Path work with i.MX8M
 
HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation HKG18-120 - Devicetree Schema Documentation and Validation
HKG18-120 - Devicetree Schema Documentation and Validation
 
HKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted bootHKG18-223 - Trusted FirmwareM: Trusted boot
HKG18-223 - Trusted FirmwareM: Trusted boot
 
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
HKG18-500K1 - Keynote: Dileep Bhandarkar - Emerging Computing Trends in the D...
 
HKG18-317 - Arm Server Ready Program
HKG18-317 - Arm Server Ready ProgramHKG18-317 - Arm Server Ready Program
HKG18-317 - Arm Server Ready Program
 
HKG18-312 - CMSIS-NN
HKG18-312 - CMSIS-NNHKG18-312 - CMSIS-NN
HKG18-312 - CMSIS-NN
 
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
HKG18-301 - Dramatically Accelerate 96Board Software via an FPGA with Integra...
 
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
HKG18-300K2 - Keynote: Tomas Evensen - All Programmable SoCs? – Platforms to ...
 
HKG18-212 - Trusted Firmware M: Introduction
HKG18-212 - Trusted Firmware M: IntroductionHKG18-212 - Trusted Firmware M: Introduction
HKG18-212 - Trusted Firmware M: Introduction
 
HKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 ServersHKG18-116 - RAS Solutions for Arm64 Servers
HKG18-116 - RAS Solutions for Arm64 Servers
 
HKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with CoresightHKG18-TR14 - Postmortem Debugging with Coresight
HKG18-TR14 - Postmortem Debugging with Coresight
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Dernier (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

HKG18-TR02 - Upstreaming 101

  • 2. Introduction ● This presentation is focused on upstreaming the Linux code ● What means upstreaming ? ● The Linux kernel development cycle ● The Linux kernel code organization ● Contributions ● Writing one patch ● Writing several patches ● Conclusion ● Introducing Upstreaming 201
  • 3. What is upstreaming ? ● Bring your private changes to the mainstream kernel ● Be prepared to: ○ restart from scratch ○ change your approach ○ be part of the OSS community ● No deadline, no schedule, no obligation to take a patch ○ Linux is evolution, best proposed solution wins ○ Consensus is the key
  • 4. Why upstream ? ● The Linux kernel has one rule: no regression ○ The community won’t break your code ● The submitted code will be reviewed in detail ○ Better quality ● The community will give support ○ Better knowledge ● Stop porting out of tree code to newer kernel ○ Save money and effort
  • 5. The Linux kernel development cycle 1. Iterative release candidates: v4.10-rcX, up to -rc8 ○ Usually every Sunday 2. New release: v4.10 3. Merge window 4. New release candidate: v4.11-rc1 5. … and so on
  • 6. The Linux kernel development cycle ● A new release every 3 months ● When to send patches? ○ Fixes: anytime ○ New code and cleanup: depend on the maintainer ● How long is the merge window? ○ The merge window lasts two weeks ● How to know if the merge window is happening? ○ As soon as there is a new release ● How to know if the merge window is finished? ○ As soon as there is a -rc1
  • 7. The Linux kernel development cycle ● Automatic with a RSS feed: ○ https://www.kernel.org/feeds/kdist.xml ● Manually by polling: ○ https://www.kernel.org/
  • 8. Linux-next : catching the issues early ● Linux-next integrates all the different trees ○ Kudos to Stephen Rothwell ● Image of the future Linux release ahead of the schedule ● Testing with this tree allows to catch the bugs before they hit mainline
  • 9. How to start contributing ? ● Code review ○ Cleanups ○ Trivial fixes ○ Potential issue ● Compilation test coverage ○ Cross compile and fix errors / warnings ○ Use rare compilation option (eg. headers_check, sparse, …) ● Communicate ○ Dig into mailing lists to help people ○ Review patches ● Test linux-next ○ Boot and fix bugs ○ Report compilation warnings ● Debug ○ https://bugzilla.kernel.org
  • 10. Linaro contribution for 4.9 Total 16592 patches kernel: 642 scripts: 65 arch: 4742 drivers: 9835 lib: 33 net: 463 mm: 34 block: 30 fs: 143 tools: 120 Source : http://www.remword.com/kps_result/
  • 11. Linux code organization ● Huge number of files, more than 40,000 ● Organized in subsystems ● Posix implementation ● Architecture specific ● Frameworks ● Drivers ● Network stack
  • 12. Linux kernel code organization Topmost Linux dir kernel IPC net tools scripts arch drivers mm lib block fs net usb clock arm64 mm arm
  • 13. Linux kernel code organization Topmost Linux dir kernel IPC net mm block fs ● Generic code and framework ● Scheduling ● Process management ● POSIX kernel implementation ● Interrupt handling ● Network protocols ● Memory management ● Block device management ● File systems ● Power management
  • 14. Linux kernel code organization Topmost Linux dir lib ● Generic code ● Integer math: CRC, div ● List manipulation, red-black tree ● String manipulation ● … a lot of useful functions
  • 15. Linux kernel code organization Topmost Linux dir tools scripts ● Scripts to help making Linux better ○ Patch checking, header check ○ Kernel symbol size comparison ○ ... ● Userspace tools with a dependency on the kernel sources
  • 16. Linux kernel code organization Topmost Linux dir arch arm64 mm arm ● Architecture specific code ● Memory management, locks, ... ● Everything which is arch specific ● Fills the gaps left by the generic code
  • 17. Linux kernel code organization Topmost Linux dir drivers net usb clock ● All peripherals drivers ● Contains a generic framework ● Peripheral specific code based on the generic framework above ● Base object for the driver model
  • 18. What is a maintainer ? ● Responsible of a part of the Linux kernel code ● Ensure the code complies with some rules: ○ Coding style ○ Consistency ○ Consensus ○ Technically relevant ● A maintainer is a gatekeeper
  • 19. Maintainership ● Each directory falls under the umbrella of a maintainer ● Each maintainer has its own tree ● Each proposed change must stick to the relevant tree ● After a kernel release, all the maintainers’ tree are merged together : it is the merge window ● Topmost maintainer is Linus Torvalds ● All maintainers are listed in the MAINTAINERS file
  • 20. Example of a merge process kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 net ipv4 Linus Torvald’s tree - v4.10 v4.10+net v4.10+tip v4.10+tip v4.10+tip
  • 21. Example of a merge process kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 net ipv4 Linus Torvald’s tree - v4.10 v4.10+net v4.10+tip v4.10+tip v4.10+tip patch patch patch patch
  • 22. Example of a merge process kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 net ipv4 Linus Torvald’s tree - v4.10 v4.10+net v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource
  • 23. Example of a merge process - step 1 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10 v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 24. Example of a merge process - step 1 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10 v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 25. Example of a merge process - step 1 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10 v4.10+tip++ v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 26. Example of a merge process - step 2 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10 v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 27. Example of a merge process - step 2 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10++++ v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 28. Example of a merge process - step 2 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10++++ v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 29. Example of a merge process - step 3 kernel irq time drivers clocksource drivers irqchip drivers irqchip drivers clocksource kernel irq time drivers irqchip drivers clocksource net ipv4 Linus Torvald’s tree - v4.10-rc1 v4.10+tip v4.10+tip+irqchip v4.10+tip+clocksource net ipv4 v4.10+net
  • 30. Communication ● All development communication through the mailing lists ○ Important mailing lists for Linaro: lkml@, lakml@ ○ MAINTAINERS file gives the subsystem <-> mailing list ○ http://vger.kernel.org/vger-lists.html ● Public discussion, no point-to-point ○ Reply-all always ● Opensource events: Linux Plumbers Conference, Embedded Linux Conference, Linaro Connect
  • 31. Where to begin ? ● Send a simple contribution ○ But don’t flood with too trivial patches ■ Read trivial@kernel.org rules ● One example with a checkpatch script ○ Run it in a directory where you will be working in the future ■ Eg. drivers/acpi ○ Target one ERROR spotted by checkpatch ○ Beware of false positives for i in $(ls drivers/acpi/utils.c); do ./scripts/checkpatch -f $i done
  • 32. A simple contribution ● Compile, test first and then commit ○ Even if the change is trivial ● Write a nice description: ○ Why and what ○ One simple sentence prefixed with the subsystem name ... ○ … followed by a more detailed description
  • 33. A simple contribution ● Read the Developer Certificate of Origin: ○ Documentation/process/submitting-patches.rst ● Make sure you fully understand what that means ○ You are legally responsible of your changes ● When committing, add your Signed-off-by ● Don’t send more than 2 trivial changes
  • 34. A simple contribution ● A list of examples: ○ https://goo.gl/q7NqcZ : Fixing checkpatch errors ○ https://goo.gl/JCn2y : Fixing missing kfree ○ https://goo.gl/ASrbOU : Remove unused parameter ○ https://goo.gl/uiktEV : Remove pointless code
  • 35. A more complex contribution ● Split the changes into several patches ● Bring the changes step by step, incremental changes ● Make sure the changes are git-bisect safe ○ Not following this rule will hurt your karma in the community ● Set the scene by cleaning up the place before sending a complex contribution
  • 36. A more complex contribution ● Some examples: ○ Changing the loopback to be multi-instantiated: ■ https://goo.gl/q6w1Ay : Change the static variable to a pointer ■ https://goo.gl/tdNth4 : Dynamically allocate the loopback ○ A cleanup to catch clocksource initialization error ■ https://lkml.org/lkml/2016/6/16/781 ○ A very complex change for CPU hotplug: ■ https://goo.gl/c2NpDY : A long description of the changes
  • 37. Before going to Upstreaming 201 Be sure you have the right mindset
  • 38. Before going to Upstreaming 201 Be altruist
  • 39. Before going to Upstreaming 201 Be polite
  • 40. Before going to Upstreaming 201 Be patient
  • 41. Before going to Upstreaming 201 Be humble
  • 42. Before going to Upstreaming 201 Be factual
  • 43. Before going to Upstreaming 201 Always take into account the comments
  • 44. Before going to Upstreaming 201 Don’t send competing patches, find a consensus
  • 45. Before going to Upstreaming 201 ● Read all the documentation Documentation/process/*: ○ Coding style rules ○ Give all the details introduced in this presentation ○ Developer Certificate of Origin ● More material at: ○ https://kernelnewbies.org
  • 46. Before going to Upstreaming 201 ● Ready to send patches for review ? ○ No … I’m scared of what they’ll think of my code ● Be sure you have the right mindset: ○ Be altruist ○ Be polite ○ Be patient ○ Be humble ○ Always take into account the comments ■ You can disagree, stick to technical reasons ○ Comments can be harsh, stay polite and factual ■ Stick to technical reasons ○ Don’t be afraid, increase self confidence ■ Read the kernel documentation ■ Be altruist to encourage yourself to have a positive attitude
  • 47. Thank You #HKG18 HKG18 keynotes and videos on: connect.linaro.org For further information: www.linaro.org