xref: /rk3399_ARM-atf/docs/process/code-review-guidelines.rst (revision 4d64be308a3b0bf0bc2fb9134ad2b86cbda29786)
11f19411aSSandrine BailleuxCode Review Guidelines
21f19411aSSandrine Bailleux======================
31f19411aSSandrine Bailleux
41f19411aSSandrine BailleuxWhy do we do code reviews?
51f19411aSSandrine Bailleux--------------------------
61f19411aSSandrine Bailleux
71f19411aSSandrine BailleuxThe main goal of code reviews is to improve the code quality. By reviewing each
81f19411aSSandrine Bailleuxother's code, we can help catch issues that were missed by the author
91f19411aSSandrine Bailleuxbefore they are integrated in the source tree. Different people bring different
101f19411aSSandrine Bailleuxperspectives, depending on their past work, experiences and their current use
111f19411aSSandrine Bailleuxcases of TF-A in their products.
121f19411aSSandrine Bailleux
131f19411aSSandrine BailleuxCode reviews also play a key role in sharing knowledge within the
141f19411aSSandrine Bailleuxcommunity. People with more expertise in one area of the code base can
151f19411aSSandrine Bailleuxhelp those that are less familiar with it.
161f19411aSSandrine Bailleux
171f19411aSSandrine BailleuxCode reviews are meant to benefit everyone through team work. It is not about
181f19411aSSandrine Bailleuxunfairly criticizing or belittling the work of any contributor.
191f19411aSSandrine Bailleux
201f19411aSSandrine Bailleux
21ca4febacSSandrine BailleuxOverview of the code review process
22ca4febacSSandrine Bailleux-----------------------------------
23ca4febacSSandrine Bailleux
24ca4febacSSandrine BailleuxAll contributions to Trusted Firmware-A project are reviewed by the community to
25ca4febacSSandrine Bailleuxensure they meet the project's expectations before they get merged, according to
26ca4febacSSandrine Bailleuxthe `Project Maintenance Process`_ defined for all `Trusted Firmware` projects.
27ca4febacSSandrine Bailleux
28ca4febacSSandrine BailleuxTechnical ownership of most parts of the codebase falls on the :ref:`code
29ca4febacSSandrine Bailleuxowners`. All patches are ultimately merged by the :ref:`maintainers`.
30ca4febacSSandrine Bailleux
31ca4febacSSandrine BailleuxApproval of a patch is tracked using Gerrit `labels`. For a patch to be merged,
32ca4febacSSandrine Bailleuxit must get all of the following votes:
33ca4febacSSandrine Bailleux
34ca4febacSSandrine Bailleux- At least one ``Code-Owner-Review+1`` up-vote, and no ``Code-Owner-Review-1``
35ca4febacSSandrine Bailleux  down-vote.
36ca4febacSSandrine Bailleux
37ca4febacSSandrine Bailleux- At least one ``Maintainer-Review+1`` up-vote, and no ``Maintainer-Review-1``
38ca4febacSSandrine Bailleux  down-vote.
39ca4febacSSandrine Bailleux
40ca4febacSSandrine Bailleux- ``Verified+1`` vote applied by the automated Continuous Integration (CI)
41ca4febacSSandrine Bailleux  system.
42ca4febacSSandrine Bailleux
43ca4febacSSandrine BailleuxNote that, in some instances, the maintainers might give a waiver for some of
44ca4febacSSandrine Bailleuxthe CI failures and manually override the ``Verified+1`` score.
45ca4febacSSandrine Bailleux
46ca4febacSSandrine Bailleux
47ca4febacSSandrine BailleuxGood practices for all reviewers
48ca4febacSSandrine Bailleux--------------------------------
491f19411aSSandrine Bailleux
501f19411aSSandrine BailleuxTo ensure the code review gives the greatest possible benefit, participants in
511f19411aSSandrine Bailleuxthe project should:
521f19411aSSandrine Bailleux
531f19411aSSandrine Bailleux-  Be considerate of other people and their needs. Participants may be working
541f19411aSSandrine Bailleux   to different timescales, and have different priorities. Keep this in
551f19411aSSandrine Bailleux   mind - be gracious while waiting for action from others, and timely in your
561f19411aSSandrine Bailleux   actions when others are waiting for you.
571f19411aSSandrine Bailleux
581f19411aSSandrine Bailleux-  Review other people's patches where possible. The more active reviewers there
591f19411aSSandrine Bailleux   are, the more quickly new patches can be reviewed and merged. Contributing to
601f19411aSSandrine Bailleux   code review helps everyone in the long run, as it creates a culture of
611f19411aSSandrine Bailleux   participation which serves everyone's interests.
621f19411aSSandrine Bailleux
631f19411aSSandrine Bailleux
641f19411aSSandrine BailleuxGuidelines for patch contributors
651f19411aSSandrine Bailleux---------------------------------
661f19411aSSandrine Bailleux
671f19411aSSandrine BailleuxIn addition to the rules outlined in the :ref:`Contributor's Guide`, as a patch
681f19411aSSandrine Bailleuxcontributor you are expected to:
691f19411aSSandrine Bailleux
701f19411aSSandrine Bailleux-  Answer all comments from people who took the time to review your
711f19411aSSandrine Bailleux   patches.
721f19411aSSandrine Bailleux
731f19411aSSandrine Bailleux-  Be patient and resilient. It is quite common for patches to go through
741f19411aSSandrine Bailleux   several rounds of reviews and rework before they get approved, especially
751f19411aSSandrine Bailleux   for larger features.
761f19411aSSandrine Bailleux
771f19411aSSandrine Bailleux   In the event that a code review takes longer than you would hope for, you
781f19411aSSandrine Bailleux   may try the following actions to speed it up:
791f19411aSSandrine Bailleux
801f19411aSSandrine Bailleux  -  Ping the reviewers on Gerrit or on the mailing list. If it is urgent,
811f19411aSSandrine Bailleux     explain why. Please remain courteous and do not abuse this.
821f19411aSSandrine Bailleux
831f19411aSSandrine Bailleux  -  If one code owner has become unresponsive, ask the other code owners for
841f19411aSSandrine Bailleux     help progressing the patch.
851f19411aSSandrine Bailleux
861f19411aSSandrine Bailleux  -  If there is only one code owner and they have become unresponsive, ask one
871f19411aSSandrine Bailleux     of the project maintainers for help.
881f19411aSSandrine Bailleux
891f19411aSSandrine Bailleux-  Do the right thing for the project, not the fastest thing to get code merged.
901f19411aSSandrine Bailleux
911f19411aSSandrine Bailleux   For example, if some existing piece of code - say a driver - does not quite
921f19411aSSandrine Bailleux   meet your exact needs, go the extra mile and extend the code with the missing
931f19411aSSandrine Bailleux   functionality you require - as opposed to copying the code into some other
941f19411aSSandrine Bailleux   directory to have the freedom to change it in any way. This way, your changes
951f19411aSSandrine Bailleux   benefit everyone and will be maintained over time.
961f19411aSSandrine Bailleux
978671000fSManish V Badarkhe-  It is the patch-author's responsibility to respond to review comments within
988671000fSManish V Badarkhe   21 days. In the event that the patch-author does not respond within this
998671000fSManish V Badarkhe   timeframe, the maintainer is entitled to abandon the patch(es).
1008671000fSManish V Badarkhe   Patch author(s) may be busy with other priorities, causing a delay in
1018671000fSManish V Badarkhe   responding to active review comments after posting patch(es). In such a
1028671000fSManish V Badarkhe   situation, if the author's patch(es) is/are abandoned, they can restore
1038671000fSManish V Badarkhe   their work for review by resolving comments, merge-conflicts, and revising
1048671000fSManish V Badarkhe   their original submissions.
1051f19411aSSandrine Bailleux
1061f19411aSSandrine BailleuxGuidelines for all reviewers
1071f19411aSSandrine Bailleux----------------------------
1081f19411aSSandrine Bailleux
1091f19411aSSandrine BailleuxThere are no good or bad review comments. If you have any doubt about a patch or
1101f19411aSSandrine Bailleuxneed some clarifications, it's better to ask rather than letting a potential
1111f19411aSSandrine Bailleuxissue slip. Examples of review comments could be:
1121f19411aSSandrine Bailleux
1131f19411aSSandrine Bailleux- Questions ("Why do you need to do this?", "What if X happens?")
1141f19411aSSandrine Bailleux- Bugs ("I think you need a logical \|\| rather than a bitwise \|.")
1151f19411aSSandrine Bailleux- Design issues ("This won't scale well when we introduce feature X.")
1161f19411aSSandrine Bailleux- Improvements ("Would it be better if we did Y instead?")
1171f19411aSSandrine Bailleux
1181f19411aSSandrine Bailleux
1191f19411aSSandrine BailleuxGuidelines for code owners
1201f19411aSSandrine Bailleux--------------------------
1211f19411aSSandrine Bailleux
1221f19411aSSandrine BailleuxCode owners are listed on the :ref:`Project Maintenance<code owners>` page,
1231f19411aSSandrine Bailleuxalong with the module(s) they look after.
1241f19411aSSandrine Bailleux
1251f19411aSSandrine BailleuxWhen reviewing a patch, code owners are expected to check the following:
1261f19411aSSandrine Bailleux
1271f19411aSSandrine Bailleux-  The patch looks good from a technical point of view. For example:
1281f19411aSSandrine Bailleux
1291f19411aSSandrine Bailleux  -  The structure of the code is clear.
1301f19411aSSandrine Bailleux
1311f19411aSSandrine Bailleux  -  It complies with the relevant standards or technical documentation (where
1321f19411aSSandrine Bailleux     applicable).
1331f19411aSSandrine Bailleux
1341f19411aSSandrine Bailleux  -  It leverages existing interfaces rather than introducing new ones
1351f19411aSSandrine Bailleux     unnecessarily.
1361f19411aSSandrine Bailleux
1371f19411aSSandrine Bailleux  -  It fits well in the design of the module.
1381f19411aSSandrine Bailleux
1391f19411aSSandrine Bailleux  -  It adheres to the security model of the project. In particular, it does not
1401f19411aSSandrine Bailleux     increase the attack surface (e.g. new SMCs) without justification.
1411f19411aSSandrine Bailleux
1421f19411aSSandrine Bailleux-  The patch adheres to the TF-A :ref:`Coding Style`. The CI system should help
1431f19411aSSandrine Bailleux   catch coding style violations.
1441f19411aSSandrine Bailleux
1451f19411aSSandrine Bailleux-  (Only applicable to generic code) The code is MISRA-compliant (see
1461f19411aSSandrine Bailleux   :ref:`misra-compliance`). The CI system should help catch violations.
1471f19411aSSandrine Bailleux
1481f19411aSSandrine Bailleux-  Documentation is provided/updated (where applicable).
1491f19411aSSandrine Bailleux
1501f19411aSSandrine Bailleux-  The patch has had an appropriate level of testing. Testing details are
1511f19411aSSandrine Bailleux   expected to be provided by the patch author. If they are not, do not hesitate
1521f19411aSSandrine Bailleux   to request this information.
1531f19411aSSandrine Bailleux
1541f19411aSSandrine Bailleux-  All CI automated tests pass.
1551f19411aSSandrine Bailleux
1561f19411aSSandrine BailleuxIf a code owner is happy with a patch, they should give their approval
1571f19411aSSandrine Bailleuxthrough the ``Code-Owner-Review+1`` label in Gerrit. If instead, they have
1581f19411aSSandrine Bailleuxconcerns, questions, or any other type of blocking comment, they should set
1591f19411aSSandrine Bailleux``Code-Owner-Review-1``.
1601f19411aSSandrine Bailleux
1611f19411aSSandrine BailleuxCode owners are expected to behave professionally and responsibly. Here are some
1621f19411aSSandrine Bailleuxguidelines for them:
1631f19411aSSandrine Bailleux
1641f19411aSSandrine Bailleux-  Once you are engaged in a review, make sure you stay involved until the patch
1651f19411aSSandrine Bailleux   is merged. Rejecting a patch and going away is not very helpful. You are
1661f19411aSSandrine Bailleux   expected to monitor the patch author's answers to your review comments,
1671f19411aSSandrine Bailleux   answer back if needed and review new revisions of their patch.
1681f19411aSSandrine Bailleux
1691f19411aSSandrine Bailleux-  Provide constructive feedback. Just saying, "This is wrong, you should do X
1701f19411aSSandrine Bailleux   instead." is usually not very helpful. The patch author is unlikely to
1711f19411aSSandrine Bailleux   understand why you are requesting this change and might feel personally
1721f19411aSSandrine Bailleux   attacked.
1731f19411aSSandrine Bailleux
1741f19411aSSandrine Bailleux-  Be mindful when reviewing a patch. As a code owner, you are viewed as
1751f19411aSSandrine Bailleux   the expert for the relevant module. By approving a patch, you are partially
1761f19411aSSandrine Bailleux   responsible for its quality and the effects it has for all TF-A users. Make
1771f19411aSSandrine Bailleux   sure you fully understand what the implications of a patch might be.
1781f19411aSSandrine Bailleux
1791f19411aSSandrine Bailleux
1801f19411aSSandrine BailleuxGuidelines for maintainers
1811f19411aSSandrine Bailleux--------------------------
1821f19411aSSandrine Bailleux
1831f19411aSSandrine BailleuxMaintainers are listed on the :ref:`Project Maintenance<maintainers>` page.
1841f19411aSSandrine Bailleux
1851f19411aSSandrine BailleuxWhen reviewing a patch, maintainers are expected to check the following:
1861f19411aSSandrine Bailleux
1871f19411aSSandrine Bailleux-  The general structure of the patch looks good. This covers things like:
1881f19411aSSandrine Bailleux
1891f19411aSSandrine Bailleux   -  Code organization.
1901f19411aSSandrine Bailleux
1911f19411aSSandrine Bailleux   -  Files and directories, names and locations.
1921f19411aSSandrine Bailleux
1931f19411aSSandrine Bailleux      For example, platform code should be added under the ``plat/`` directory.
1941f19411aSSandrine Bailleux
1951f19411aSSandrine Bailleux   -  Naming conventions.
1961f19411aSSandrine Bailleux
1971f19411aSSandrine Bailleux      For example, platform identifiers should be properly namespaced to avoid
1981f19411aSSandrine Bailleux      name clashes with generic code.
1991f19411aSSandrine Bailleux
2001f19411aSSandrine Bailleux   -  API design.
2011f19411aSSandrine Bailleux
2021f19411aSSandrine Bailleux-  Interaction of the patch with other modules in the code base.
2031f19411aSSandrine Bailleux
2041f19411aSSandrine Bailleux-  The patch aims at complying with any standard or technical documentation
2051f19411aSSandrine Bailleux   that applies.
2061f19411aSSandrine Bailleux
2071f19411aSSandrine Bailleux-  New files must have the correct license and copyright headers. See :ref:`this
2081f19411aSSandrine Bailleux   paragraph<copyright-license-guidance>` for more information. The CI system
2091f19411aSSandrine Bailleux   should help catch files with incorrect or no copyright/license headers.
2101f19411aSSandrine Bailleux
2111f19411aSSandrine Bailleux-  There is no third party code or binary blobs with potential IP concerns.
2121f19411aSSandrine Bailleux   Maintainers should look for copyright or license notices in code, and use
2131f19411aSSandrine Bailleux   their best judgement. If they are unsure about a patch, they should ask
2141f19411aSSandrine Bailleux   other maintainers for help.
2151f19411aSSandrine Bailleux
2161f19411aSSandrine Bailleux-  Generally speaking, new driver code should be placed in the generic
2171f19411aSSandrine Bailleux   layer. There are cases where a driver has to stay into the platform layer but
2181f19411aSSandrine Bailleux   this should be the exception, rather than the rule.
2191f19411aSSandrine Bailleux
2201f19411aSSandrine Bailleux-  Existing common drivers (in particular for Arm IPs like the GIC driver) should
2211f19411aSSandrine Bailleux   not be copied into the platform layer to cater for platform quirks. This
2221f19411aSSandrine Bailleux   type of code duplication hurts the maintainability of the project. The
2231f19411aSSandrine Bailleux   duplicate driver is less likely to benefit from bug fixes and future
2241f19411aSSandrine Bailleux   enhancements. In most cases, it is possible to rework a generic driver to
2251f19411aSSandrine Bailleux   make it more flexible and fit slightly different use cases. That way, these
2261f19411aSSandrine Bailleux   enhancements benefit everyone.
2271f19411aSSandrine Bailleux
2281f19411aSSandrine Bailleux-  When a platform specific driver really is required, the burden lies with the
2291f19411aSSandrine Bailleux   patch author to prove the need for it. A detailed justification should be
2301f19411aSSandrine Bailleux   posted via the commit message or on the mailing list.
2311f19411aSSandrine Bailleux
2321f19411aSSandrine Bailleux-  Before merging a patch, verify that all review comments have been addressed.
2331f19411aSSandrine Bailleux   If this is not the case, encourage the patch author and the relevant
2341f19411aSSandrine Bailleux   reviewers to resolve these together.
2351f19411aSSandrine Bailleux
2361f19411aSSandrine BailleuxIf a maintainer is happy with a patch, they should give their approval
2371f19411aSSandrine Bailleuxthrough the ``Maintainer-Review+1`` label in Gerrit. If instead, they have
2381f19411aSSandrine Bailleuxconcerns, questions, or any other type of blocking comment, they should set
2391f19411aSSandrine Bailleux``Maintainer-Review-1``.
2401f19411aSSandrine Bailleux
2411f19411aSSandrine Bailleux--------------
2421f19411aSSandrine Bailleux
243ca4febacSSandrine Bailleux*Copyright (c) 2020-2023, Arm Limited. All rights reserved.*
2441f19411aSSandrine Bailleux
245*979c5482SSandrine Bailleux.. _Project Maintenance Process: https://trusted-firmware-docs.readthedocs.io/en/latest/generic_processes/project_maintenance_process.html
246