<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello Cyril,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks a lot for reviewing. </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I agree that reading kconfig every time is not fun. But would it be better to read it once into global variable? My concern is that your solution implicitly changes expected values that might confuse people who occasionally don't look at the bottom of program. </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<u>How about:</u></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
inline void _hugetlbfs_supported()
<div>{</div>
<div>struct tst_kconfig_var kconfig = {</div>
<blockquote style="margin-top:0;margin-bottom:0">
<div>.id = CONFIG_HUGETLBFS,</div>
<div>.id_len = sizeof(CONFIG_HUGETLBFS)-1,</div>
</blockquote>
<div>};</div>
<div><br>
</div>
<blockquote style="margin-top:0;margin-bottom:0">
<div>tst_kconfig_read(&kconfig, 1);</div>
<div>hugetlbfs_supported = kconfig.choice == 'y';</div>
</blockquote>
}<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
....</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
static void do_test(unsigned int n)
<div>{</div>
<blockquote style="margin-top:0;margin-bottom:0">
<div>struct tcase *tc = &tcases[n];</div>
<div>pid_t pid;</div>
</blockquote>
<div><br>
</div>
<div>if (((tc->flags & SHM_HUGETLB) == SHM_HUGETLB) && ! hugetlbfs_supported)</div>
<div>{</div>
<blockquote style="margin-top:0;margin-bottom:0">
<div>tst_brk(TCONF,</div>
<div>"Unsuitable kernel config: CONFIG_HUGETLBFS missing");</div>
</blockquote>
}<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
....</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
---</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Bogdan Lezhepekov, SUSE</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Cyril Hrubis <chrubis@suse.cz><br>
<b>Sent:</b> Monday, August 2, 2021 17:42<br>
<b>To:</b> Bogdan Lezhepekov <bogdan.lezhepekov@suse.com><br>
<b>Cc:</b> ltp@lists.linux.it <ltp@lists.linux.it><br>
<b>Subject:</b> Re: [LTP] [PATCH v1] shmget02: check if CONFIG_HUGETLBFS enabled in kernel</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi!<br>
> Two tests call shmget with a flag SHM_HUGETLB, trying to<br>
> allocate the segment using "huge" pages. The hugetlbpage<br>
> support needs to be enabled in kernel (CONFIG_HUGETLBFS),<br>
> otherwise shmget returns EINVAL.<br>
> <br>
> Signed-off-by: Bogdan Lezhepekov <bogdan.lezhepekov@suse.com><br>
> ---<br>
>  .../kernel/syscalls/ipc/shmget/shmget02.c     | 21 +++++++++++++++++++<br>
>  1 file changed, 21 insertions(+)<br>
> <br>
> diff --git a/testcases/kernel/syscalls/ipc/shmget/shmget02.c b/testcases/kernel/syscalls/ipc/shmget/shmget02.c<br>
> index 66a4b94ee..4d515fb81 100644<br>
> --- a/testcases/kernel/syscalls/ipc/shmget/shmget02.c<br>
> +++ b/testcases/kernel/syscalls/ipc/shmget/shmget02.c<br>
> @@ -32,10 +32,13 @@<br>
>  #include <sys/shm.h><br>
>  #include <grp.h><br>
>  #include "tst_safe_sysv_ipc.h"<br>
> +#include "tst_kconfig.h"<br>
>  #include "tst_test.h"<br>
>  #include "libnewipc.h"<br>
>  #include "lapi/shm.h"<br>
>  <br>
> +#define CONFIG_HUGETLBFS "CONFIG_HUGETLBFS"<br>
> +<br>
>  static int shm_id = -1;<br>
>  static key_t shmkey, shmkey1;<br>
>  static struct passwd *pw;<br>
> @@ -60,11 +63,29 @@ static struct tcase {<br>
>        {&shmkey1, SHM_SIZE, IPC_CREAT | SHM_HUGETLB, 0, 0, ENOMEM}<br>
>  };<br>
>  <br>
> +inline static int hugetlbfs_enabled()<br>
> +{<br>
> +     struct tst_kconfig_var kconfig = {<br>
> +             .id = CONFIG_HUGETLBFS,<br>
> +             .id_len = sizeof(CONFIG_HUGETLBFS)-1,<br>
> +     };<br>
> +<br>
> +     tst_kconfig_read(&kconfig, 1);<br>
> +     return kconfig.choice == 'y';<br>
> +}<br>
> +<br>
>  static void do_test(unsigned int n)<br>
>  {<br>
>        struct tcase *tc = &tcases[n];<br>
>        pid_t pid;<br>
>  <br>
> +     if (((tc->flags & SHM_HUGETLB) == SHM_HUGETLB) && ! hugetlbfs_enabled())<br>
> +     {<br>
> +             tst_brk(TCONF,<br>
> +                     "Unsuitable kernel config: CONFIG_HUGETLBFS missing");<br>
> +             return;<br>
> +     }<br>
<br>
We whould really update the tcases array in the setup instead as this<br>
will re-read the whole kernel config on each do_test() iteration.<br>
<br>
Something as:<br>
<br>
static void setup(void)<br>
{<br>
        ...<br>
<br>
        if (!hugetlb_supported()) {<br>
<br>
                tst_res(TINFO, "SHM_HUGETLB not supported by kernel");<br>
<br>
                for (i = 0; i < ARRAY_SIZE(tcases); i++) {<br>
                        if (tcases[i].flags & SHM_HUGETLB)<br>
                                tcases[i].exp_err = EINVAL;<br>
                }<br>
        }<br>
        ...<br>
}<br>
<br>
>        if (tc->exp_user == 0 && tc->exp_group == 0) {<br>
>                TST_EXP_FAIL2(shmget(*tc->shmkey, tc->size, tc->flags), tc->exp_err,<br>
>                        "shmget(%i, %lu, %i)", *tc->shmkey, tc->size, tc->flags);<br>
> -- <br>
> 2.32.0<br>
> <br>
> <br>
> -- <br>
> Mailing list info: <a href="https://lists.linux.it/listinfo/ltp">https://lists.linux.it/listinfo/ltp</a><br>
<br>
-- <br>
Cyril Hrubis<br>
chrubis@suse.cz<br>
<br>
</div>
</span></font></div>
</body>
</html>