* [PATCH RFC 00/10] Improve ABI documentation generation
@ 2025-01-17 17:59 Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 01/10] scripts/get_abi.pl use label to better sort ABI symbols and files Mauro Carvalho Chehab
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel,
Chao Yu, Jaegeuk Kim, James Clark, Johannes Berg, Mike Leach,
Suzuki K Poulose, coresight, linux-arm-kernel, linux-f2fs-devel,
linux-wireless
Hi Jon/Greg,
The main goal of this RFC is to give a heads up of a work I've been doing to
replace the get_abi.pl script with a python version.
Patches 1-6 are OK to be applied:
- Patch 1 changes the sort criteria of the ABI generation to use alphabetic order:
currently, it is *almost* alphabetic, but, on some cases, it orders on a different
way. No changes at the content, just at the order.
I wrote it mainly to use the same sort criteria as the new tool, but IMO it is
worth applying even before we switch to the python version.
- Patches 2-6 fix some ABI tag problems. They're independent of the rest and
can also be applied without other patches on this series.
The remaining patches (7-10) are RFC for a new tool.
The new tool uses a cleaned-up version of the same algorithms I wrote in Perl,
re-writen in Python. While doing the conversion, I got rid of some stuff that aren't
needed anymore.
The new tool has two additional changes:
- the validate tool now detects a duplicate definition when files with the same name
exists on different parts of the ABI documentation (if one asks to build them altogether);
- it fixes a bug on one of the files whose "what" keys weren't properly parsed.
Patches 7 and 8 are already in good shape (IMHO).
Patch 9 replaces "get_abi.pl" by "get_abi.py" exec for htmldocs/pdfdocs targets.
It is not on its final shape, as my end goal is to do a python include and use the
class directly there instead of calling an exec file, but such change will require
some work (I'll likely implement an interactor at the class instead of just returning
a big amount of text).
Patch 10 is just a boilerplate to one additional functionality of the perl script that
would require a lot of work to implement: check undefined/bad defined symbols
at the local machine's sysfs and compare with ABI.
Before getting patches 7-10 merged, I'd like to implement patch 10. This may
take some time, as the ABI check there is not the simplest code I wrote.
Yet, I'd like to get some feedback about patches 7-9 while I'm working on
patch 10, so, let me send what I have so far as a RFC.
I hope this would make more people look at the code, as right now, we had only
6 persons/6 patches besides me that touched the code.
Mauro Carvalho Chehab (10):
scripts/get_abi.pl use label to better sort ABI symbols and files
ABI: sysfs-class-rfkill: fix kernelversion tags
ABI: sysfs-bus-coresight-*: fix kernelversion tags
ABI: sysfs-driver-dma-idxd: fix date tags
ABI: sysfs-fs-f2fs: fix date tags
ABI: sysfs-power: fix a what tag
[RFC] scripts: add a get_abi.py tool to generate ReST output
[RFC] scripts/get_abi.py: add support for symbol search
[RFC] docs: use get_abi.py for ABI generation
[RFC BOILERPLATE] scripts/get_abi.py: add support for undefined ABIs
Documentation/ABI/removed/sysfs-class-rfkill | 2 +-
Documentation/ABI/stable/sysfs-class-rfkill | 12 +-
.../ABI/stable/sysfs-driver-dma-idxd | 4 +-
.../testing/sysfs-bus-coresight-devices-cti | 78 +-
.../testing/sysfs-bus-coresight-devices-tpdm | 52 +-
Documentation/ABI/testing/sysfs-fs-f2fs | 4 +-
Documentation/ABI/testing/sysfs-power | 2 +-
Documentation/admin-guide/abi-obsolete.rst | 1 -
Documentation/admin-guide/abi-removed.rst | 1 -
Documentation/admin-guide/abi-stable.rst | 1 -
Documentation/admin-guide/abi-testing.rst | 1 -
Documentation/sphinx/kernel_abi.py | 10 +-
scripts/get_abi.pl | 3 +-
scripts/get_abi.py | 678 ++++++++++++++++++
14 files changed, 760 insertions(+), 89 deletions(-)
create mode 100755 scripts/get_abi.py
--
2.47.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH RFC 01/10] scripts/get_abi.pl use label to better sort ABI symbols and files
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 02/10] ABI: sysfs-class-rfkill: fix kernelversion tags Mauro Carvalho Chehab
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
Currently, not all symbols are in labeled alphabetic order. That's
because they are using the hash table key, which doesn't necessarely
are identical to the label displayed for each symbol/file.
Add labels to file as well and use labels instead of key names
to sort them.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
scripts/get_abi.pl | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/scripts/get_abi.pl b/scripts/get_abi.pl
index de1c0354b50c..2311d4e3f3ef 100755
--- a/scripts/get_abi.pl
+++ b/scripts/get_abi.pl
@@ -108,6 +108,7 @@ sub parse_abi {
$data{$nametag}->{filepath} = $file;
$data{$nametag}->{is_file} = 1;
$data{$nametag}->{line_no} = 1;
+ $data{$nametag}->{label} = "abi_file_$fn";
my $type = $file;
$type =~ s,.*/(.*)/.*,$1,;
@@ -320,7 +321,7 @@ sub output_rest {
foreach my $what (sort {
($data{$a}->{type} eq "File") cmp ($data{$b}->{type} eq "File") ||
- $a cmp $b
+ $data{$a}->{label} cmp $data{$b}->{label}
} keys %data) {
my $type = $data{$what}->{type};
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 02/10] ABI: sysfs-class-rfkill: fix kernelversion tags
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 01/10] scripts/get_abi.pl use label to better sort ABI symbols and files Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 03/10] ABI: sysfs-bus-coresight-*: " Mauro Carvalho Chehab
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, Johannes Berg,
linux-kernel, linux-wireless
Some kernelversion tags are missing colons. Add them to comply with
ABI description and produce right results when converted to html/pdf.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
Documentation/ABI/removed/sysfs-class-rfkill | 2 +-
Documentation/ABI/stable/sysfs-class-rfkill | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/Documentation/ABI/removed/sysfs-class-rfkill b/Documentation/ABI/removed/sysfs-class-rfkill
index f25174eafd55..20cb688af173 100644
--- a/Documentation/ABI/removed/sysfs-class-rfkill
+++ b/Documentation/ABI/removed/sysfs-class-rfkill
@@ -4,7 +4,7 @@ For details to this subsystem look at Documentation/driver-api/rfkill.rst.
What: /sys/class/rfkill/rfkill[0-9]+/claim
Date: 09-Jul-2007
-KernelVersion v2.6.22
+KernelVersion: v2.6.22
Contact: linux-wireless@vger.kernel.org
Description: This file was deprecated because there no longer was a way to
claim just control over a single rfkill instance.
diff --git a/Documentation/ABI/stable/sysfs-class-rfkill b/Documentation/ABI/stable/sysfs-class-rfkill
index 037979f7dc4b..67b605e3dd16 100644
--- a/Documentation/ABI/stable/sysfs-class-rfkill
+++ b/Documentation/ABI/stable/sysfs-class-rfkill
@@ -16,7 +16,7 @@ Description: The rfkill class subsystem folder.
What: /sys/class/rfkill/rfkill[0-9]+/name
Date: 09-Jul-2007
-KernelVersion v2.6.22
+KernelVersion: v2.6.22
Contact: linux-wireless@vger.kernel.org
Description: Name assigned by driver to this key (interface or driver name).
Values: arbitrary string.
@@ -24,7 +24,7 @@ Values: arbitrary string.
What: /sys/class/rfkill/rfkill[0-9]+/type
Date: 09-Jul-2007
-KernelVersion v2.6.22
+KernelVersion: v2.6.22
Contact: linux-wireless@vger.kernel.org
Description: Driver type string ("wlan", "bluetooth", etc).
Values: See include/linux/rfkill.h.
@@ -32,7 +32,7 @@ Values: See include/linux/rfkill.h.
What: /sys/class/rfkill/rfkill[0-9]+/persistent
Date: 09-Jul-2007
-KernelVersion v2.6.22
+KernelVersion: v2.6.22
Contact: linux-wireless@vger.kernel.org
Description: Whether the soft blocked state is initialised from non-volatile
storage at startup.
@@ -44,7 +44,7 @@ Values: A numeric value:
What: /sys/class/rfkill/rfkill[0-9]+/state
Date: 09-Jul-2007
-KernelVersion v2.6.22
+KernelVersion: v2.6.22
Contact: linux-wireless@vger.kernel.org
Description: Current state of the transmitter.
This file was scheduled to be removed in 2014, but due to its
@@ -67,7 +67,7 @@ Values: A numeric value.
What: /sys/class/rfkill/rfkill[0-9]+/hard
Date: 12-March-2010
-KernelVersion v2.6.34
+KernelVersion: v2.6.34
Contact: linux-wireless@vger.kernel.org
Description: Current hardblock state. This file is read only.
Values: A numeric value.
@@ -81,7 +81,7 @@ Values: A numeric value.
What: /sys/class/rfkill/rfkill[0-9]+/soft
Date: 12-March-2010
-KernelVersion v2.6.34
+KernelVersion: v2.6.34
Contact: linux-wireless@vger.kernel.org
Description: Current softblock state. This file is read and write.
Values: A numeric value.
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 03/10] ABI: sysfs-bus-coresight-*: fix kernelversion tags
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 01/10] scripts/get_abi.pl use label to better sort ABI symbols and files Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 02/10] ABI: sysfs-class-rfkill: fix kernelversion tags Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 04/10] ABI: sysfs-driver-dma-idxd: fix date tags Mauro Carvalho Chehab
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, James Clark,
Mike Leach, Suzuki K Poulose, coresight, linux-arm-kernel,
linux-kernel
Some kernelversion tags are missing colons. Add them to comply with
ABI description and produce right results when converted to html/pdf.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
.../testing/sysfs-bus-coresight-devices-cti | 78 +++++++++----------
.../testing/sysfs-bus-coresight-devices-tpdm | 52 ++++++-------
2 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-cti b/Documentation/ABI/testing/sysfs-bus-coresight-devices-cti
index bf2869c413e7..a97b70f588da 100644
--- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-cti
+++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-cti
@@ -1,241 +1,241 @@
What: /sys/bus/coresight/devices/<cti-name>/enable
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Enable/Disable the CTI hardware.
What: /sys/bus/coresight/devices/<cti-name>/powered
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Indicate if the CTI hardware is powered.
What: /sys/bus/coresight/devices/<cti-name>/ctmid
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Display the associated CTM ID
What: /sys/bus/coresight/devices/<cti-name>/nr_trigger_cons
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Number of devices connected to triggers on this CTI
What: /sys/bus/coresight/devices/<cti-name>/triggers<N>/name
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Name of connected device <N>
What: /sys/bus/coresight/devices/<cti-name>/triggers<N>/in_signals
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Input trigger signals from connected device <N>
What: /sys/bus/coresight/devices/<cti-name>/triggers<N>/in_types
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Functional types for the input trigger signals
from connected device <N>
What: /sys/bus/coresight/devices/<cti-name>/triggers<N>/out_signals
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Output trigger signals to connected device <N>
What: /sys/bus/coresight/devices/<cti-name>/triggers<N>/out_types
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Functional types for the output trigger signals
to connected device <N>
What: /sys/bus/coresight/devices/<cti-name>/regs/inout_sel
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Select the index for inen and outen registers.
What: /sys/bus/coresight/devices/<cti-name>/regs/inen
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Read or write the CTIINEN register selected by inout_sel.
What: /sys/bus/coresight/devices/<cti-name>/regs/outen
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Read or write the CTIOUTEN register selected by inout_sel.
What: /sys/bus/coresight/devices/<cti-name>/regs/gate
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Read or write CTIGATE register.
What: /sys/bus/coresight/devices/<cti-name>/regs/asicctl
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Read or write ASICCTL register.
What: /sys/bus/coresight/devices/<cti-name>/regs/intack
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Write the INTACK register.
What: /sys/bus/coresight/devices/<cti-name>/regs/appset
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Set CTIAPPSET register to activate channel. Read back to
determine current value of register.
What: /sys/bus/coresight/devices/<cti-name>/regs/appclear
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Write APPCLEAR register to deactivate channel.
What: /sys/bus/coresight/devices/<cti-name>/regs/apppulse
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Write APPPULSE to pulse a channel active for one clock
cycle.
What: /sys/bus/coresight/devices/<cti-name>/regs/chinstatus
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Read current status of channel inputs.
What: /sys/bus/coresight/devices/<cti-name>/regs/choutstatus
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) read current status of channel outputs.
What: /sys/bus/coresight/devices/<cti-name>/regs/triginstatus
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) read current status of input trigger signals
What: /sys/bus/coresight/devices/<cti-name>/regs/trigoutstatus
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) read current status of output trigger signals.
What: /sys/bus/coresight/devices/<cti-name>/channels/trigin_attach
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Attach a CTI input trigger to a CTM channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/trigin_detach
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Detach a CTI input trigger from a CTM channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/trigout_attach
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Attach a CTI output trigger to a CTM channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/trigout_detach
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Detach a CTI output trigger from a CTM channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_gate_enable
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Enable CTIGATE for single channel (Write) or list enabled
channels through the gate (R).
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_gate_disable
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Disable CTIGATE for single channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_set
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Activate a single channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_clear
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Deactivate a single channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_pulse
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Pulse a single channel - activate for a single clock cycle.
What: /sys/bus/coresight/devices/<cti-name>/channels/trigout_filtered
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) List of output triggers filtered across all connections.
What: /sys/bus/coresight/devices/<cti-name>/channels/trig_filter_enable
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Enable or disable trigger output signal filtering.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_inuse
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) show channels with at least one attached trigger signal.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_free
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) show channels with no attached trigger signals.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_xtrigs_sel
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (RW) Write channel number to select a channel to view, read to
see selected channel number.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_xtrigs_in
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Read to see input triggers connected to selected view
channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_xtrigs_out
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Read) Read to see output triggers connected to selected view
channel.
What: /sys/bus/coresight/devices/<cti-name>/channels/chan_xtrigs_reset
Date: March 2020
-KernelVersion 5.7
+KernelVersion: 5.7
Contact: Mike Leach or Mathieu Poirier
Description: (Write) Clear all channel / trigger programming.
diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
index bf710ea6e0ef..53cb454b60d0 100644
--- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
+++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
@@ -1,6 +1,6 @@
What: /sys/bus/coresight/devices/<tpdm-name>/integration_test
Date: January 2023
-KernelVersion 6.2
+KernelVersion: 6.2
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(Write) Run integration test for tpdm. Integration test
@@ -14,7 +14,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/reset_dataset
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(Write) Reset the dataset of the tpdm.
@@ -24,7 +24,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_type
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the trigger type of the DSB for tpdm.
@@ -35,7 +35,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_ts
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the trigger timestamp of the DSB for tpdm.
@@ -46,7 +46,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_mode
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the programming mode of the DSB for tpdm.
@@ -60,7 +60,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_idx
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the index number of the edge detection for the DSB
@@ -69,7 +69,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_val
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
Write a data to control the edge detection corresponding to
@@ -85,7 +85,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/ctrl_mask
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
Write a data to mask the edge detection corresponding to the index
@@ -97,21 +97,21 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/edcr[0:15]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
Read a set of the edge control value of the DSB in TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_edge/edcmr[0:7]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
Read a set of the edge control mask of the DSB in TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_patt/xpr[0:7]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the value of the trigger pattern for the DSB
@@ -119,7 +119,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_patt/xpmr[0:7]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the mask of the trigger pattern for the DSB
@@ -127,21 +127,21 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpr[0:7]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the value of the pattern for the DSB subunit TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpmr[0:7]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the mask of the pattern for the DSB subunit TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/enable_ts
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(Write) Set the pattern timestamp of DSB tpdm. Read
@@ -153,7 +153,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/set_type
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(Write) Set the pattern type of DSB tpdm. Read
@@ -165,7 +165,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_msr/msr[0:31]
Date: March 2023
-KernelVersion 6.7
+KernelVersion: 6.7
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the MSR(mux select register) for the DSB subunit
@@ -173,7 +173,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_mode
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description: (Write) Set the data collection mode of CMB tpdm. Continuous
change creates CMB data set elements on every CMBCLK edge.
@@ -187,7 +187,7 @@ Description: (Write) Set the data collection mode of CMB tpdm. Continuous
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_patt/xpr[0:1]
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the value of the trigger pattern for the CMB
@@ -195,7 +195,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_patt/xpmr[0:1]
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the mask of the trigger pattern for the CMB
@@ -203,21 +203,21 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpr[0:1]
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the value of the pattern for the CMB subunit TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/dsb_patt/tpmr[0:1]
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the mask of the pattern for the CMB subunit TPDM.
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_patt/enable_ts
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(Write) Set the pattern timestamp of CMB tpdm. Read
@@ -229,7 +229,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_trig_ts
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the trigger timestamp of the CMB for tpdm.
@@ -240,7 +240,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_ts_all
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Read or write the status of timestamp upon all interface.
@@ -252,7 +252,7 @@ Description:
What: /sys/bus/coresight/devices/<tpdm-name>/cmb_msr/msr[0:31]
Date: January 2024
-KernelVersion 6.9
+KernelVersion: 6.9
Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get the MSR(mux select register) for the CMB subunit
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 04/10] ABI: sysfs-driver-dma-idxd: fix date tags
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (2 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 03/10] ABI: sysfs-bus-coresight-*: " Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 05/10] ABI: sysfs-fs-f2fs: " Mauro Carvalho Chehab
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
Some date tags are missing colons. Add them to comply with
ABI description and produce right results when converted to html/pdf.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
Documentation/ABI/stable/sysfs-driver-dma-idxd | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/ABI/stable/sysfs-driver-dma-idxd b/Documentation/ABI/stable/sysfs-driver-dma-idxd
index f2ec42949a54..4a355e6747ae 100644
--- a/Documentation/ABI/stable/sysfs-driver-dma-idxd
+++ b/Documentation/ABI/stable/sysfs-driver-dma-idxd
@@ -246,14 +246,14 @@ Description: Controls whether PRS disable is turned on for the workqueue.
capability.
What: /sys/bus/dsa/devices/wq<m>.<n>/occupancy
-Date May 25, 2021
+Date: May 25, 2021
KernelVersion: 5.14.0
Contact: dmaengine@vger.kernel.org
Description: Show the current number of entries in this WQ if WQ Occupancy
Support bit WQ capabilities is 1.
What: /sys/bus/dsa/devices/wq<m>.<n>/enqcmds_retries
-Date Oct 29, 2021
+Date: Oct 29, 2021
KernelVersion: 5.17.0
Contact: dmaengine@vger.kernel.org
Description: Indicate the number of retires for an enqcmds submission on a sharedwq.
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 05/10] ABI: sysfs-fs-f2fs: fix date tags
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (3 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 04/10] ABI: sysfs-driver-dma-idxd: fix date tags Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 06/10] ABI: sysfs-power: fix a what tag Mauro Carvalho Chehab
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, Chao Yu,
Jaegeuk Kim, linux-f2fs-devel, linux-kernel
Some date tags are missing colons. Add them to comply with
ABI description and produce right results when converted to html/pdf.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
Documentation/ABI/testing/sysfs-fs-f2fs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 3e1630c70d8a..e44bb614964b 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -347,7 +347,7 @@ Description: Used to control configure extension list:
- [c] means add/del cold file extension
What: /sys/fs/f2fs/<disk>/unusable
-Date April 2019
+Date: April 2019
Contact: "Daniel Rosenberg" <drosen@google.com>
Description: If checkpoint=disable, it displays the number of blocks that
are unusable.
@@ -355,7 +355,7 @@ Description: If checkpoint=disable, it displays the number of blocks that
would be unusable if checkpoint=disable were to be set.
What: /sys/fs/f2fs/<disk>/encoding
-Date July 2019
+Date: July 2019
Contact: "Daniel Rosenberg" <drosen@google.com>
Description: Displays name and version of the encoding set for the filesystem.
If no encoding is set, displays (none)
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 06/10] ABI: sysfs-power: fix a what tag
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (4 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 05/10] ABI: sysfs-fs-f2fs: " Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 07/10] [RFC] scripts: add a get_abi.py tool to generate ReST output Mauro Carvalho Chehab
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
There is one What tag that it is using semicolon instead of colon.
Fix it to comply with ABI description and produce right results when
converted to html/pdf.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
Documentation/ABI/testing/sysfs-power | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/ABI/testing/sysfs-power b/Documentation/ABI/testing/sysfs-power
index a3942b1036e2..2192478e83cf 100644
--- a/Documentation/ABI/testing/sysfs-power
+++ b/Documentation/ABI/testing/sysfs-power
@@ -131,7 +131,7 @@ Description:
CAUTION: Using it will cause your machine's real-time (CMOS)
clock to be set to a random invalid time after a resume.
-What; /sys/power/pm_trace_dev_match
+What: /sys/power/pm_trace_dev_match
Date: October 2010
Contact: James Hogan <jhogan@kernel.org>
Description:
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 07/10] [RFC] scripts: add a get_abi.py tool to generate ReST output
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (5 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 06/10] ABI: sysfs-power: fix a what tag Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 08/10] [RFC] scripts/get_abi.py: add support for symbol search Mauro Carvalho Chehab
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
The get_abi.pl script is requiring some care, but it seems that
the number of changes on it since when I originally wrote it
was not too high. Granted, maintaining perl scripts without
classes requires a higher efforted than on python. Also, it sounds
easier to find python developer those days than perl ones.
With that in mind, rewrite the core of get_abi.pl in Python,
using classes, to help producing documentation. This will
allow a better integration in the future with the Sphinx
ABI extension.
The algorithms used there are the same as the ones in Perl,
with a couple of cleanups to remove redundant variables and
to help with cross-reference generation. I also removed
some code that were important in the past during txt to ReST
migration, but aren't needed now anymore.
The end script is a little bit faster than the original one
(tested on a machine with ssd disks). That's probably because
we're now using only pre-compiled regular expressions, and it
is using string replacement methods instead of regex where
possible.
The new version is a little bit more conservative when
creating cross-references to avoid adding them into literal
blocks. We may end making it working better once we change
Sphinx integration, in the future.
The end result was compared with the one produced by the perl
script and showed no regressions.
As a side effect, that makes integration with Sphinx easier.
This script follows flake8 style, verified with:
$ flake8 ./scripts/get_abi.py --max-line-length 100
(most lines are below 80 columns limit, but some strings are
longer)
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
scripts/get_abi.py | 583 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 583 insertions(+)
create mode 100755 scripts/get_abi.py
diff --git a/scripts/get_abi.py b/scripts/get_abi.py
new file mode 100755
index 000000000000..64a0ec8b1d89
--- /dev/null
+++ b/scripts/get_abi.py
@@ -0,0 +1,583 @@
+#!/usr/bin/env python3
+# pylint: disable=R0902,R0903,R0911,R0912,R0914,R0915
+# Copyright(c) 2025: Mauro Carvalho Chehab <mchehab@kernel.org>.
+# SPDX-License-Identifier: GPL-2.0
+
+"""
+Parse ABI documentation and produce results from it.
+"""
+
+
+import argparse
+import os
+import re
+import sys
+
+from glob import glob
+from random import randrange
+
+if __name__ == "__main__":
+ import logging
+else:
+ from sphinx.util import logging
+
+ABI_DIR = "Documentation/ABI/"
+
+# Debug levels
+DEBUG_WHAT_PARSING = 1
+DEBUG_WHAT_OPEN = 2
+DEBUG_DUMP_ABI_STRUCTS = 4
+DEBUG_UNDEFINED = 8
+
+
+class AbiParser:
+ """Main class to parse ABI files"""
+
+ TAGS = r"(what|where|date|kernelversion|contact|description|users)"
+ XREF = r"(?:^|\s|\()(\/(?:sys|config|proc|dev|kvd)\/[^,.:;\)\s]+)(?:[,.:;\)\s]|\Z)"
+
+ def __init__(self, directory, enable_lineno=False, show_warnings=True, debug=0):
+ """Stores arguments for the class and initialize global vars"""
+
+ self.directory = directory
+ self.enable_lineno = enable_lineno
+ self.show_warnings = show_warnings
+ self.debug = debug
+
+ self.log = logging.getLogger("get_abi")
+ self.data = {}
+ self.what_symbols = {}
+ self.file_refs = {}
+ self.what_refs = {}
+
+ # Regular expressions used on parser
+ self.re_tag = re.compile(r"(\S+)(:\s*)(.*)", re.I)
+ self.re_valid = re.compile(self.TAGS)
+ self.re_start_spc = re.compile(r"(\s*)(\S.*)")
+ self.re_whitespace = re.compile(r"^\s+")
+
+ # Regular used on print
+ self.re_what = re.compile(r"(\/?(?:[\w\-]+\/?){1,2})")
+ self.re_escape = re.compile(r"([\.\x01-\x08\x0e-\x1f\x21-\x2f\x3a-\x40\x7b-\xff])")
+ self.re_unprintable = re.compile(r"([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff]+)")
+ self.re_title_mark = re.compile(r"\n[\-\*\=\^\~]+\n")
+ self.re_doc = re.compile(r"Documentation/(?!devicetree)(\S+)\.rst")
+ self.re_abi = re.compile(r"(Documentation/ABI/)([\w\/\-]+)")
+ self.re_xref_node = re.compile(self.XREF)
+
+ def warn(self, fdata, msg, extra=None):
+ """Displays a parse error if warning is enabled"""
+
+ if not self.show_warnings:
+ return
+
+ msg = f"{fdata.fname}:{fdata.ln}: {msg}"
+ if extra:
+ msg += "\n\t\t" + extra
+
+ self.log.warning(msg)
+
+ def add_symbol(self, what, fname, ln=None, xref=None):
+ """Create a reference table describing where each 'what' is located"""
+
+ if what not in self.what_symbols:
+ self.what_symbols[what] = {"file": {}}
+
+ if fname not in self.what_symbols[what]["file"]:
+ self.what_symbols[what]["file"][fname] = []
+
+ if ln:
+ self.what_symbols[what]["file"][fname].append(ln)
+
+ if xref:
+ self.what_symbols[what]["xref"] = xref
+
+ def _parse_line(self, fdata, line):
+ """Parse a single line of an ABI file"""
+
+ new_what = False
+ new_tag = False
+ content = None
+
+ match = self.re_tag.match(line)
+ if match:
+ new = match.group(1).lower()
+ sep = match.group(2)
+ content = match.group(3)
+
+ match = self.re_valid.search(new)
+ if match:
+ new_tag = match.group(1)
+ else:
+ if fdata.tag == "description":
+ # New "tag" is actually part of description.
+ # Don't consider it a tag
+ new_tag = False
+ elif fdata.tag != "":
+ self.warn(fdata, f"tag '{fdata.tag}' is invalid", line)
+
+ if new_tag:
+ # "where" is Invalid, but was a common mistake. Warn if found
+ if new_tag == "where":
+ self.warn(fdata,
+ "tag 'Where' is invalid. Should be 'What:' instead")
+ new_tag = "what"
+
+ if new_tag == "what":
+ fdata.space = None
+
+ if content not in self.what_symbols:
+ self.add_symbol(what=content,
+ fname=fdata.fname, ln=fdata.ln)
+
+ if fdata.tag == "what":
+ fdata.what.append(content.strip("\n"))
+ else:
+ if fdata.key:
+ if "description" not in self.data.get(fdata.key, {}):
+ self.warn(fdata,
+ f"{fdata.key} doesn't have a description")
+
+ for w in fdata.what:
+ self.add_symbol(what=w, fname=fdata.fname,
+ ln=fdata.what_ln, xref=fdata.key)
+
+ fdata.label = content
+ new_what = True
+
+ key = "abi_" + content.lower()
+ fdata.key = self.re_unprintable.sub("_", key).strip("_")
+
+ # Avoid duplicated keys
+ while fdata.key in self.data:
+ char = randrange(0, 51) + ord("A")
+ if char > ord("Z"):
+ char += ord("a") - ord("Z") - 1
+
+ fdata.key += chr(char)
+
+ if fdata.key and fdata.key not in self.data:
+ self.data[fdata.key] = {
+ "what": [content],
+ "file": [fdata.file_ref],
+ "line_no": fdata.ln,
+ }
+
+ fdata.what = self.data[fdata.key]["what"]
+
+ self.what_refs[content] = fdata.key
+ fdata.tag = new_tag
+ fdata.what_ln = fdata.ln
+
+ if fdata.nametag["what"]:
+ t = (content, fdata.key)
+ if t not in fdata.nametag["symbols"]:
+ fdata.nametag["symbols"].append(t)
+
+ return
+
+ if fdata.tag and new_tag:
+ fdata.tag = new_tag
+
+ if new_what:
+ fdata.label = ""
+
+ self.data[fdata.key]["type"] = fdata.ftype
+
+ if "description" in self.data[fdata.key]:
+ self.data[fdata.key]["description"] += "\n\n"
+
+ if fdata.file_ref not in self.data[fdata.key]["file"]:
+ self.data[fdata.key]["file"].append(fdata.file_ref)
+
+ if self.debug == DEBUG_WHAT_PARSING:
+ self.log.debug("what: %s", fdata.what)
+
+ if not fdata.what:
+ self.warn(fdata, "'What:' should come first:", line)
+ return
+
+ if new_tag == "description":
+ fdata.space = None
+
+ if content:
+ sep = sep.replace(":", " ")
+
+ c = " " * len(new_tag) + sep + content
+ c = c.expandtabs()
+
+ match = self.re_start_spc.match(c)
+ if match:
+ # Preserve initial spaces for the first line
+ fdata.space = match.group(1)
+ content = match.group(2) + "\n"
+
+ self.data[fdata.key][fdata.tag] = content
+
+ return
+
+ # Store any contents before tags at the database
+ if not fdata.tag and "what" in fdata.nametag:
+ fdata.nametag["description"] += line
+ return
+
+ if fdata.tag == "description":
+ content = line.expandtabs()
+
+ if self.re_whitespace.sub("", content) == "":
+ self.data[fdata.key][fdata.tag] += "\n"
+ return
+
+ if fdata.space is None:
+ match = self.re_start_spc.match(content)
+ if match:
+ # Preserve initial spaces for the first line
+ fdata.space = match.group(1)
+
+ content = match.group(2) + "\n"
+ else:
+ if content.startswith(fdata.space):
+ content = content[len(fdata.space):]
+
+ else:
+ fdata.space = ""
+
+ if fdata.tag == "what":
+ w = content.strip("\n")
+ if w:
+ self.data[fdata.key][fdata.tag].append(w)
+ else:
+ self.data[fdata.key][fdata.tag] += content
+ return
+
+ content = line.strip()
+ if fdata.tag:
+ if fdata.tag == "what":
+ w = content.strip("\n")
+ if w:
+ self.data[fdata.key][fdata.tag].append(w)
+ else:
+ self.data[fdata.key][fdata.tag] += "\n" + content.rstrip("\n")
+ return
+
+ # Everything else is error
+ if content:
+ self.warn(fdata, "Unexpected content", line)
+
+ def parse_file(self, fname, path, basename):
+ """Parse a single file"""
+
+ ref = f"abi_file_{path}_{basename}"
+ ref = self.re_unprintable.sub("_", ref).strip("_")
+
+ # Store per-file state into a namespace variable. This will be used
+ # by the per-line parser state machine and by the warning function.
+ fdata = argparse.Namespace
+
+ fdata.fname = fname
+ fdata.name = basename
+ fdata.file_ref = (basename, ref)
+ fdata.ln = 0
+ fdata.what_ln = 0
+ fdata.tag = ""
+ fdata.label = ""
+ fdata.what = []
+ fdata.key = None
+ fdata.xrefs = None
+ fdata.space = None
+ fdata.ftype = path.split("/")[0]
+
+ fdata.nametag = {}
+ fdata.nametag["what"] = [f"File {path}/{basename}"]
+ fdata.nametag["type"] = "File"
+ fdata.nametag["file"] = [fdata.file_ref]
+ fdata.nametag["line_no"] = 1
+ fdata.nametag["description"] = ""
+ fdata.nametag["symbols"] = []
+
+ self.data[ref] = fdata.nametag
+ self.file_refs[fname] = ref
+
+ with open(fname, "r", encoding="utf8", errors="backslashreplace") as fp:
+ for line in fp:
+ fdata.ln += 1
+
+ self._parse_line(fdata, line)
+
+ if "description" in fdata.nametag:
+ fdata.nametag["description"] = fdata.nametag["description"].lstrip("\n")
+
+ if fdata.key:
+ if "description" not in self.data.get(fdata.key, {}):
+ self.warn(fdata, f"{fdata.key} doesn't have a description")
+
+ for w in fdata.what:
+ self.add_symbol(what=w, fname=fname, xref=fdata.key)
+
+ def parse_abi(self):
+ """Parse documentation ABI"""
+
+ ignore_suffixes = ("rej", "org", "orig", "bak", "~")
+ re_abi = re.compile(r".*" + ABI_DIR)
+
+ for fname in glob(os.path.join(self.directory, '**'), recursive=True):
+ if os.path.isdir(fname):
+ continue
+
+ basename = os.path.basename(fname)
+
+ if basename == "README":
+ continue
+ if basename.startswith(".") or basename.endswith(ignore_suffixes):
+ continue
+
+ path = re_abi.sub("", os.path.dirname(fname))
+
+ self.parse_file(fname, path, basename)
+
+ def print_desc_txt(self, desc):
+ """Print description as found inside ABI files"""
+
+ desc = desc.strip(" \t\n")
+
+ print(desc + "\n")
+
+ def print_desc_rst(self, desc):
+ """Enrich ReST output by creating cross-references"""
+
+ # Remove title markups from the description
+ # Having titles inside ABI files will only work if extra
+ # care would be taken in order to strictly follow the same
+ # level order for each markup.
+ desc = self.re_title_mark.sub("\n\n", "\n" + desc)
+ desc = desc.rstrip(" \t\n").lstrip("\n")
+
+ new_desc = ""
+ for d in desc.split("\n"):
+ if d == "":
+ new_desc += "\n"
+ continue
+
+ # Use cross-references for doc files where needed
+ d = self.re_doc.sub(r":doc:`/\1`", d)
+
+ # Use cross-references for ABI generated docs where needed
+ matches = self.re_abi.findall(d)
+ for m in matches:
+ abi = m[0] + m[1]
+
+ xref = self.file_refs.get(abi)
+ if not xref:
+ self.log.warning("Didn't find ABI reference for %s", abi)
+ continue
+
+ new = self.re_escape.sub(r"\\\1", m[1])
+
+ d = d.replace(abi, f":ref:`{new} <{xref}>`")
+
+ # Seek for cross reference symbols like /sys/...
+ # Need to be careful to avoid doing it on a code block
+ if d[0] not in [' ', '\t']:
+ matches = self.re_xref_node.findall(d)
+ for m in matches:
+
+ # Finding ABI here is more complex due to wildcards
+ xref = self.what_refs.get(m)
+ if not xref:
+ continue
+
+ new = self.re_escape.sub(r"\\\1", m)
+
+ d = d.replace(m, f":ref:`{new} <{xref}>`")
+
+ new_desc += d + "\n"
+
+ print(new_desc + "\n")
+
+ def print_data(self, enable_lineno, output_in_txt, show_file=False):
+ """Print ABI at stdout"""
+
+ part = None
+ for key, v in sorted(self.data.items(),
+ key=lambda x: (x[1].get("type", ""), x[0])):
+
+ wtype = v.get("type", "Var")
+ file_ref = v.get("file")
+ names = v.get("what", [""])
+
+ if not show_file and wtype == "File":
+ continue
+
+ if enable_lineno:
+ ln = v.get("line_no", 1)
+ print(f".. LINENO {file_ref[0][0]}#{ln}\n")
+
+ if wtype != "File":
+ cur_part = names[0]
+ if cur_part.find("/") >= 0:
+ match = self.re_what.match(cur_part)
+ if match:
+ symbol = match.group(1).rstrip("/")
+ cur_part = "symbols under " + symbol
+
+ if cur_part and cur_part != part:
+ part = cur_part
+ print(f"{part}\n{"-" * len(part)}\n")
+
+ print(f".. _{key}:\n")
+
+ max_len = 0
+ for i in range(0, len(names)): # pylint: disable=C0200
+ names[i] = "**" + self.re_escape.sub(r"\\\1", names[i]) + "**"
+
+ max_len = max(max_len, len(names[i]))
+
+ print("+-" + "-" * max_len + "-+")
+ for name in names:
+ print(f"| {name}" + " " * (max_len - len(name)) + " |")
+ print("+-" + "-" * max_len + "-+")
+ print()
+
+ for ref in file_ref:
+ if wtype == "File":
+ print(f".. _{ref[1]}:\n")
+ else:
+ print(f"Defined on file :ref:`{ref[0]} <{ref[1]}>`\n")
+
+ if wtype == "File":
+ print(f"{names[0]}\n{"-" * len(names[0])}\n")
+
+ desc = v.get("description")
+ if not desc and wtype != "File":
+ print(f"DESCRIPTION MISSING for {names[0]}\n")
+
+ if desc:
+ if output_in_txt:
+ self.print_desc_txt(desc)
+ else:
+ self.print_desc_rst(desc)
+
+ symbols = v.get("symbols")
+ if symbols:
+ print("Has the following ABI:\n")
+
+ for w, label in symbols:
+
+ # Escape special chars from content
+ content = self.re_escape.sub(r"\\\1", w)
+
+ print(f"- :ref:`{content} <{label}>`\n")
+
+ users = v.get("users")
+ if users and users.strip(" \t\n"):
+ print(f"Users:\n\t{users.strip("\n").replace('\n', '\n\t')}\n")
+
+ def check_issues(self):
+
+ """Warn about duplicated ABI entries"""
+
+ for what, v in self.what_symbols.items():
+ files = v.get("file")
+ if not files:
+ # Should never happen if the parser works properly
+ self.log.warning("%s doesn't have a file associated", what)
+ continue
+
+ if len(files) == 1:
+ continue
+
+ f = []
+ for fname, lines in sorted(files.items()):
+ if not lines:
+ f.append(f"{fname}")
+ elif len(lines) == 1:
+ f.append(f"{fname}:{lines[0]}")
+ else:
+ f.append(f"{fname} lines {", ".join(lines)}")
+
+ self.log.warning("%s is defined %d times: %s",
+ what, len(f), "; ".join(f))
+
+
+class AbiRest:
+ """Initialize an argparse subparser for rest output"""
+
+ def __init__(self, subparsers):
+ """Initialize argparse subparsers"""
+
+ parser = subparsers.add_parser("rest",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ description="produce output in rest format")
+
+ parser.add_argument("--enable-lineno", action="store_true",
+ help="enable lineno")
+ parser.add_argument("--txt", action="store_true",
+ help="output text in Text mode instead of ReST")
+ parser.add_argument("--no-file", action="store_true",
+ help="Don't output files")
+ parser.add_argument("--show-hints", help="show-hints")
+
+ parser.set_defaults(func=self.run)
+
+ def run(self, args):
+ """Run subparser"""
+
+ args.parser.parse_abi()
+ args.parser.check_issues()
+ args.parser.print_data(args.enable_lineno, args.txt, not args.no_file)
+
+
+class AbiValidate:
+ """Initialize an argparse subparser for ABI validation"""
+
+ def __init__(self, subparsers):
+ """Initialize argparse subparsers"""
+
+ parser = subparsers.add_parser("validate",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ description="list events")
+
+ parser.set_defaults(func=self.run)
+
+ def run(self, args):
+ """Run subparser"""
+
+ args.parser.parse_abi()
+ args.parser.check_issues()
+
+
+def main():
+ """Main program"""
+
+ parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+
+ parser.add_argument("-d", "--debug", type=int, default=0,
+ help="debug level")
+ parser.add_argument("-D", "--dir", default=ABI_DIR,
+ help="directory with ABIs to be parsed")
+
+ subparsers = parser.add_subparsers()
+
+ AbiRest(subparsers)
+ AbiValidate(subparsers)
+
+ args = parser.parse_args()
+
+ if args.debug:
+ level = logging.DEBUG
+ else:
+ level = logging.INFO
+
+ logging.basicConfig(level=level, format="[%(levelname)s] %(message)s")
+
+ if "func" in args:
+ args.parser = AbiParser(args.dir, debug=args.debug)
+
+ args.func(args)
+ else:
+ sys.exit(f"Please specify a valid command for {sys.argv[0]}")
+
+
+# Call main method
+if __name__ == "__main__":
+ main()
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 08/10] [RFC] scripts/get_abi.py: add support for symbol search
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (6 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 07/10] [RFC] scripts: add a get_abi.py tool to generate ReST output Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 09/10] [RFC] docs: use get_abi.py for ABI generation Mauro Carvalho Chehab
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
Add support for searching an ABI symbol
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
scripts/get_abi.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/scripts/get_abi.py b/scripts/get_abi.py
index 64a0ec8b1d89..6a461f7cef32 100755
--- a/scripts/get_abi.py
+++ b/scripts/get_abi.py
@@ -498,6 +498,56 @@ class AbiParser:
self.log.warning("%s is defined %d times: %s",
what, len(f), "; ".join(f))
+ def search_symbols(self, expr):
+ """ Searches for ABI symbols """
+
+ regex = re.compile(expr, re.I)
+
+ found_keys = 0
+ for key, v in sorted(self.data.items(), key=lambda x: [0]):
+ wtype = v.get("type", "")
+ if wtype == "File":
+ continue
+
+ for what in v.get("what", [""]):
+ if regex.search(what):
+ found_keys += 1
+
+ kernelversion = v.get("kernelversion", "").strip(" \t\n")
+ date = v.get("date", "").strip(" \t\n")
+ contact = v.get("contact", "").strip(" \t\n")
+ users = v.get("users", "").strip(" \t\n")
+ desc = v.get("description", "").strip(" \t\n")
+
+ files = []
+ for f in v.get("file", ()):
+ files.append(f[0])
+
+ what = str(found_keys) + ". " + what
+ bar = "-" * len(what)
+
+ print(f"\n{what}\n{bar}\n")
+
+ if kernelversion:
+ print(f"Kernel version:\t\t{kernelversion}")
+
+ if date:
+ print(f"Date:\t\t\t{date}")
+
+ if contact:
+ print(f"Contact:\t\t{contact}")
+
+ if users:
+ print(f"Users:\t\t\t{users}")
+
+ print(f"Defined on file{'s'[:len(files) ^ 1]}:\t{", ".join(files)}")
+
+ if desc:
+ print(f"\n{desc.strip("\n")}\n")
+
+ if not found_keys:
+ print(f"Regular expression /{expr}/ not found.")
+
class AbiRest:
"""Initialize an argparse subparser for rest output"""
@@ -546,6 +596,28 @@ class AbiValidate:
args.parser.check_issues()
+class AbiSearch:
+ """Initialize an argparse subparser for ABI search"""
+
+ def __init__(self, subparsers):
+ """Initialize argparse subparsers"""
+
+ parser = subparsers.add_parser("search",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ description="Search ABI using a regular expression")
+
+ parser.add_argument("expression",
+ help="Case-insensitive search pattern for the ABI symbol")
+
+ parser.set_defaults(func=self.run)
+
+ def run(self, args):
+ """Run subparser"""
+
+ args.parser.parse_abi()
+ args.parser.search_symbols(args.expression)
+
+
def main():
"""Main program"""
@@ -560,6 +632,7 @@ def main():
AbiRest(subparsers)
AbiValidate(subparsers)
+ AbiSearch(subparsers)
args = parser.parse_args()
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 09/10] [RFC] docs: use get_abi.py for ABI generation
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (7 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 08/10] [RFC] scripts/get_abi.py: add support for symbol search Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 10/10] [RFC BOILERPLATE] scripts/get_abi.py: add support for undefined ABIs Mauro Carvalho Chehab
2025-03-27 21:58 ` [f2fs-dev] [PATCH RFC 00/10] Improve ABI documentation generation patchwork-bot+f2fs
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
Use the new script instead of the old one when generating ABI docs.
For now, execute it via exec. A future version may just import the
class.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
Documentation/admin-guide/abi-obsolete.rst | 1 -
Documentation/admin-guide/abi-removed.rst | 1 -
Documentation/admin-guide/abi-stable.rst | 1 -
Documentation/admin-guide/abi-testing.rst | 1 -
Documentation/sphinx/kernel_abi.py | 10 +++-------
5 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/Documentation/admin-guide/abi-obsolete.rst b/Documentation/admin-guide/abi-obsolete.rst
index 594e697aa1b2..1adc74047ed1 100644
--- a/Documentation/admin-guide/abi-obsolete.rst
+++ b/Documentation/admin-guide/abi-obsolete.rst
@@ -8,4 +8,3 @@ The description of the interface will document the reason why it is
obsolete and when it can be expected to be removed.
.. kernel-abi:: ABI/obsolete
- :rst:
diff --git a/Documentation/admin-guide/abi-removed.rst b/Documentation/admin-guide/abi-removed.rst
index f9e000c81828..61d247a5d296 100644
--- a/Documentation/admin-guide/abi-removed.rst
+++ b/Documentation/admin-guide/abi-removed.rst
@@ -2,4 +2,3 @@ ABI removed symbols
===================
.. kernel-abi:: ABI/removed
- :rst:
diff --git a/Documentation/admin-guide/abi-stable.rst b/Documentation/admin-guide/abi-stable.rst
index fc3361d847b1..445964b5b997 100644
--- a/Documentation/admin-guide/abi-stable.rst
+++ b/Documentation/admin-guide/abi-stable.rst
@@ -11,4 +11,3 @@ Most interfaces (like syscalls) are expected to never change and always
be available.
.. kernel-abi:: ABI/stable
- :rst:
diff --git a/Documentation/admin-guide/abi-testing.rst b/Documentation/admin-guide/abi-testing.rst
index 19767926b344..6869dfe895a3 100644
--- a/Documentation/admin-guide/abi-testing.rst
+++ b/Documentation/admin-guide/abi-testing.rst
@@ -17,4 +17,3 @@ name to the description of these interfaces, so that the kernel
developers can easily notify them if any changes occur.
.. kernel-abi:: ABI/testing
- :rst:
diff --git a/Documentation/sphinx/kernel_abi.py b/Documentation/sphinx/kernel_abi.py
index 5911bd0d7965..5970bd077a6d 100644
--- a/Documentation/sphinx/kernel_abi.py
+++ b/Documentation/sphinx/kernel_abi.py
@@ -14,7 +14,7 @@ u"""
:license: GPL Version 2, June 1991 see Linux/COPYING for details.
The ``kernel-abi`` (:py:class:`KernelCmd`) directive calls the
- scripts/get_abi.pl script to parse the Kernel ABI files.
+ scripts/get_abi.py script to parse the Kernel ABI files.
Overview of directive's argument and options.
@@ -67,7 +67,6 @@ class KernelCmd(Directive):
option_spec = {
"debug" : directives.flag,
- "rst" : directives.unchanged
}
def run(self):
@@ -78,15 +77,12 @@ class KernelCmd(Directive):
srctree = os.path.abspath(os.environ["srctree"])
args = [
- os.path.join(srctree, 'scripts/get_abi.pl'),
+ os.path.join(srctree, 'scripts/get_abi.py'),
+ '-D', os.path.join(srctree, 'Documentation', self.arguments[0]),
'rest',
'--enable-lineno',
- '--dir', os.path.join(srctree, 'Documentation', self.arguments[0]),
]
- if 'rst' in self.options:
- args.append('--rst-source')
-
lines = subprocess.check_output(args, cwd=os.path.dirname(doc.current_source)).decode('utf-8')
nodeList = self.nestedParse(lines, self.arguments[0])
return nodeList
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC 10/10] [RFC BOILERPLATE] scripts/get_abi.py: add support for undefined ABIs
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (8 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 09/10] [RFC] docs: use get_abi.py for ABI generation Mauro Carvalho Chehab
@ 2025-01-17 17:59 ` Mauro Carvalho Chehab
2025-03-27 21:58 ` [f2fs-dev] [PATCH RFC 00/10] Improve ABI documentation generation patchwork-bot+f2fs
10 siblings, 0 replies; 12+ messages in thread
From: Mauro Carvalho Chehab @ 2025-01-17 17:59 UTC (permalink / raw)
To: Linux Doc Mailing List, Jonathan Corbet, Greg Kroah-Hartman
Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, linux-kernel
For this RFC, let's keep here a boilerplate, just as a reminder.
This patch contains just an skeleton for the argparse stuff. The plan
is to implement such functionality here to be able to fully replace
all get_abi.pl functionality.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
scripts/get_abi.py | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/scripts/get_abi.py b/scripts/get_abi.py
index 6a461f7cef32..221338c0d893 100755
--- a/scripts/get_abi.py
+++ b/scripts/get_abi.py
@@ -618,6 +618,27 @@ class AbiSearch:
args.parser.search_symbols(args.expression)
+class AbiUndefined:
+ """
+ Initialize an argparse subparser for logic to check undefined ABI at
+ the current machine's sysfs
+ """
+
+ def __init__(self, subparsers):
+ """Initialize argparse subparsers"""
+
+ parser = subparsers.add_parser("undefined",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ description="check undefined ABIs on local machine")
+
+ parser.set_defaults(func=self.run)
+
+ def run(self, args):
+ """Run subparser"""
+
+ args.parser.parse_abi()
+
+
def main():
"""Main program"""
@@ -633,6 +654,7 @@ def main():
AbiRest(subparsers)
AbiValidate(subparsers)
AbiSearch(subparsers)
+ AbiUndefined(subparsers)
args = parser.parse_args()
--
2.47.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [f2fs-dev] [PATCH RFC 00/10] Improve ABI documentation generation
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
` (9 preceding siblings ...)
2025-01-17 17:59 ` [PATCH RFC 10/10] [RFC BOILERPLATE] scripts/get_abi.py: add support for undefined ABIs Mauro Carvalho Chehab
@ 2025-03-27 21:58 ` patchwork-bot+f2fs
10 siblings, 0 replies; 12+ messages in thread
From: patchwork-bot+f2fs @ 2025-03-27 21:58 UTC (permalink / raw)
To: Mauro Carvalho Chehab
Cc: linux-doc, corbet, gregkh, suzuki.poulose, james.clark,
linux-wireless, linux-kernel, linux-f2fs-devel, johannes,
coresight, linux-arm-kernel, mike.leach
Hello:
This patch was applied to jaegeuk/f2fs.git (dev)
by Jonathan Corbet <corbet@lwn.net>:
On Fri, 17 Jan 2025 18:59:29 +0100 you wrote:
> Hi Jon/Greg,
>
> The main goal of this RFC is to give a heads up of a work I've been doing to
> replace the get_abi.pl script with a python version.
>
> Patches 1-6 are OK to be applied:
> - Patch 1 changes the sort criteria of the ABI generation to use alphabetic order:
> currently, it is *almost* alphabetic, but, on some cases, it orders on a different
> way. No changes at the content, just at the order.
> I wrote it mainly to use the same sort criteria as the new tool, but IMO it is
> worth applying even before we switch to the python version.
>
> [...]
Here is the summary with links:
- [f2fs-dev,RFC,05/10] ABI: sysfs-fs-f2fs: fix date tags
https://git.kernel.org/jaegeuk/f2fs/c/90800df0da78
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-03-27 21:57 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-17 17:59 [PATCH RFC 00/10] Improve ABI documentation generation Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 01/10] scripts/get_abi.pl use label to better sort ABI symbols and files Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 02/10] ABI: sysfs-class-rfkill: fix kernelversion tags Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 03/10] ABI: sysfs-bus-coresight-*: " Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 04/10] ABI: sysfs-driver-dma-idxd: fix date tags Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 05/10] ABI: sysfs-fs-f2fs: " Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 06/10] ABI: sysfs-power: fix a what tag Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 07/10] [RFC] scripts: add a get_abi.py tool to generate ReST output Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 08/10] [RFC] scripts/get_abi.py: add support for symbol search Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 09/10] [RFC] docs: use get_abi.py for ABI generation Mauro Carvalho Chehab
2025-01-17 17:59 ` [PATCH RFC 10/10] [RFC BOILERPLATE] scripts/get_abi.py: add support for undefined ABIs Mauro Carvalho Chehab
2025-03-27 21:58 ` [f2fs-dev] [PATCH RFC 00/10] Improve ABI documentation generation patchwork-bot+f2fs
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox