[v2,3/6] pwm: lpss: Include headers we are direct user of

Message ID 20221108142226.63161-4-andriy.shevchenko@linux.intel.com
State New
Headers
Series pinctrl: intel: Enable PWM optional feature |

Commit Message

Andy Shevchenko Nov. 8, 2022, 2:22 p.m. UTC
  For the sake of integrity, include headers we are direct user of.

While at it, move the struct pwm_lpss_chip to be after
the struct pwm_lpss_boardinfo as the former uses pointer
to the latter.

Replace device.h with a forward declaration in order to improve
the compilation time due to reducing overhead of device.h parsing
with entire train of dependencies.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/pwm/pwm-lpss.h | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)
  

Comments

Uwe Kleine-König Nov. 10, 2022, 7:21 a.m. UTC | #1
Hello,

On Tue, Nov 08, 2022 at 04:22:23PM +0200, Andy Shevchenko wrote:
> For the sake of integrity, include headers we are direct user of.
> 
> While at it, move the struct pwm_lpss_chip to be after
> the struct pwm_lpss_boardinfo as the former uses pointer
> to the latter.

That part is fine.

> Replace device.h with a forward declaration in order to improve
> the compilation time due to reducing overhead of device.h parsing
> with entire train of dependencies.

Together with "For the sake of integrity, include headers we are direct
user of." this makes an a bit schizophrenic impression on me. You add
<linux/types.h> because the file is a direct user of it, but you drop
<linux/device.h> despite being a direct user.

If you adapt the reasoning to something like:

Replace the inclusion of <linux/device.h> by a forward declaration of
struct device plus a (cheaper) #include of <linux/types.h> as
<linux/device.h> is an expensive include (measured in compiler effort).

I could better live with it. I would even split this into two patches
then. (i.e. move struct pwm_lpss_chip vs the include and forward change)

Best regards
Uwe
  
Andy Shevchenko Nov. 10, 2022, 9:53 a.m. UTC | #2
On Thu, Nov 10, 2022 at 9:22 AM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
> On Tue, Nov 08, 2022 at 04:22:23PM +0200, Andy Shevchenko wrote:
> > For the sake of integrity, include headers we are direct user of.
> >
> > While at it, move the struct pwm_lpss_chip to be after
> > the struct pwm_lpss_boardinfo as the former uses pointer
> > to the latter.
>
> That part is fine.
>
> > Replace device.h with a forward declaration in order to improve
> > the compilation time due to reducing overhead of device.h parsing
> > with entire train of dependencies.
>
> Together with "For the sake of integrity, include headers we are direct
> user of." this makes an a bit schizophrenic impression on me. You add
> <linux/types.h> because the file is a direct user of it, but you drop
> <linux/device.h> despite being a direct user.

But we don't use device.h.

> If you adapt the reasoning to something like:
>
> Replace the inclusion of <linux/device.h> by a forward declaration of
> struct device plus a (cheaper) #include of <linux/types.h> as
> <linux/device.h> is an expensive include (measured in compiler effort).

Fine with me, thanks for the draft.

> I could better live with it. I would even split this into two patches
> then. (i.e. move struct pwm_lpss_chip vs the include and forward change)

I think for this small change for a driver that hasn't been modified
often it's fine to have them in one. But tell me if you are insisting
on a split, I can do that.
  
Uwe Kleine-König Nov. 10, 2022, 10:20 a.m. UTC | #3
On Thu, Nov 10, 2022 at 11:53:59AM +0200, Andy Shevchenko wrote:
> On Thu, Nov 10, 2022 at 9:22 AM Uwe Kleine-König
> <u.kleine-koenig@pengutronix.de> wrote:
> > On Tue, Nov 08, 2022 at 04:22:23PM +0200, Andy Shevchenko wrote:
> > > For the sake of integrity, include headers we are direct user of.
> > >
> > > While at it, move the struct pwm_lpss_chip to be after
> > > the struct pwm_lpss_boardinfo as the former uses pointer
> > > to the latter.
> >
> > That part is fine.
> >
> > > Replace device.h with a forward declaration in order to improve
> > > the compilation time due to reducing overhead of device.h parsing
> > > with entire train of dependencies.
> >
> > Together with "For the sake of integrity, include headers we are direct
> > user of." this makes an a bit schizophrenic impression on me. You add
> > <linux/types.h> because the file is a direct user of it, but you drop
> > <linux/device.h> despite being a direct user.
> 
> But we don't use device.h.

What is the canonical header to provide struct device?

> > If you adapt the reasoning to something like:
> >
> > Replace the inclusion of <linux/device.h> by a forward declaration of
> > struct device plus a (cheaper) #include of <linux/types.h> as
> > <linux/device.h> is an expensive include (measured in compiler effort).
> 
> Fine with me, thanks for the draft.
> 
> > I could better live with it. I would even split this into two patches
> > then. (i.e. move struct pwm_lpss_chip vs the include and forward change)
> 
> I think for this small change for a driver that hasn't been modified
> often it's fine to have them in one. But tell me if you are insisting
> on a split, I can do that.

I don't insist.

Best regards
Uwe
  
Andy Shevchenko Nov. 10, 2022, 10:24 a.m. UTC | #4
On Thu, Nov 10, 2022 at 12:20 PM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
> On Thu, Nov 10, 2022 at 11:53:59AM +0200, Andy Shevchenko wrote:
> > On Thu, Nov 10, 2022 at 9:22 AM Uwe Kleine-König
> > <u.kleine-koenig@pengutronix.de> wrote:
> > > On Tue, Nov 08, 2022 at 04:22:23PM +0200, Andy Shevchenko wrote:

...

> > > > Replace device.h with a forward declaration in order to improve
> > > > the compilation time due to reducing overhead of device.h parsing
> > > > with entire train of dependencies.
> > >
> > > Together with "For the sake of integrity, include headers we are direct
> > > user of." this makes an a bit schizophrenic impression on me. You add
> > > <linux/types.h> because the file is a direct user of it, but you drop
> > > <linux/device.h> despite being a direct user.
> >
> > But we don't use device.h.
>
> What is the canonical header to provide struct device?

But we don't use the struct device here. We use _pointer_ to a struct device.
  

Patch

diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
index 2c746c51b883..4561d229b27d 100644
--- a/drivers/pwm/pwm-lpss.h
+++ b/drivers/pwm/pwm-lpss.h
@@ -10,16 +10,12 @@ 
 #ifndef __PWM_LPSS_H
 #define __PWM_LPSS_H
 
-#include <linux/device.h>
 #include <linux/pwm.h>
+#include <linux/types.h>
 
-#define LPSS_MAX_PWMS			4
+struct device;
 
-struct pwm_lpss_chip {
-	struct pwm_chip chip;
-	void __iomem *regs;
-	const struct pwm_lpss_boardinfo *info;
-};
+#define LPSS_MAX_PWMS			4
 
 struct pwm_lpss_boardinfo {
 	unsigned long clk_rate;
@@ -43,6 +39,12 @@  extern const struct pwm_lpss_boardinfo pwm_lpss_bsw_info;
 extern const struct pwm_lpss_boardinfo pwm_lpss_bxt_info;
 extern const struct pwm_lpss_boardinfo pwm_lpss_tng_info;
 
+struct pwm_lpss_chip {
+	struct pwm_chip chip;
+	void __iomem *regs;
+	const struct pwm_lpss_boardinfo *info;
+};
+
 struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, void __iomem *base,
 				     const struct pwm_lpss_boardinfo *info);