On Thu, Sep 8, 2022 at 8:45 PM Sathyanarayanan Kuppuswamy <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx> wrote: > > > > On 9/8/22 7:16 AM, Wander Lairson Costa wrote: > >> +#ifdef DEBUG > >> +static void print_array_hex(const char *title, const char *prefix_str, > >> + const void *buf, int len) > >> +{ > >> + const __u8 *ptr = buf; > >> + int i, rowsize = HEX_DUMP_SIZE; > >> + > >> + if (!len || !buf) > >> + return; > >> + > >> + printf("\t\t%s", title); > >> + > >> + for (i = 0; i < len; i++) { > >> + if (!(i % rowsize)) > >> + printf("\n%s%.8x:", prefix_str, i); > >> + printf(" %.2x", ptr[i]); > >> + } > >> + > >> + printf("\n"); > >> +} > >> +#endif > >> + > >> +TEST(verify_report) > >> +{ > >> + __u8 reportdata[TDX_REPORTDATA_LEN]; > >> + struct tdreport tdreport; > >> + struct tdx_report_req req; > >> + int devfd, i; > >> + > >> + devfd = open(TDX_GUEST_DEVNAME, O_RDWR | O_SYNC); > >> + > >> + ASSERT_LT(0, devfd); > >> + > >> + /* Generate sample report data */ > >> + for (i = 0; i < TDX_REPORTDATA_LEN; i++) > >> + reportdata[i] = i; > >> + > >> + /* Initialize IOCTL request */ > >> + req.subtype = 0; > >> + req.reportdata = (__u64)reportdata; > >> + req.rpd_len = TDX_REPORTDATA_LEN; > >> + req.tdreport = (__u64)&tdreport; > >> + req.tdr_len = sizeof(tdreport); > >> + > >> + /* Get TDREPORT */ > >> + ASSERT_EQ(0, ioctl(devfd, TDX_CMD_GET_REPORT, &req)); > >> + > >> +#ifdef DEBUG > >> + print_array_hex("\n\t\tTDX report data\n", "", > >> + reportdata, sizeof(reportdata)); > >> + > >> + print_array_hex("\n\t\tTDX tdreport data\n", "", > >> + &tdreport, sizeof(tdreport)); > >> +#endif > > You can unconditionally define print_array_hex, and > > use `if (DEBUG)` instead of #ifdef `DEBUG here`. The compiler > > will get rid of the unused code when DEBUG is not defined > > as expected, but you get the parser to validate it > > independent of the definition of DEBUG. > > Currently, DEBUG is a macro, so we cannot use if (DEBUG) directly. > You are suggesting to change DEBUG to a variable? Any reason to > make this change? I think both changes are functionally similar. > So I am wondering why to make this change? > My thought is always to define DEBUG. If in debug mode it is defined to 1; otherwise to 0. Then, you can use `if (DEBUG)` instead of `#ifdef DEBUG`. But the former will always check the syntax of the debug code, independent of the value of DEBUG, and the compiler will generate the same code. The GNU coding standard [1] explains that better than I do. [1] https://www.gnu.org/prep/standards/standards.html#Conditional-Compilation > > > > -- > Sathyanarayanan Kuppuswamy > Linux Kernel Developer >