Re: [PATCH] xen: make multicall debug boot time selectable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 7/3/24 7:56 AM, Juergen Gross wrote:

#define MC_BATCH 32 -#define MC_DEBUG 0
-
  #define MC_ARGS		(MC_BATCH * 16)
struct mc_buffer {
  	unsigned mcidx, argidx, cbidx;
  	struct multicall_entry entries[MC_BATCH];
-#if MC_DEBUG
-	struct multicall_entry debug[MC_BATCH];
-	void *caller[MC_BATCH];
-#endif
  	unsigned char args[MC_ARGS];
  	struct callback {
  		void (*fn)(void *);
@@ -50,13 +46,84 @@ struct mc_buffer {
  	} callbacks[MC_BATCH];
  };
+struct mc_debug_data {
+	struct multicall_entry debug[MC_BATCH];

'entries'? It's a mc_debug_data's copy of mc_buffer's entries.

Also, would it be better to keep these fields as a struct of scalars and instead have the percpu array of this struct? Otherwise there is a whole bunch of [MC_BATCH] arrays, all of them really indexed by the same value. (And while at it, there is no reason to have callbacks[MC_BATCH] sized like that -- it has nothing to do with batch size and can probably be made smaller)


+	void *caller[MC_BATCH];
+	size_t argsz[MC_BATCH];
+};
+
  static DEFINE_PER_CPU(struct mc_buffer, mc_buffer);
+static struct mc_debug_data __percpu *mc_debug_data;
+static struct mc_debug_data mc_debug_data_early __initdata;

How about (I think this should work):

static struct mc_debug_data __percpu *mc_debug_data __refdata = &mc_debug_data_early;

Then you won't need get_mc_debug_ptr().


-boris




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux