All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chanwoo Choi <chanwoo@kernel.org>
To: kernel test robot <lkp@intel.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-rockchip@lists.infradead.org
Cc: oe-kbuild-all@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	kernel@pengutronix.de,
	Michael Riesch <michael.riesch@wolfvision.net>,
	Robin Murphy <robin.murphy@arm.com>,
	Vincent Legoll <vincent.legoll@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	devicetree@vger.kernel.org,
	Sebastian Reichel <sebastian.reichel@collabora.com>
Subject: Re: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
Date: Thu, 19 Oct 2023 00:11:14 +0900	[thread overview]
Message-ID: <f5ce51a4-d47d-4074-9498-8632b09791e6@kernel.org> (raw)
In-Reply-To: <202310181557.GIXGL21M-lkp@intel.com>

Hi Sascha, 

Could you plesae fix the following kernel build report?

On 23. 10. 18. 16:58, kernel test robot wrote:
> Hi Sascha,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on linus/master]
> [also build test WARNING on v6.6-rc6]
> [cannot apply to next-20231018]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Sascha-Hauer/PM-devfreq-rockchip-dfi-Make-pmu-regmap-mandatory/20231018-142228
> base:   linus/master
> patch link:    https://lore.kernel.org/r/20231018061714.3553817-17-s.hauer%40pengutronix.de
> patch subject: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
> config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310181557.GIXGL21M-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>>> drivers/devfreq/event/rockchip-dfi.c:203:13: warning: 'rockchip_ddr_perf_counters_add' defined but not used [-Wunused-function]
>      203 | static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> --
>>> drivers/devfreq/event/rockchip-dfi.c:79: warning: Function parameter or member 'write_access' not described in 'dmc_count_channel'
> 
> 
> vim +/rockchip_ddr_perf_counters_add +203 drivers/devfreq/event/rockchip-dfi.c
> 
>     66	
>     67	/**
>     68	 * struct dmc_count_channel - structure to hold counter values from the DDR controller
>     69	 * @access:       Number of read and write accesses
>     70	 * @clock_cycles: DDR clock cycles
>     71	 * @read_access:  number of read accesses
>     72	 * @write_acccess: number of write accesses
>     73	 */
>     74	struct dmc_count_channel {
>     75		u64 access;
>     76		u64 clock_cycles;
>     77		u64 read_access;
>     78		u64 write_access;
>   > 79	};
>     80	
>     81	struct dmc_count {
>     82		struct dmc_count_channel c[DMC_MAX_CHANNELS];
>     83	};
>     84	
>     85	/*
>     86	 * The dfi controller can monitor DDR load. It has an upper and lower threshold
>     87	 * for the operating points. Whenever the usage leaves these bounds an event is
>     88	 * generated to indicate the DDR frequency should be changed.
>     89	 */
>     90	struct rockchip_dfi {
>     91		struct devfreq_event_dev *edev;
>     92		struct devfreq_event_desc desc;
>     93		struct dmc_count last_event_count;
>     94	
>     95		struct dmc_count last_perf_count;
>     96		struct dmc_count total_count;
>     97		seqlock_t count_seqlock; /* protects last_perf_count and total_count */
>     98	
>     99		struct device *dev;
>    100		void __iomem *regs;
>    101		struct regmap *regmap_pmu;
>    102		struct clk *clk;
>    103		int usecount;
>    104		struct mutex mutex;
>    105		u32 ddr_type;
>    106		unsigned int channel_mask;
>    107		unsigned int max_channels;
>    108		enum cpuhp_state cpuhp_state;
>    109		struct hlist_node node;
>    110		struct pmu pmu;
>    111		struct hrtimer timer;
>    112		unsigned int cpu;
>    113		int active_events;
>    114		int burst_len;
>    115		int buswidth[DMC_MAX_CHANNELS];
>    116	};
>    117	
>    118	static int rockchip_dfi_enable(struct rockchip_dfi *dfi)
>    119	{
>    120		void __iomem *dfi_regs = dfi->regs;
>    121		int ret = 0;
>    122	
>    123		mutex_lock(&dfi->mutex);
>    124	
>    125		dfi->usecount++;
>    126		if (dfi->usecount > 1)
>    127			goto out;
>    128	
>    129		ret = clk_prepare_enable(dfi->clk);
>    130		if (ret) {
>    131			dev_err(&dfi->edev->dev, "failed to enable dfi clk: %d\n", ret);
>    132			goto out;
>    133		}
>    134	
>    135		/* clear DDRMON_CTRL setting */
>    136		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_TIMER_CNT_EN | DDRMON_CTRL_SOFTWARE_EN |
>    137			       DDRMON_CTRL_HARDWARE_EN), dfi_regs + DDRMON_CTRL);
>    138	
>    139		/* set ddr type to dfi */
>    140		switch (dfi->ddr_type) {
>    141		case ROCKCHIP_DDRTYPE_LPDDR2:
>    142		case ROCKCHIP_DDRTYPE_LPDDR3:
>    143			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR23, DDRMON_CTRL_DDR_TYPE_MASK),
>    144				       dfi_regs + DDRMON_CTRL);
>    145			break;
>    146		case ROCKCHIP_DDRTYPE_LPDDR4:
>    147		case ROCKCHIP_DDRTYPE_LPDDR4X:
>    148			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR4, DDRMON_CTRL_DDR_TYPE_MASK),
>    149				       dfi_regs + DDRMON_CTRL);
>    150			break;
>    151		default:
>    152			break;
>    153		}
>    154	
>    155		/* enable count, use software mode */
>    156		writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_SOFTWARE_EN, DDRMON_CTRL_SOFTWARE_EN),
>    157			       dfi_regs + DDRMON_CTRL);
>    158	out:
>    159		mutex_unlock(&dfi->mutex);
>    160	
>    161		return ret;
>    162	}
>    163	
>    164	static void rockchip_dfi_disable(struct rockchip_dfi *dfi)
>    165	{
>    166		void __iomem *dfi_regs = dfi->regs;
>    167	
>    168		mutex_lock(&dfi->mutex);
>    169	
>    170		dfi->usecount--;
>    171	
>    172		WARN_ON_ONCE(dfi->usecount < 0);
>    173	
>    174		if (dfi->usecount > 0)
>    175			goto out;
>    176	
>    177		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_SOFTWARE_EN),
>    178			       dfi_regs + DDRMON_CTRL);
>    179		clk_disable_unprepare(dfi->clk);
>    180	out:
>    181		mutex_unlock(&dfi->mutex);
>    182	}
>    183	
>    184	static void rockchip_dfi_read_counters(struct rockchip_dfi *dfi, struct dmc_count *res)
>    185	{
>    186		u32 i;
>    187		void __iomem *dfi_regs = dfi->regs;
>    188	
>    189		for (i = 0; i < dfi->max_channels; i++) {
>    190			if (!(dfi->channel_mask & BIT(i)))
>    191				continue;
>    192			res->c[i].read_access = readl_relaxed(dfi_regs +
>    193					DDRMON_CH0_RD_NUM + i * 20);
>    194			res->c[i].write_access = readl_relaxed(dfi_regs +
>    195					DDRMON_CH0_WR_NUM + i * 20);
>    196			res->c[i].access = readl_relaxed(dfi_regs +
>    197					DDRMON_CH0_DFI_ACCESS_NUM + i * 20);
>    198			res->c[i].clock_cycles = readl_relaxed(dfi_regs +
>    199					DDRMON_CH0_COUNT_NUM + i * 20);
>    200		}
>    201	}
>    202	
>  > 203	static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>    204						   const struct dmc_count *now,
>    205						   struct dmc_count *res)
>    206	{
>    207		const struct dmc_count *last = &dfi->last_perf_count;
>    208		int i;
>    209	
>    210		for (i = 0; i < dfi->max_channels; i++) {
>    211			res->c[i].read_access = dfi->total_count.c[i].read_access +
>    212				(u32)(now->c[i].read_access - last->c[i].read_access);
>    213			res->c[i].write_access = dfi->total_count.c[i].write_access +
>    214				(u32)(now->c[i].write_access - last->c[i].write_access);
>    215			res->c[i].access = dfi->total_count.c[i].access +
>    216				(u32)(now->c[i].access - last->c[i].access);
>    217			res->c[i].clock_cycles = dfi->total_count.c[i].clock_cycles +
>    218				(u32)(now->c[i].clock_cycles - last->c[i].clock_cycles);
>    219		}
>    220	}
>    221	
> 

-- 
Best Regards,
Samsung Electronics
Chanwoo Choi


WARNING: multiple messages have this Message-ID (diff)
From: Chanwoo Choi <chanwoo@kernel.org>
To: kernel test robot <lkp@intel.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-rockchip@lists.infradead.org
Cc: oe-kbuild-all@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	kernel@pengutronix.de,
	Michael Riesch <michael.riesch@wolfvision.net>,
	Robin Murphy <robin.murphy@arm.com>,
	Vincent Legoll <vincent.legoll@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	devicetree@vger.kernel.org,
	Sebastian Reichel <sebastian.reichel@collabora.com>
Subject: Re: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
Date: Thu, 19 Oct 2023 00:11:14 +0900	[thread overview]
Message-ID: <f5ce51a4-d47d-4074-9498-8632b09791e6@kernel.org> (raw)
In-Reply-To: <202310181557.GIXGL21M-lkp@intel.com>

Hi Sascha, 

Could you plesae fix the following kernel build report?

On 23. 10. 18. 16:58, kernel test robot wrote:
> Hi Sascha,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on linus/master]
> [also build test WARNING on v6.6-rc6]
> [cannot apply to next-20231018]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Sascha-Hauer/PM-devfreq-rockchip-dfi-Make-pmu-regmap-mandatory/20231018-142228
> base:   linus/master
> patch link:    https://lore.kernel.org/r/20231018061714.3553817-17-s.hauer%40pengutronix.de
> patch subject: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
> config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310181557.GIXGL21M-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>>> drivers/devfreq/event/rockchip-dfi.c:203:13: warning: 'rockchip_ddr_perf_counters_add' defined but not used [-Wunused-function]
>      203 | static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> --
>>> drivers/devfreq/event/rockchip-dfi.c:79: warning: Function parameter or member 'write_access' not described in 'dmc_count_channel'
> 
> 
> vim +/rockchip_ddr_perf_counters_add +203 drivers/devfreq/event/rockchip-dfi.c
> 
>     66	
>     67	/**
>     68	 * struct dmc_count_channel - structure to hold counter values from the DDR controller
>     69	 * @access:       Number of read and write accesses
>     70	 * @clock_cycles: DDR clock cycles
>     71	 * @read_access:  number of read accesses
>     72	 * @write_acccess: number of write accesses
>     73	 */
>     74	struct dmc_count_channel {
>     75		u64 access;
>     76		u64 clock_cycles;
>     77		u64 read_access;
>     78		u64 write_access;
>   > 79	};
>     80	
>     81	struct dmc_count {
>     82		struct dmc_count_channel c[DMC_MAX_CHANNELS];
>     83	};
>     84	
>     85	/*
>     86	 * The dfi controller can monitor DDR load. It has an upper and lower threshold
>     87	 * for the operating points. Whenever the usage leaves these bounds an event is
>     88	 * generated to indicate the DDR frequency should be changed.
>     89	 */
>     90	struct rockchip_dfi {
>     91		struct devfreq_event_dev *edev;
>     92		struct devfreq_event_desc desc;
>     93		struct dmc_count last_event_count;
>     94	
>     95		struct dmc_count last_perf_count;
>     96		struct dmc_count total_count;
>     97		seqlock_t count_seqlock; /* protects last_perf_count and total_count */
>     98	
>     99		struct device *dev;
>    100		void __iomem *regs;
>    101		struct regmap *regmap_pmu;
>    102		struct clk *clk;
>    103		int usecount;
>    104		struct mutex mutex;
>    105		u32 ddr_type;
>    106		unsigned int channel_mask;
>    107		unsigned int max_channels;
>    108		enum cpuhp_state cpuhp_state;
>    109		struct hlist_node node;
>    110		struct pmu pmu;
>    111		struct hrtimer timer;
>    112		unsigned int cpu;
>    113		int active_events;
>    114		int burst_len;
>    115		int buswidth[DMC_MAX_CHANNELS];
>    116	};
>    117	
>    118	static int rockchip_dfi_enable(struct rockchip_dfi *dfi)
>    119	{
>    120		void __iomem *dfi_regs = dfi->regs;
>    121		int ret = 0;
>    122	
>    123		mutex_lock(&dfi->mutex);
>    124	
>    125		dfi->usecount++;
>    126		if (dfi->usecount > 1)
>    127			goto out;
>    128	
>    129		ret = clk_prepare_enable(dfi->clk);
>    130		if (ret) {
>    131			dev_err(&dfi->edev->dev, "failed to enable dfi clk: %d\n", ret);
>    132			goto out;
>    133		}
>    134	
>    135		/* clear DDRMON_CTRL setting */
>    136		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_TIMER_CNT_EN | DDRMON_CTRL_SOFTWARE_EN |
>    137			       DDRMON_CTRL_HARDWARE_EN), dfi_regs + DDRMON_CTRL);
>    138	
>    139		/* set ddr type to dfi */
>    140		switch (dfi->ddr_type) {
>    141		case ROCKCHIP_DDRTYPE_LPDDR2:
>    142		case ROCKCHIP_DDRTYPE_LPDDR3:
>    143			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR23, DDRMON_CTRL_DDR_TYPE_MASK),
>    144				       dfi_regs + DDRMON_CTRL);
>    145			break;
>    146		case ROCKCHIP_DDRTYPE_LPDDR4:
>    147		case ROCKCHIP_DDRTYPE_LPDDR4X:
>    148			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR4, DDRMON_CTRL_DDR_TYPE_MASK),
>    149				       dfi_regs + DDRMON_CTRL);
>    150			break;
>    151		default:
>    152			break;
>    153		}
>    154	
>    155		/* enable count, use software mode */
>    156		writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_SOFTWARE_EN, DDRMON_CTRL_SOFTWARE_EN),
>    157			       dfi_regs + DDRMON_CTRL);
>    158	out:
>    159		mutex_unlock(&dfi->mutex);
>    160	
>    161		return ret;
>    162	}
>    163	
>    164	static void rockchip_dfi_disable(struct rockchip_dfi *dfi)
>    165	{
>    166		void __iomem *dfi_regs = dfi->regs;
>    167	
>    168		mutex_lock(&dfi->mutex);
>    169	
>    170		dfi->usecount--;
>    171	
>    172		WARN_ON_ONCE(dfi->usecount < 0);
>    173	
>    174		if (dfi->usecount > 0)
>    175			goto out;
>    176	
>    177		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_SOFTWARE_EN),
>    178			       dfi_regs + DDRMON_CTRL);
>    179		clk_disable_unprepare(dfi->clk);
>    180	out:
>    181		mutex_unlock(&dfi->mutex);
>    182	}
>    183	
>    184	static void rockchip_dfi_read_counters(struct rockchip_dfi *dfi, struct dmc_count *res)
>    185	{
>    186		u32 i;
>    187		void __iomem *dfi_regs = dfi->regs;
>    188	
>    189		for (i = 0; i < dfi->max_channels; i++) {
>    190			if (!(dfi->channel_mask & BIT(i)))
>    191				continue;
>    192			res->c[i].read_access = readl_relaxed(dfi_regs +
>    193					DDRMON_CH0_RD_NUM + i * 20);
>    194			res->c[i].write_access = readl_relaxed(dfi_regs +
>    195					DDRMON_CH0_WR_NUM + i * 20);
>    196			res->c[i].access = readl_relaxed(dfi_regs +
>    197					DDRMON_CH0_DFI_ACCESS_NUM + i * 20);
>    198			res->c[i].clock_cycles = readl_relaxed(dfi_regs +
>    199					DDRMON_CH0_COUNT_NUM + i * 20);
>    200		}
>    201	}
>    202	
>  > 203	static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>    204						   const struct dmc_count *now,
>    205						   struct dmc_count *res)
>    206	{
>    207		const struct dmc_count *last = &dfi->last_perf_count;
>    208		int i;
>    209	
>    210		for (i = 0; i < dfi->max_channels; i++) {
>    211			res->c[i].read_access = dfi->total_count.c[i].read_access +
>    212				(u32)(now->c[i].read_access - last->c[i].read_access);
>    213			res->c[i].write_access = dfi->total_count.c[i].write_access +
>    214				(u32)(now->c[i].write_access - last->c[i].write_access);
>    215			res->c[i].access = dfi->total_count.c[i].access +
>    216				(u32)(now->c[i].access - last->c[i].access);
>    217			res->c[i].clock_cycles = dfi->total_count.c[i].clock_cycles +
>    218				(u32)(now->c[i].clock_cycles - last->c[i].clock_cycles);
>    219		}
>    220	}
>    221	
> 

-- 
Best Regards,
Samsung Electronics
Chanwoo Choi


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

WARNING: multiple messages have this Message-ID (diff)
From: Chanwoo Choi <chanwoo@kernel.org>
To: kernel test robot <lkp@intel.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-rockchip@lists.infradead.org
Cc: oe-kbuild-all@lists.linux.dev,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Heiko Stuebner <heiko@sntech.de>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	kernel@pengutronix.de,
	Michael Riesch <michael.riesch@wolfvision.net>,
	Robin Murphy <robin.murphy@arm.com>,
	Vincent Legoll <vincent.legoll@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	devicetree@vger.kernel.org,
	Sebastian Reichel <sebastian.reichel@collabora.com>
Subject: Re: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
Date: Thu, 19 Oct 2023 00:11:14 +0900	[thread overview]
Message-ID: <f5ce51a4-d47d-4074-9498-8632b09791e6@kernel.org> (raw)
In-Reply-To: <202310181557.GIXGL21M-lkp@intel.com>

Hi Sascha, 

Could you plesae fix the following kernel build report?

On 23. 10. 18. 16:58, kernel test robot wrote:
> Hi Sascha,
> 
> kernel test robot noticed the following build warnings:
> 
> [auto build test WARNING on linus/master]
> [also build test WARNING on v6.6-rc6]
> [cannot apply to next-20231018]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Sascha-Hauer/PM-devfreq-rockchip-dfi-Make-pmu-regmap-mandatory/20231018-142228
> base:   linus/master
> patch link:    https://lore.kernel.org/r/20231018061714.3553817-17-s.hauer%40pengutronix.de
> patch subject: [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support
> config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/config)
> compiler: m68k-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231018/202310181557.GIXGL21M-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310181557.GIXGL21M-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>>> drivers/devfreq/event/rockchip-dfi.c:203:13: warning: 'rockchip_ddr_perf_counters_add' defined but not used [-Wunused-function]
>      203 | static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>          |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> --
>>> drivers/devfreq/event/rockchip-dfi.c:79: warning: Function parameter or member 'write_access' not described in 'dmc_count_channel'
> 
> 
> vim +/rockchip_ddr_perf_counters_add +203 drivers/devfreq/event/rockchip-dfi.c
> 
>     66	
>     67	/**
>     68	 * struct dmc_count_channel - structure to hold counter values from the DDR controller
>     69	 * @access:       Number of read and write accesses
>     70	 * @clock_cycles: DDR clock cycles
>     71	 * @read_access:  number of read accesses
>     72	 * @write_acccess: number of write accesses
>     73	 */
>     74	struct dmc_count_channel {
>     75		u64 access;
>     76		u64 clock_cycles;
>     77		u64 read_access;
>     78		u64 write_access;
>   > 79	};
>     80	
>     81	struct dmc_count {
>     82		struct dmc_count_channel c[DMC_MAX_CHANNELS];
>     83	};
>     84	
>     85	/*
>     86	 * The dfi controller can monitor DDR load. It has an upper and lower threshold
>     87	 * for the operating points. Whenever the usage leaves these bounds an event is
>     88	 * generated to indicate the DDR frequency should be changed.
>     89	 */
>     90	struct rockchip_dfi {
>     91		struct devfreq_event_dev *edev;
>     92		struct devfreq_event_desc desc;
>     93		struct dmc_count last_event_count;
>     94	
>     95		struct dmc_count last_perf_count;
>     96		struct dmc_count total_count;
>     97		seqlock_t count_seqlock; /* protects last_perf_count and total_count */
>     98	
>     99		struct device *dev;
>    100		void __iomem *regs;
>    101		struct regmap *regmap_pmu;
>    102		struct clk *clk;
>    103		int usecount;
>    104		struct mutex mutex;
>    105		u32 ddr_type;
>    106		unsigned int channel_mask;
>    107		unsigned int max_channels;
>    108		enum cpuhp_state cpuhp_state;
>    109		struct hlist_node node;
>    110		struct pmu pmu;
>    111		struct hrtimer timer;
>    112		unsigned int cpu;
>    113		int active_events;
>    114		int burst_len;
>    115		int buswidth[DMC_MAX_CHANNELS];
>    116	};
>    117	
>    118	static int rockchip_dfi_enable(struct rockchip_dfi *dfi)
>    119	{
>    120		void __iomem *dfi_regs = dfi->regs;
>    121		int ret = 0;
>    122	
>    123		mutex_lock(&dfi->mutex);
>    124	
>    125		dfi->usecount++;
>    126		if (dfi->usecount > 1)
>    127			goto out;
>    128	
>    129		ret = clk_prepare_enable(dfi->clk);
>    130		if (ret) {
>    131			dev_err(&dfi->edev->dev, "failed to enable dfi clk: %d\n", ret);
>    132			goto out;
>    133		}
>    134	
>    135		/* clear DDRMON_CTRL setting */
>    136		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_TIMER_CNT_EN | DDRMON_CTRL_SOFTWARE_EN |
>    137			       DDRMON_CTRL_HARDWARE_EN), dfi_regs + DDRMON_CTRL);
>    138	
>    139		/* set ddr type to dfi */
>    140		switch (dfi->ddr_type) {
>    141		case ROCKCHIP_DDRTYPE_LPDDR2:
>    142		case ROCKCHIP_DDRTYPE_LPDDR3:
>    143			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR23, DDRMON_CTRL_DDR_TYPE_MASK),
>    144				       dfi_regs + DDRMON_CTRL);
>    145			break;
>    146		case ROCKCHIP_DDRTYPE_LPDDR4:
>    147		case ROCKCHIP_DDRTYPE_LPDDR4X:
>    148			writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR4, DDRMON_CTRL_DDR_TYPE_MASK),
>    149				       dfi_regs + DDRMON_CTRL);
>    150			break;
>    151		default:
>    152			break;
>    153		}
>    154	
>    155		/* enable count, use software mode */
>    156		writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_SOFTWARE_EN, DDRMON_CTRL_SOFTWARE_EN),
>    157			       dfi_regs + DDRMON_CTRL);
>    158	out:
>    159		mutex_unlock(&dfi->mutex);
>    160	
>    161		return ret;
>    162	}
>    163	
>    164	static void rockchip_dfi_disable(struct rockchip_dfi *dfi)
>    165	{
>    166		void __iomem *dfi_regs = dfi->regs;
>    167	
>    168		mutex_lock(&dfi->mutex);
>    169	
>    170		dfi->usecount--;
>    171	
>    172		WARN_ON_ONCE(dfi->usecount < 0);
>    173	
>    174		if (dfi->usecount > 0)
>    175			goto out;
>    176	
>    177		writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_SOFTWARE_EN),
>    178			       dfi_regs + DDRMON_CTRL);
>    179		clk_disable_unprepare(dfi->clk);
>    180	out:
>    181		mutex_unlock(&dfi->mutex);
>    182	}
>    183	
>    184	static void rockchip_dfi_read_counters(struct rockchip_dfi *dfi, struct dmc_count *res)
>    185	{
>    186		u32 i;
>    187		void __iomem *dfi_regs = dfi->regs;
>    188	
>    189		for (i = 0; i < dfi->max_channels; i++) {
>    190			if (!(dfi->channel_mask & BIT(i)))
>    191				continue;
>    192			res->c[i].read_access = readl_relaxed(dfi_regs +
>    193					DDRMON_CH0_RD_NUM + i * 20);
>    194			res->c[i].write_access = readl_relaxed(dfi_regs +
>    195					DDRMON_CH0_WR_NUM + i * 20);
>    196			res->c[i].access = readl_relaxed(dfi_regs +
>    197					DDRMON_CH0_DFI_ACCESS_NUM + i * 20);
>    198			res->c[i].clock_cycles = readl_relaxed(dfi_regs +
>    199					DDRMON_CH0_COUNT_NUM + i * 20);
>    200		}
>    201	}
>    202	
>  > 203	static void rockchip_ddr_perf_counters_add(struct rockchip_dfi *dfi,
>    204						   const struct dmc_count *now,
>    205						   struct dmc_count *res)
>    206	{
>    207		const struct dmc_count *last = &dfi->last_perf_count;
>    208		int i;
>    209	
>    210		for (i = 0; i < dfi->max_channels; i++) {
>    211			res->c[i].read_access = dfi->total_count.c[i].read_access +
>    212				(u32)(now->c[i].read_access - last->c[i].read_access);
>    213			res->c[i].write_access = dfi->total_count.c[i].write_access +
>    214				(u32)(now->c[i].write_access - last->c[i].write_access);
>    215			res->c[i].access = dfi->total_count.c[i].access +
>    216				(u32)(now->c[i].access - last->c[i].access);
>    217			res->c[i].clock_cycles = dfi->total_count.c[i].clock_cycles +
>    218				(u32)(now->c[i].clock_cycles - last->c[i].clock_cycles);
>    219		}
>    220	}
>    221	
> 

-- 
Best Regards,
Samsung Electronics
Chanwoo Choi


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2023-10-18 15:11 UTC|newest]

Thread overview: 215+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-18  6:16 [PATCH v8 00/26] Add perf support to the rockchip-dfi driver Sascha Hauer
2023-10-18  6:16 ` Sascha Hauer
2023-10-18  6:16 ` Sascha Hauer
2023-10-18  6:16 ` [PATCH v8 01/26] PM / devfreq: rockchip-dfi: Make pmu regmap mandatory Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 14:51   ` Chanwoo Choi
2023-10-18 14:51     ` Chanwoo Choi
2023-10-18 14:51     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 02/26] PM / devfreq: rockchip-dfi: Embed desc into private data struct Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 14:51   ` Chanwoo Choi
2023-10-18 14:51     ` Chanwoo Choi
2023-10-18 14:51     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 03/26] PM / devfreq: rockchip-dfi: use consistent name for " Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 14:58   ` Chanwoo Choi
2023-10-18 14:58     ` Chanwoo Choi
2023-10-18 14:58     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 04/26] PM / devfreq: rockchip-dfi: Add SoC specific init function Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 14:58   ` Chanwoo Choi
2023-10-18 14:58     ` Chanwoo Choi
2023-10-18 14:58     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 05/26] PM / devfreq: rockchip-dfi: dfi store raw values in counter struct Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 15:05   ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 06/26] PM / devfreq: rockchip-dfi: Use free running counter Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-19 11:34   ` 최찬우/Tizen Platform Lab(SR)/삼성전자
2023-10-19 11:34     ` 최찬우/Tizen Platform Lab(SR)/삼성전자
2023-10-19 11:34     ` 최찬우/Tizen Platform Lab(SR)/삼성전자
2023-10-18  6:16 ` [PATCH v8 07/26] PM / devfreq: rockchip-dfi: introduce channel mask Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 15:05   ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-19 11:37     ` Chanwoo Choi
2023-10-19 11:37       ` Chanwoo Choi
2023-10-19 11:37       ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 08/26] PM / devfreq: rk3399_dmc,dfi: generalize DDRTYPE defines Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  7:08   ` [PATCH v8 08/26] PM / devfreq: rk3399_dmc, dfi: " Sascha Hauer
2023-10-18  7:08     ` Sascha Hauer
2023-10-18  7:08     ` Sascha Hauer
2023-10-18 20:01   ` [PATCH v8 08/26] PM / devfreq: rk3399_dmc,dfi: " Heiko Stübner
2023-10-18 20:01     ` Heiko Stübner
2023-10-18 20:01     ` Heiko Stübner
2023-10-19 11:43   ` Chanwoo Choi
2023-10-19 11:43     ` Chanwoo Choi
2023-10-19 11:43     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 09/26] PM / devfreq: rockchip-dfi: Clean up DDR type register defines Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-19 11:44   ` Chanwoo Choi
2023-10-19 11:44     ` Chanwoo Choi
2023-10-19 11:44     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 10/26] PM / devfreq: rockchip-dfi: Add RK3568 support Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 15:05   ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-18 15:05     ` Chanwoo Choi
2023-10-18 20:02   ` Heiko Stübner
2023-10-18 20:02     ` Heiko Stübner
2023-10-18 20:02     ` Heiko Stübner
2023-10-19 11:46   ` Chanwoo Choi
2023-10-19 11:46     ` Chanwoo Choi
2023-10-19 11:46     ` Chanwoo Choi
2023-10-18  6:16 ` [PATCH v8 11/26] PM / devfreq: rockchip-dfi: Handle LPDDR2 correctly Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18  6:16   ` Sascha Hauer
2023-10-18 15:06   ` Chanwoo Choi
2023-10-18 15:06     ` Chanwoo Choi
2023-10-18 15:06     ` Chanwoo Choi
2023-10-19 11:51   ` Chanwoo Choi
2023-10-19 11:51     ` Chanwoo Choi
2023-10-19 11:51     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 12/26] PM / devfreq: rockchip-dfi: Handle LPDDR4X Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18 20:02   ` Heiko Stübner
2023-10-18 20:02     ` Heiko Stübner
2023-10-18 20:02     ` Heiko Stübner
2023-10-19 11:52   ` Chanwoo Choi
2023-10-19 11:52     ` Chanwoo Choi
2023-10-19 11:52     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 13/26] PM / devfreq: rockchip-dfi: Pass private data struct to internal functions Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 11:55   ` Chanwoo Choi
2023-10-19 11:55     ` Chanwoo Choi
2023-10-19 11:55     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 14/26] PM / devfreq: rockchip-dfi: Prepare for multiple users Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 11:58   ` Chanwoo Choi
2023-10-19 11:58     ` Chanwoo Choi
2023-10-19 11:58     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 15/26] PM / devfreq: rockchip-dfi: give variable a better name Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 11:59   ` Chanwoo Choi
2023-10-19 11:59     ` Chanwoo Choi
2023-10-19 11:59     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 16/26] PM / devfreq: rockchip-dfi: Add perf support Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  7:58   ` kernel test robot
2023-10-18  7:58     ` kernel test robot
2023-10-18  7:58     ` kernel test robot
2023-10-18 15:11     ` Chanwoo Choi [this message]
2023-10-18 15:11       ` Chanwoo Choi
2023-10-18 15:11       ` Chanwoo Choi
2023-10-19  6:52       ` Sascha Hauer
2023-10-19  6:52         ` Sascha Hauer
2023-10-19  6:52         ` Sascha Hauer
2023-10-18 20:03   ` Heiko Stübner
2023-10-18 20:03     ` Heiko Stübner
2023-10-18 20:03     ` Heiko Stübner
2023-10-19  6:48   ` [PATCH] " Sascha Hauer
2023-10-19  6:48     ` Sascha Hauer
2023-10-19  6:48     ` Sascha Hauer
2023-10-19  9:00     ` kernel test robot
2023-10-19  9:00       ` kernel test robot
2023-10-19 12:16     ` Chanwoo Choi
2023-10-19 12:16       ` Chanwoo Choi
2023-10-19 12:16       ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 17/26] PM / devfreq: rockchip-dfi: make register stride SoC specific Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18 15:11   ` Chanwoo Choi
2023-10-18 15:11     ` Chanwoo Choi
2023-10-18 15:11     ` Chanwoo Choi
2023-10-19 12:17     ` Chanwoo Choi
2023-10-19 12:17       ` Chanwoo Choi
2023-10-19 12:17       ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 18/26] PM / devfreq: rockchip-dfi: account for multiple DDRMON_CTRL registers Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18 15:11   ` Chanwoo Choi
2023-10-18 15:11     ` Chanwoo Choi
2023-10-18 15:11     ` Chanwoo Choi
2023-10-19 12:18     ` Chanwoo Choi
2023-10-19 12:18       ` Chanwoo Choi
2023-10-19 12:18       ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 19/26] PM / devfreq: rockchip-dfi: add support for RK3588 Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18 15:12   ` Chanwoo Choi
2023-10-18 15:12     ` Chanwoo Choi
2023-10-18 15:12     ` Chanwoo Choi
2023-10-19 12:21     ` Chanwoo Choi
2023-10-19 12:21       ` Chanwoo Choi
2023-10-19 12:21       ` Chanwoo Choi
2023-10-19 12:34     ` Chanwoo Choi
2023-10-19 12:34       ` Chanwoo Choi
2023-10-19 12:34       ` Chanwoo Choi
2023-10-18 20:03   ` Heiko Stübner
2023-10-18 20:03     ` Heiko Stübner
2023-10-18 20:03     ` Heiko Stübner
2023-10-18  6:17 ` [PATCH v8 20/26] dt-bindings: devfreq: event: convert Rockchip DFI binding to yaml Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 12:24   ` Chanwoo Choi
2023-10-19 12:24     ` Chanwoo Choi
2023-10-19 12:24     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 21/26] dt-bindings: devfreq: event: rockchip,dfi: Add rk3568 support Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 12:27   ` Chanwoo Choi
2023-10-19 12:27     ` Chanwoo Choi
2023-10-19 12:27     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 22/26] dt-bindings: devfreq: event: rockchip,dfi: Add rk3588 support Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-19 12:27   ` Chanwoo Choi
2023-10-19 12:27     ` Chanwoo Choi
2023-10-19 12:27     ` Chanwoo Choi
2023-10-18  6:17 ` [PATCH v8 23/26] dt-bindings: soc: rockchip: grf: add rockchip,rk3588-pmugrf Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17 ` [PATCH v8 24/26] arm64: dts: rockchip: rk3399: Enable DFI Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17 ` [PATCH v8 25/26] arm64: dts: rockchip: rk356x: Add DFI Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17 ` [PATCH v8 26/26] arm64: dts: rockchip: rk3588s: " Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-10-18  6:17   ` Sascha Hauer
2023-11-23  9:38   ` Jagan Teki
2023-11-23  9:38     ` Jagan Teki
2023-11-23  9:38     ` Jagan Teki
2023-10-18 15:21 ` [PATCH v8 00/26] Add perf support to the rockchip-dfi driver Chanwoo Choi
2023-10-18 15:21   ` Chanwoo Choi
2023-10-18 15:21   ` Chanwoo Choi
2023-10-18 20:06   ` Heiko Stübner
2023-10-18 20:06     ` Heiko Stübner
2023-10-18 20:06     ` Heiko Stübner
2023-10-19  8:54 ` (subset) " Heiko Stuebner
2023-10-19  8:54   ` Heiko Stuebner
2023-10-19  8:54   ` Heiko Stuebner
2023-10-19 14:05 ` Heiko Stuebner
2023-10-19 14:05   ` Heiko Stuebner
2023-10-19 14:05   ` Heiko Stuebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f5ce51a4-d47d-4074-9498-8632b09791e6@kernel.org \
    --to=chanwoo@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=heiko@sntech.de \
    --cc=kernel@pengutronix.de \
    --cc=krzk@kernel.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=lkp@intel.com \
    --cc=mark.rutland@arm.com \
    --cc=michael.riesch@wolfvision.net \
    --cc=myungjoo.ham@samsung.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=robh+dt@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=s.hauer@pengutronix.de \
    --cc=sebastian.reichel@collabora.com \
    --cc=vincent.legoll@gmail.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.