|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 06/15] cpufreq: Add Hardware P-State (HWP) driver
On 25.07.2023 15:26, Jason Andryuk wrote:
> On Tue, Jul 25, 2023 at 2:27 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>>
>> On 24.07.2023 21:49, Jason Andryuk wrote:
>>> On Mon, Jul 24, 2023 at 12:15 PM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>>>> On 24.07.2023 14:58, Jason Andryuk wrote:
>>>>> --- /dev/null
>>>>> +++ b/xen/arch/x86/acpi/cpufreq/hwp.c
>>>>> +#define hwp_err(cpu, fmt, ...) \
>>>>> + printk(XENLOG_ERR "HWP: CPU%u error: " fmt, cpu, ##__VA_ARGS__)
>>>>> +#define hwp_info(fmt, ...) printk(XENLOG_INFO "HWP: " fmt,
>>>>> ##__VA_ARGS__)
>>>>
>>>> I'm not convinced ", ##__VA_ARGS__" is a good construct to use. I notice
>>>> we have a few instances (mainly in code inherited from elsewhere), but I
>>>> think it ought to either be plain C99 style (without the ##) or purely
>>>> the gcc extension form (not using __VA_ARGS__).
>>>
>>> Using plain __VA_ARGS__ doesn't work for the cases without arguments:
>>> arch/x86/acpi/cpufreq/hwp.c:78:53: error: expected expression before ‘)’
>>> token
>>> 78 | printk(XENLOG_DEBUG "HWP: " fmt, __VA_ARGS__); \
>>> | ^
>>> arch/x86/acpi/cpufreq/hwp.c:201:9: note: in expansion of macro ‘hwp_verbose’
>>> 201 | hwp_verbose("disabled: No energy/performance
>>> preference available");
>>> | ^~~~~~~~~~~
>>
>> Of course.
>>
>>> I can use "__VA_OPT__(,) __VA_ARGS__" though.
>>
>> __VA_OPT__ is yet newer than C99, so this is an option only if all
>> compilers we continue to support actually know of this.
>
> Right, sorry.
>
>> We have no
>> uses of it in the codebase so far, which suggests you might best go
>> with the longstanding gcc extension here.
>
> FTAOD, "##__VA_ARGS__" is the longstanding extension?
No. But you've apparently found it ...
> It's the only
> one I've been able to get to compile. I'm reading
> https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html and it
> mentions a few different extensions.
>
> This part seemed promising:
> """
> This has been fixed in C++20, and GNU CPP also has a pair of
> extensions which deal with this problem.
>
> First, in GNU CPP, and in C++ beginning in C++20, you are allowed to
> leave the variable argument out entirely:
>
> eprintf ("success!\n")
> → fprintf(stderr, "success!\n", );
> """
>
> However, it doesn't seem to actually work for me. I still get an
> error like the one above for plain __VA_ARGS__. That is for:
>
> #define hwp_err(cpu, fmt, args...) \
> printk(XENLOG_ERR "HWP: CPU%u error: " fmt, cpu, args)
..., just that you're missing the ##:
#define hwp_err(cpu, fmt, args...) \
printk(XENLOG_ERR "HWP: CPU%u error: " fmt, cpu, ## args)
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |