diff mbox series

memaccess: reduce include dependencies

Message ID a404fafe-0057-0ea7-93c3-754f96da8743@suse.com (mailing list archive)
State Superseded
Headers show
Series memaccess: reduce include dependencies | expand

Commit Message

Jan Beulich March 9, 2020, 11:49 a.m. UTC
The common header doesn't itself need to include public/vm_event.h nor
public/memory.h. Drop their inclusion. This requires using the non-
typedef names in two prototypes and an inline function; by not changing
the callers and function definitions at the same time it'll remain
certain that the build would fail if the typedef itself was changed.

Signed-off-by: Jan Beulich <jbeulich@suse.com>

Comments

Tamas K Lengyel March 9, 2020, 3:07 p.m. UTC | #1
On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> The common header doesn't itself need to include public/vm_event.h nor
> public/memory.h. Drop their inclusion. This requires using the non-
> typedef names in two prototypes and an inline function; by not changing
> the callers and function definitions at the same time it'll remain
> certain that the build would fail if the typedef itself was changed.

Just curious, what's the benefit of doing this?

Tamas
Jan Beulich March 9, 2020, 3:10 p.m. UTC | #2
On 09.03.2020 16:07, Tamas K Lengyel wrote:
> On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
>>
>> The common header doesn't itself need to include public/vm_event.h nor
>> public/memory.h. Drop their inclusion. This requires using the non-
>> typedef names in two prototypes and an inline function; by not changing
>> the callers and function definitions at the same time it'll remain
>> certain that the build would fail if the typedef itself was changed.
> 
> Just curious, what's the benefit of doing this?

Less dependencies that (almost) every CU gets, and hence statistically
less rebuilds of (almost) everything when only a rather special purpose
header file changes.

Jan
Andrew Cooper March 9, 2020, 3:16 p.m. UTC | #3
On 09/03/2020 15:10, Jan Beulich wrote:
> On 09.03.2020 16:07, Tamas K Lengyel wrote:
>> On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
>>> The common header doesn't itself need to include public/vm_event.h nor
>>> public/memory.h. Drop their inclusion. This requires using the non-
>>> typedef names in two prototypes and an inline function; by not changing
>>> the callers and function definitions at the same time it'll remain
>>> certain that the build would fail if the typedef itself was changed.
>> Just curious, what's the benefit of doing this?
> Less dependencies that (almost) every CU gets, and hence statistically
> less rebuilds of (almost) everything when only a rather special purpose
> header file changes.

Also fractionally faster compile times generally (reduced parsing of
unrelated header files), and overall, a reduction in the complexity of
the tangled mess that is our header files.

~Andrew
Tamas K Lengyel March 9, 2020, 3:51 p.m. UTC | #4
On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> The common header doesn't itself need to include public/vm_event.h nor
> public/memory.h. Drop their inclusion. This requires using the non-
> typedef names in two prototypes and an inline function; by not changing
> the callers and function definitions at the same time it'll remain
> certain that the build would fail if the typedef itself was changed.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> --- a/xen/include/asm-arm/mem_access.h
> +++ b/xen/include/asm-arm/mem_access.h
> @@ -17,9 +17,11 @@
>  #ifndef _ASM_ARM_MEM_ACCESS_H
>  #define _ASM_ARM_MEM_ACCESS_H
>
> +struct vm_event_st;
> +
>  static inline
>  bool p2m_mem_access_emulate_check(struct vcpu *v,
> -                                  const vm_event_response_t *rsp)
> +                                  const struct vm_event_st *rsp)
>  {
>      /* Not supported on ARM. */
>      return false;
> --- a/xen/include/asm-x86/mem_access.h
> +++ b/xen/include/asm-x86/mem_access.h
> @@ -26,6 +26,8 @@
>  #ifndef __ASM_X86_MEM_ACCESS_H__
>  #define __ASM_X86_MEM_ACCESS_H__
>
> +struct vm_event_st;

Wouldn't it make more sense to define this in xen/mem_access.h instead
of having to do it in both asm versions? Nothing directly includes
asm/mem_access.h, all users include xen/mem_access.h

Tamas
Jan Beulich March 9, 2020, 4:03 p.m. UTC | #5
On 09.03.2020 16:51, Tamas K Lengyel wrote:
> On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
>> --- a/xen/include/asm-arm/mem_access.h
>> +++ b/xen/include/asm-arm/mem_access.h
>> @@ -17,9 +17,11 @@
>>  #ifndef _ASM_ARM_MEM_ACCESS_H
>>  #define _ASM_ARM_MEM_ACCESS_H
>>
>> +struct vm_event_st;
>> +
>>  static inline
>>  bool p2m_mem_access_emulate_check(struct vcpu *v,
>> -                                  const vm_event_response_t *rsp)
>> +                                  const struct vm_event_st *rsp)
>>  {
>>      /* Not supported on ARM. */
>>      return false;
>> --- a/xen/include/asm-x86/mem_access.h
>> +++ b/xen/include/asm-x86/mem_access.h
>> @@ -26,6 +26,8 @@
>>  #ifndef __ASM_X86_MEM_ACCESS_H__
>>  #define __ASM_X86_MEM_ACCESS_H__
>>
>> +struct vm_event_st;
> 
> Wouldn't it make more sense to define this in xen/mem_access.h instead
> of having to do it in both asm versions? Nothing directly includes
> asm/mem_access.h, all users include xen/mem_access.h

If that's what you prefer - I can certainly do so. It'll look a
little odd then, as the forward declaration has to come ahead of

#include <asm/mem_access.h>

Just let me know if you really prefer it that way.

Jan
Tamas K Lengyel March 9, 2020, 4:21 p.m. UTC | #6
On Mon, Mar 9, 2020 at 10:03 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> On 09.03.2020 16:51, Tamas K Lengyel wrote:
> > On Mon, Mar 9, 2020 at 5:49 AM Jan Beulich <jbeulich@suse.com> wrote:
> >> --- a/xen/include/asm-arm/mem_access.h
> >> +++ b/xen/include/asm-arm/mem_access.h
> >> @@ -17,9 +17,11 @@
> >>  #ifndef _ASM_ARM_MEM_ACCESS_H
> >>  #define _ASM_ARM_MEM_ACCESS_H
> >>
> >> +struct vm_event_st;
> >> +
> >>  static inline
> >>  bool p2m_mem_access_emulate_check(struct vcpu *v,
> >> -                                  const vm_event_response_t *rsp)
> >> +                                  const struct vm_event_st *rsp)
> >>  {
> >>      /* Not supported on ARM. */
> >>      return false;
> >> --- a/xen/include/asm-x86/mem_access.h
> >> +++ b/xen/include/asm-x86/mem_access.h
> >> @@ -26,6 +26,8 @@
> >>  #ifndef __ASM_X86_MEM_ACCESS_H__
> >>  #define __ASM_X86_MEM_ACCESS_H__
> >>
> >> +struct vm_event_st;
> >
> > Wouldn't it make more sense to define this in xen/mem_access.h instead
> > of having to do it in both asm versions? Nothing directly includes
> > asm/mem_access.h, all users include xen/mem_access.h
>
> If that's what you prefer - I can certainly do so. It'll look a
> little odd then, as the forward declaration has to come ahead of
>
> #include <asm/mem_access.h>
>
> Just let me know if you really prefer it that way.

Well, I find it ugly either way. I would prefer if it's forward
declared just at one spot, with a comment explaining why it's
needed/done that way.

Thanks,
Tamas
diff mbox series

Patch

--- a/xen/include/asm-arm/mem_access.h
+++ b/xen/include/asm-arm/mem_access.h
@@ -17,9 +17,11 @@ 
 #ifndef _ASM_ARM_MEM_ACCESS_H
 #define _ASM_ARM_MEM_ACCESS_H
 
+struct vm_event_st;
+
 static inline
 bool p2m_mem_access_emulate_check(struct vcpu *v,
-                                  const vm_event_response_t *rsp)
+                                  const struct vm_event_st *rsp)
 {
     /* Not supported on ARM. */
     return false;
--- a/xen/include/asm-x86/mem_access.h
+++ b/xen/include/asm-x86/mem_access.h
@@ -26,6 +26,8 @@ 
 #ifndef __ASM_X86_MEM_ACCESS_H__
 #define __ASM_X86_MEM_ACCESS_H__
 
+struct vm_event_st;
+
 /*
  * Setup vm_event request based on the access (gla is -1ull if not available).
  * Handles the rw2rx conversion. Boolean return value indicates if event type
@@ -36,12 +38,12 @@ 
  */
 bool p2m_mem_access_check(paddr_t gpa, unsigned long gla,
                           struct npfec npfec,
-                          vm_event_request_t **req_ptr);
+                          struct vm_event_st **req_ptr);
 
 /* Check for emulation and mark vcpu for skipping one instruction
  * upon rescheduling if required. */
 bool p2m_mem_access_emulate_check(struct vcpu *v,
-                                  const vm_event_response_t *rsp);
+                                  const struct vm_event_st *rsp);
 
 /* Sanity check for mem_access hardware support */
 bool p2m_mem_access_sanity_check(const struct domain *d);
--- a/xen/include/xen/mem_access.h
+++ b/xen/include/xen/mem_access.h
@@ -24,8 +24,6 @@ 
 
 #include <xen/types.h>
 #include <xen/mm.h>
-#include <public/memory.h>
-#include <public/vm_event.h>
 #include <asm/mem_access.h>
 
 /*