[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2.2 07/15] xen: generate hypercall interface related code
On 03.11.21 16:08, Jan Beulich wrote:
On 03.11.2021 11:20, Juergen Gross wrote:
+# Generate the output
+END {
+ # Verbatim generated lines
+ for (i = 1; i <= e; i++)
+ printf("%s\n", emit[i]);
+ printf("\n");
+ # Generate prototypes
+ for (i = 1; i <= n; i++) {
+ for (p = 1; p <= n_pre[i]; p++) {
+ printf("%s %s_%s(", rettype[pre[i, p]], pre[i, p], fn[i]);
+ if (n_args[i] == 0)
+ printf("void");
+ else
+ for (j = 1; j <= n_args[i]; j++) {
+ if (j > 1)
+ printf(", ");
+ if (ptr[i, j])
+ printf("XEN_GUEST_HANDLE_PARAM(%s)", typ[i, j]);
+ else
+ printf("%s", typ[i, j]);
+ printf(" %s", arg[i, j]);
+ }
+ printf(");\n");
+ }
+ }
+ # Generate call sequences and args array contents
+ for (ca in caller) {
+ if (caller[ca] != 1)
+ continue;
+ need_mask = 0;
+ for (pl = 1; pl <= n_prios[ca]; pl++) {
+ for (pll = pl; pll > 1; pll--) {
+ if (prio_list[ca, pl] > p_list[pll - 1])
+ break;
+ else
+ p_list[pll] = p_list[pll - 1];
+ }
+ p_list[pll] = prio_list[ca, pl];
+ # If any prio but the default one has more than 1 entry we need
"mask"
+ if (p_list[pll] != 100 && prios[ca, p_list[pll]] > 1)
+ need_mask = 1;
+ }
+ printf("\n");
+ printf("#define call_handlers_%s(num, ret, a1, a2, a3, a4, a5) \\\n",
ca);
+ printf("{ \\\n");
In order to require a semicolon at the use site(s) of the macro I think
you want "({ \\\n" here. Everything else looks good to me so far, but
I'd really like to take a look at the generated output: Would you happen
to have available an instance, to supply in reply?
Okay.
The generated file is attached.
Juergen
Attachment:
hypercall-defs.h
Description: Text Data
Attachment:
OpenPGP_0xB0DE9DD628BF132F.asc
Description: OpenPGP public key
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature
|