Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

arm64: smccc: replace custom COUNT_ARGS() & CONCATENATE() implementations

Replace custom implementation of the macros from args.h.

Link: https://lkml.kernel.org/r/20230718211147.18647-4-andriy.shevchenko@linux.intel.com
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Borislav Petkov (AMD) <bp@alien8.de>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: Daniel Latypov <dlatypov@google.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Gow <davidgow@google.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
Cc: Sudeep Holla <sudeep.holla@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Andy Shevchenko and committed by
Andrew Morton
90e3e185 15beb1b7

+32 -37
+32 -37
include/linux/arm-smccc.h
··· 5 5 #ifndef __LINUX_ARM_SMCCC_H 6 6 #define __LINUX_ARM_SMCCC_H 7 7 8 + #include <linux/args.h> 8 9 #include <linux/init.h> 9 10 #include <uapi/linux/const.h> 10 11 ··· 414 413 415 414 #endif 416 415 417 - #define ___count_args(_0, _1, _2, _3, _4, _5, _6, _7, _8, x, ...) x 416 + #define __constraint_read_2 "r" (arg0) 417 + #define __constraint_read_3 __constraint_read_2, "r" (arg1) 418 + #define __constraint_read_4 __constraint_read_3, "r" (arg2) 419 + #define __constraint_read_5 __constraint_read_4, "r" (arg3) 420 + #define __constraint_read_6 __constraint_read_5, "r" (arg4) 421 + #define __constraint_read_7 __constraint_read_6, "r" (arg5) 422 + #define __constraint_read_8 __constraint_read_7, "r" (arg6) 423 + #define __constraint_read_9 __constraint_read_8, "r" (arg7) 418 424 419 - #define __count_args(...) \ 420 - ___count_args(__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0) 421 - 422 - #define __constraint_read_0 "r" (arg0) 423 - #define __constraint_read_1 __constraint_read_0, "r" (arg1) 424 - #define __constraint_read_2 __constraint_read_1, "r" (arg2) 425 - #define __constraint_read_3 __constraint_read_2, "r" (arg3) 426 - #define __constraint_read_4 __constraint_read_3, "r" (arg4) 427 - #define __constraint_read_5 __constraint_read_4, "r" (arg5) 428 - #define __constraint_read_6 __constraint_read_5, "r" (arg6) 429 - #define __constraint_read_7 __constraint_read_6, "r" (arg7) 430 - 431 - #define __declare_arg_0(a0, res) \ 425 + #define __declare_arg_2(a0, res) \ 432 426 struct arm_smccc_res *___res = res; \ 433 427 register unsigned long arg0 asm("r0") = (u32)a0 434 428 435 - #define __declare_arg_1(a0, a1, res) \ 429 + #define __declare_arg_3(a0, a1, res) \ 436 430 typeof(a1) __a1 = a1; \ 437 431 struct arm_smccc_res *___res = res; \ 438 432 register unsigned long arg0 asm("r0") = (u32)a0; \ 439 433 register typeof(a1) arg1 asm("r1") = __a1 440 434 441 - #define __declare_arg_2(a0, a1, a2, res) \ 435 + #define __declare_arg_4(a0, a1, a2, res) \ 442 436 typeof(a1) __a1 = a1; \ 443 437 typeof(a2) __a2 = a2; \ 444 438 struct arm_smccc_res *___res = res; \ ··· 441 445 register typeof(a1) arg1 asm("r1") = __a1; \ 442 446 register typeof(a2) arg2 asm("r2") = __a2 443 447 444 - #define __declare_arg_3(a0, a1, a2, a3, res) \ 448 + #define __declare_arg_5(a0, a1, a2, a3, res) \ 445 449 typeof(a1) __a1 = a1; \ 446 450 typeof(a2) __a2 = a2; \ 447 451 typeof(a3) __a3 = a3; \ ··· 451 455 register typeof(a2) arg2 asm("r2") = __a2; \ 452 456 register typeof(a3) arg3 asm("r3") = __a3 453 457 454 - #define __declare_arg_4(a0, a1, a2, a3, a4, res) \ 458 + #define __declare_arg_6(a0, a1, a2, a3, a4, res) \ 455 459 typeof(a4) __a4 = a4; \ 456 - __declare_arg_3(a0, a1, a2, a3, res); \ 460 + __declare_arg_5(a0, a1, a2, a3, res); \ 457 461 register typeof(a4) arg4 asm("r4") = __a4 458 462 459 - #define __declare_arg_5(a0, a1, a2, a3, a4, a5, res) \ 463 + #define __declare_arg_7(a0, a1, a2, a3, a4, a5, res) \ 460 464 typeof(a5) __a5 = a5; \ 461 - __declare_arg_4(a0, a1, a2, a3, a4, res); \ 465 + __declare_arg_6(a0, a1, a2, a3, a4, res); \ 462 466 register typeof(a5) arg5 asm("r5") = __a5 463 467 464 - #define __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res) \ 468 + #define __declare_arg_8(a0, a1, a2, a3, a4, a5, a6, res) \ 465 469 typeof(a6) __a6 = a6; \ 466 - __declare_arg_5(a0, a1, a2, a3, a4, a5, res); \ 470 + __declare_arg_7(a0, a1, a2, a3, a4, a5, res); \ 467 471 register typeof(a6) arg6 asm("r6") = __a6 468 472 469 - #define __declare_arg_7(a0, a1, a2, a3, a4, a5, a6, a7, res) \ 473 + #define __declare_arg_9(a0, a1, a2, a3, a4, a5, a6, a7, res) \ 470 474 typeof(a7) __a7 = a7; \ 471 - __declare_arg_6(a0, a1, a2, a3, a4, a5, a6, res); \ 475 + __declare_arg_8(a0, a1, a2, a3, a4, a5, a6, res); \ 472 476 register typeof(a7) arg7 asm("r7") = __a7 473 - 474 - #define ___declare_args(count, ...) __declare_arg_ ## count(__VA_ARGS__) 475 - #define __declare_args(count, ...) ___declare_args(count, __VA_ARGS__) 476 - 477 - #define ___constraints(count) \ 478 - : __constraint_read_ ## count \ 479 - : smccc_sve_clobbers "memory" 480 - #define __constraints(count) ___constraints(count) 481 477 482 478 /* 483 479 * We have an output list that is not necessarily used, and GCC feels ··· 482 494 register unsigned long r1 asm("r1"); \ 483 495 register unsigned long r2 asm("r2"); \ 484 496 register unsigned long r3 asm("r3"); \ 485 - __declare_args(__count_args(__VA_ARGS__), __VA_ARGS__); \ 497 + CONCATENATE(__declare_arg_, \ 498 + COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__); \ 486 499 asm volatile(SMCCC_SVE_CHECK \ 487 500 inst "\n" : \ 488 501 "=r" (r0), "=r" (r1), "=r" (r2), "=r" (r3) \ 489 - __constraints(__count_args(__VA_ARGS__))); \ 502 + : CONCATENATE(__constraint_read_, \ 503 + COUNT_ARGS(__VA_ARGS__)) \ 504 + : smccc_sve_clobbers "memory"); \ 490 505 if (___res) \ 491 506 *___res = (typeof(*___res)){r0, r1, r2, r3}; \ 492 507 } while (0) ··· 533 542 */ 534 543 #define __fail_smccc_1_1(...) \ 535 544 do { \ 536 - __declare_args(__count_args(__VA_ARGS__), __VA_ARGS__); \ 537 - asm ("" : __constraints(__count_args(__VA_ARGS__))); \ 545 + CONCATENATE(__declare_arg_, \ 546 + COUNT_ARGS(__VA_ARGS__))(__VA_ARGS__); \ 547 + asm ("" : \ 548 + : CONCATENATE(__constraint_read_, \ 549 + COUNT_ARGS(__VA_ARGS__)) \ 550 + : smccc_sve_clobbers "memory"); \ 538 551 if (___res) \ 539 552 ___res->a0 = SMCCC_RET_NOT_SUPPORTED; \ 540 553 } while (0)