2024-05-03 01:42:10

by Joseph Jang

[permalink] [raw]
Subject: [PATCH 0/1] selftest: rtc: Add support rtc alarm content check

In order to make sure SET/GET WAKEUP services as optional patch has been
integrated correctly, we have created a shell script to validate
/proc/driver/rtc when it is not empty and then check the absence of alarm
content in RTC metadata according to the rtc wakealarm is supported or not.

Joseph Jang (1):
selftest: rtc: Add support rtc alarm content check

tools/testing/selftests/Makefile | 1 +
tools/testing/selftests/rtc/property/Makefile | 5 ++++
.../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
3 files changed, 33 insertions(+)
create mode 100644 tools/testing/selftests/rtc/property/Makefile
create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh

--
2.34.1



2024-05-03 01:42:13

by Joseph Jang

[permalink] [raw]
Subject: [PATCH 1/1] selftest: rtc: Add support rtc alarm content check

Some platforms do not support WAKEUP service by default, we use a shell
script to check the absence of alarm content in /proc/driver/rtc.

The script will validate /proc/driver/rtc when it is not empty and then
check if could find alarm content in it according to the rtc wakealarm
is supported or not.

Requires commit 101ca8d05913b ("rtc: efi: Enable SET/GET WAKEUP services
as optional")

Reviewed-by: Matthew R. Ochs <[email protected]>
Signed-off-by: Joseph Jang <[email protected]>
---
tools/testing/selftests/Makefile | 1 +
tools/testing/selftests/rtc/property/Makefile | 5 ++++
.../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
3 files changed, 33 insertions(+)
create mode 100644 tools/testing/selftests/rtc/property/Makefile
create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh

diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index e1504833654d..f5d43e2132e8 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -80,6 +80,7 @@ TARGETS += riscv
TARGETS += rlimits
TARGETS += rseq
TARGETS += rtc
+TARGETS += rtc/property
TARGETS += rust
TARGETS += seccomp
TARGETS += sgx
diff --git a/tools/testing/selftests/rtc/property/Makefile b/tools/testing/selftests/rtc/property/Makefile
new file mode 100644
index 000000000000..c6f7aa4f0e29
--- /dev/null
+++ b/tools/testing/selftests/rtc/property/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+TEST_PROGS := rtc-alarm-test.sh
+
+include ../../lib.mk
+
diff --git a/tools/testing/selftests/rtc/property/rtc-alarm-test.sh b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
new file mode 100755
index 000000000000..3bee1dd5fbd0
--- /dev/null
+++ b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+if [ ! -f /proc/driver/rtc ]; then
+ echo "SKIP: the /proc/driver/rtc is empty."
+ exit 4
+fi
+
+# Check if could find alarm content in /proc/driver/rtc according to
+# the rtc wakealarm is supported or not.
+if [ -n "$(ls /sys/class/rtc/rtc* | grep -i wakealarm)" ]; then
+ if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
+ exit 0
+ else
+ echo "ERROR: The alarm content is not found."
+ cat /proc/driver/rtc
+ exit 1
+ fi
+else
+ if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
+ echo "ERROR: The alarm content is found."
+ cat /proc/driver/rtc
+ exit 1
+ else
+ exit 0
+ fi
+fi
--
2.34.1


2024-05-03 07:16:06

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH 1/1] selftest: rtc: Add support rtc alarm content check

On 02/05/2024 18:41:02-0700, Joseph Jang wrote:
> Some platforms do not support WAKEUP service by default, we use a shell
> script to check the absence of alarm content in /proc/driver/rtc.

procfs for the RTC has been deprecated for a while, don't use it.

Instead, you can use the RTC_PARAM_GET ioctl to get RTC_PARAM_FEATURES
and then look at RTC_FEATURE_ALARM.
See https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git/tree/rtc.c

>
> The script will validate /proc/driver/rtc when it is not empty and then
> check if could find alarm content in it according to the rtc wakealarm
> is supported or not.
>
> Requires commit 101ca8d05913b ("rtc: efi: Enable SET/GET WAKEUP services
> as optional")
>
> Reviewed-by: Matthew R. Ochs <[email protected]>
> Signed-off-by: Joseph Jang <[email protected]>
> ---
> tools/testing/selftests/Makefile | 1 +
> tools/testing/selftests/rtc/property/Makefile | 5 ++++
> .../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
> 3 files changed, 33 insertions(+)
> create mode 100644 tools/testing/selftests/rtc/property/Makefile
> create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>
> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
> index e1504833654d..f5d43e2132e8 100644
> --- a/tools/testing/selftests/Makefile
> +++ b/tools/testing/selftests/Makefile
> @@ -80,6 +80,7 @@ TARGETS += riscv
> TARGETS += rlimits
> TARGETS += rseq
> TARGETS += rtc
> +TARGETS += rtc/property
> TARGETS += rust
> TARGETS += seccomp
> TARGETS += sgx
> diff --git a/tools/testing/selftests/rtc/property/Makefile b/tools/testing/selftests/rtc/property/Makefile
> new file mode 100644
> index 000000000000..c6f7aa4f0e29
> --- /dev/null
> +++ b/tools/testing/selftests/rtc/property/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +TEST_PROGS := rtc-alarm-test.sh
> +
> +include ../../lib.mk
> +
> diff --git a/tools/testing/selftests/rtc/property/rtc-alarm-test.sh b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> new file mode 100755
> index 000000000000..3bee1dd5fbd0
> --- /dev/null
> +++ b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> @@ -0,0 +1,27 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +if [ ! -f /proc/driver/rtc ]; then
> + echo "SKIP: the /proc/driver/rtc is empty."
> + exit 4
> +fi
> +
> +# Check if could find alarm content in /proc/driver/rtc according to
> +# the rtc wakealarm is supported or not.
> +if [ -n "$(ls /sys/class/rtc/rtc* | grep -i wakealarm)" ]; then
> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
> + exit 0
> + else
> + echo "ERROR: The alarm content is not found."
> + cat /proc/driver/rtc
> + exit 1
> + fi
> +else
> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
> + echo "ERROR: The alarm content is found."
> + cat /proc/driver/rtc
> + exit 1
> + else
> + exit 0
> + fi
> +fi
> --
> 2.34.1
>

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2024-05-03 10:48:18

by Joseph Jang

[permalink] [raw]
Subject: Re: [PATCH 1/1] selftest: rtc: Add support rtc alarm content check



On 2024/5/3 2:49 PM, Alexandre Belloni wrote:
> On 02/05/2024 18:41:02-0700, Joseph Jang wrote:
>> Some platforms do not support WAKEUP service by default, we use a shell
>> script to check the absence of alarm content in /proc/driver/rtc.
>
> procfs for the RTC has been deprecated for a while, don't use it.
>
> Instead, you can use the RTC_PARAM_GET ioctl to get RTC_PARAM_FEATURES
> and then look at RTC_FEATURE_ALARM.
> See https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git/tree/rtc.c
>

I found old version kernel doesn't support RTC_PARAM_GET ioctl. In order
support old version kernel testing, is it possible to use rtc procfs to
validate wakealarm function for old version kernel ?

Can I move this rtc alarm validation to
<linux_root>/tools/testing/selftests/rtc/rtctest.c ? So we could try to
use RTC_PARAM_GET ioctl
first and then roll back to use rtc procfs if RTC_PARAM_GET ioctl was
not supported.

Thank you,
Joseph.

>>
>> The script will validate /proc/driver/rtc when it is not empty and then
>> check if could find alarm content in it according to the rtc wakealarm
>> is supported or not.
>>
>> Requires commit 101ca8d05913b ("rtc: efi: Enable SET/GET WAKEUP services
>> as optional")
>>
>> Reviewed-by: Matthew R. Ochs <[email protected]>
>> Signed-off-by: Joseph Jang <[email protected]>
>> ---
>> tools/testing/selftests/Makefile | 1 +
>> tools/testing/selftests/rtc/property/Makefile | 5 ++++
>> .../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
>> 3 files changed, 33 insertions(+)
>> create mode 100644 tools/testing/selftests/rtc/property/Makefile
>> create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>>
>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
>> index e1504833654d..f5d43e2132e8 100644
>> --- a/tools/testing/selftests/Makefile
>> +++ b/tools/testing/selftests/Makefile
>> @@ -80,6 +80,7 @@ TARGETS += riscv
>> TARGETS += rlimits
>> TARGETS += rseq
>> TARGETS += rtc
>> +TARGETS += rtc/property
>> TARGETS += rust
>> TARGETS += seccomp
>> TARGETS += sgx
>> diff --git a/tools/testing/selftests/rtc/property/Makefile b/tools/testing/selftests/rtc/property/Makefile
>> new file mode 100644
>> index 000000000000..c6f7aa4f0e29
>> --- /dev/null
>> +++ b/tools/testing/selftests/rtc/property/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +TEST_PROGS := rtc-alarm-test.sh
>> +
>> +include ../../lib.mk
>> +
>> diff --git a/tools/testing/selftests/rtc/property/rtc-alarm-test.sh b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>> new file mode 100755
>> index 000000000000..3bee1dd5fbd0
>> --- /dev/null
>> +++ b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>> @@ -0,0 +1,27 @@
>> +#!/bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +if [ ! -f /proc/driver/rtc ]; then
>> + echo "SKIP: the /proc/driver/rtc is empty."
>> + exit 4
>> +fi
>> +
>> +# Check if could find alarm content in /proc/driver/rtc according to
>> +# the rtc wakealarm is supported or not.
>> +if [ -n "$(ls /sys/class/rtc/rtc* | grep -i wakealarm)" ]; then
>> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
>> + exit 0
>> + else
>> + echo "ERROR: The alarm content is not found."
>> + cat /proc/driver/rtc
>> + exit 1
>> + fi
>> +else
>> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
>> + echo "ERROR: The alarm content is found."
>> + cat /proc/driver/rtc
>> + exit 1
>> + else
>> + exit 0
>> + fi
>> +fi
>> --
>> 2.34.1
>>
>

2024-05-03 11:22:23

by Joseph Jang

[permalink] [raw]
Subject: Re: [PATCH 1/1] selftest: rtc: Add support rtc alarm content check

Hi Alexandre,

Thanks for your promptly response, I try to re-send the email again and
avoid the security scanner to disrupt the external link.


> procfs for the RTC has been deprecated for a while, don't use it.
>
> Instead, you can use the RTC_PARAM_GET ioctl to get RTC_PARAM_FEATURES
> and then look at RTC_FEATURE_ALARM.

I found old version kernel doesn't support RTC_PARAM_GET ioctl. In order
support old version kernel testing, is it possible to use rtc procfs to
validate wakealarm function for old version kernel ?

Can I move this rtc alarm validation to
<linux_root>/tools/testing/selftests/rtc/rtctest.c ? So we could try to
use RTC_PARAM_GET ioctl first and then roll back to use rtc procfs if
RTC_PARAM_GET ioctl was not supported.

Thank you,
Joseph.



On 2024/5/3 2:49 PM, Alexandre Belloni wrote:
> On 02/05/2024 18:41:02-0700, Joseph Jang wrote:
>> Some platforms do not support WAKEUP service by default, we use a shell
>> script to check the absence of alarm content in /proc/driver/rtc.
>
> procfs for the RTC has been deprecated for a while, don't use it.
>
> Instead, you can use the RTC_PARAM_GET ioctl to get RTC_PARAM_FEATURES
> and then look at RTC_FEATURE_ALARM.
> See https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git/tree/rtc.c
>
>>
>> The script will validate /proc/driver/rtc when it is not empty and then
>> check if could find alarm content in it according to the rtc wakealarm
>> is supported or not.
>>
>> Requires commit 101ca8d05913b ("rtc: efi: Enable SET/GET WAKEUP services
>> as optional")
>>
>> Reviewed-by: Matthew R. Ochs <[email protected]>
>> Signed-off-by: Joseph Jang <[email protected]>
>> ---
>> tools/testing/selftests/Makefile | 1 +
>> tools/testing/selftests/rtc/property/Makefile | 5 ++++
>> .../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
>> 3 files changed, 33 insertions(+)
>> create mode 100644 tools/testing/selftests/rtc/property/Makefile
>> create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>>
>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
>> index e1504833654d..f5d43e2132e8 100644
>> --- a/tools/testing/selftests/Makefile
>> +++ b/tools/testing/selftests/Makefile
>> @@ -80,6 +80,7 @@ TARGETS += riscv
>> TARGETS += rlimits
>> TARGETS += rseq
>> TARGETS += rtc
>> +TARGETS += rtc/property
>> TARGETS += rust
>> TARGETS += seccomp
>> TARGETS += sgx
>> diff --git a/tools/testing/selftests/rtc/property/Makefile b/tools/testing/selftests/rtc/property/Makefile
>> new file mode 100644
>> index 000000000000..c6f7aa4f0e29
>> --- /dev/null
>> +++ b/tools/testing/selftests/rtc/property/Makefile
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +TEST_PROGS := rtc-alarm-test.sh
>> +
>> +include ../../lib.mk
>> +
>> diff --git a/tools/testing/selftests/rtc/property/rtc-alarm-test.sh b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>> new file mode 100755
>> index 000000000000..3bee1dd5fbd0
>> --- /dev/null
>> +++ b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
>> @@ -0,0 +1,27 @@
>> +#!/bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +
>> +if [ ! -f /proc/driver/rtc ]; then
>> + echo "SKIP: the /proc/driver/rtc is empty."
>> + exit 4
>> +fi
>> +
>> +# Check if could find alarm content in /proc/driver/rtc according to
>> +# the rtc wakealarm is supported or not.
>> +if [ -n "$(ls /sys/class/rtc/rtc* | grep -i wakealarm)" ]; then
>> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
>> + exit 0
>> + else
>> + echo "ERROR: The alarm content is not found."
>> + cat /proc/driver/rtc
>> + exit 1
>> + fi
>> +else
>> + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
>> + echo "ERROR: The alarm content is found."
>> + cat /proc/driver/rtc
>> + exit 1
>> + else
>> + exit 0
>> + fi
>> +fi
>> --
>> 2.34.1
>>
>

2024-05-03 12:23:47

by Joseph Jang

[permalink] [raw]
Subject: Re: [PATCH 1/1] selftest: rtc: Add support rtc alarm content check

Hi Alexandre,

Thanks for your promptly response, I try to remove all HTML links and
resend the email again to avoid the security scanner to disrupt the
external link. Hope you can see this email without problems.


On 2024/5/3 8:20 PM, Joseph Jang wrote:
>
> On 02/05/2024 18:41:02-0700, Joseph Jang wrote:
> > Some platforms do not support WAKEUP service by default, we use a shell
> > script to check the absence of alarm content in /proc/driver/rtc.
>
> procfs for the RTC has been deprecated for a while, don't use it.
>
> Instead, you can use the RTC_PARAM_GET ioctl to get RTC_PARAM_FEATURES
> and then look at RTC_FEATURE_ALARM.
>
I found old version kernel doesn't support RTC_PARAM_GET ioctl. In order
support old version kernel testing, is it possible to use rtc procfs to
validate wakealarm function for old version kernel ?

Can I move this rtc alarm validation to
<linux_root>/tools/testing/selftests/rtc/rtctest.c ? So, we could try to
use RTC_PARAM_GET ioctl first and then roll back to use rtc procfs if
new RTC_PARAM_GET ioctl was not supported.


Thank you,
Joseph

> >
> > The script will validate /proc/driver/rtc when it is not empty and then
> > check if could find alarm content in it according to the rtc wakealarm
> > is supported or not.
> >
> > Requires commit 101ca8d05913b ("rtc: efi: Enable SET/GET WAKEUP services
> > as optional")
> >
> > Reviewed-by: Matthew R. Ochs <[email protected]>
> > Signed-off-by: Joseph Jang <[email protected]>
> > ---
> > tools/testing/selftests/Makefile | 1 +
> > tools/testing/selftests/rtc/property/Makefile | 5 ++++
> > .../selftests/rtc/property/rtc-alarm-test.sh | 27 +++++++++++++++++++
> > 3 files changed, 33 insertions(+)
> > create mode 100644 tools/testing/selftests/rtc/property/Makefile
> > create mode 100755 tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> >
> > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
> > index e1504833654d..f5d43e2132e8 100644
> > --- a/tools/testing/selftests/Makefile
> > +++ b/tools/testing/selftests/Makefile
> > @@ -80,6 +80,7 @@ TARGETS += riscv
> > TARGETS += rlimits
> > TARGETS += rseq
> > TARGETS += rtc
> > +TARGETS += rtc/property
> > TARGETS += rust
> > TARGETS += seccomp
> > TARGETS += sgx
> > diff --git a/tools/testing/selftests/rtc/property/Makefile
> b/tools/testing/selftests/rtc/property/Makefile
> > new file mode 100644
> > index 000000000000..c6f7aa4f0e29
> > --- /dev/null
> > +++ b/tools/testing/selftests/rtc/property/Makefile
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +TEST_PROGS := rtc-alarm-test.sh
> > +
> > +include ../../lib.mk
> > +
> > diff --git a/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> > new file mode 100755
> > index 000000000000..3bee1dd5fbd0
> > --- /dev/null
> > +++ b/tools/testing/selftests/rtc/property/rtc-alarm-test.sh
> > @@ -0,0 +1,27 @@
> > +#!/bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +if [ ! -f /proc/driver/rtc ]; then
> > + echo "SKIP: the /proc/driver/rtc is empty."
> > + exit 4
> > +fi
> > +
> > +# Check if could find alarm content in /proc/driver/rtc according to
> > +# the rtc wakealarm is supported or not.
> > +if [ -n "$(ls /sys/class/rtc/rtc* | grep -i wakealarm)" ]; then
> > + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
> > + exit 0
> > + else
> > + echo "ERROR: The alarm content is not found."
> > + cat /proc/driver/rtc
> > + exit 1
> > + fi
> > +else
> > + if [ -n "$(grep -i alarm /proc/driver/rtc)" ]; then
> > + echo "ERROR: The alarm content is found."
> > + cat /proc/driver/rtc
> > + exit 1
> > + else
> > + exit 0
> > + fi
> > +fi
> > --
> > 2.34.1
> >
>
> --
> Alexandre Belloni, co-owner and COO, Bootlin
> Embedded Linux and Kernel engineering
>