diff mbox series

[v3,2/4] xen: change <asm/bug.h> to <xen/bug.h>

Message ID 19404db4a577e17dffef85a101449a507965be19.1677233393.git.oleksii.kurochko@gmail.com (mailing list archive)
State Superseded
Headers show
Series introduce generic implementation of macros from bug.h | expand

Commit Message

Oleksii K. Feb. 24, 2023, 11:31 a.m. UTC
Since the generic version of bug.h stuff was introduced use <xen/bug.h>
instead of unnecessary <asm/bug.h>

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
---
Changes in V3:
 * Update patch 2 not to break compilation: move some parts from patches 3 and 4
   to patch 2:
   * move some generic parts from <asm/bug.h> to <xen/bug.h>
   * add define BUG_FRAME_STRUCT in ARM's <asm/bug.h>
---
Changes in V2:
 * Put [PATCH v1 4/4] xen: change <asm/bug.h> to <xen/bug.h> as second patch,
   update the patch to change all <asm/bug.h> to <xen/bug.h> among the whole project
   to not break build.
 * Update the commit message.
---
 xen/arch/arm/include/asm/bug.h       | 19 +++----------------
 xen/arch/arm/include/asm/div64.h     |  2 +-
 xen/arch/arm/vgic/vgic-v2.c          |  2 +-
 xen/arch/arm/vgic/vgic.c             |  2 +-
 xen/arch/x86/acpi/cpufreq/cpufreq.c  |  2 +-
 xen/arch/x86/include/asm/asm_defns.h |  2 +-
 xen/arch/x86/include/asm/bug.h       | 19 ++-----------------
 xen/drivers/cpufreq/cpufreq.c        |  2 +-
 xen/include/xen/lib.h                |  2 +-
 9 files changed, 12 insertions(+), 40 deletions(-)

Comments

Julien Grall Feb. 25, 2023, 4:47 p.m. UTC | #1
Hi Oleksii,

On 24/02/2023 11:31, Oleksii Kurochko wrote:
> Since the generic version of bug.h stuff was introduced use <xen/bug.h>
> instead of unnecessary <asm/bug.h>
> 
> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> ---
> Changes in V3:
>   * Update patch 2 not to break compilation: move some parts from patches 3 and 4
>     to patch 2:
>     * move some generic parts from <asm/bug.h> to <xen/bug.h>
>     * add define BUG_FRAME_STRUCT in ARM's <asm/bug.h>
> ---
> Changes in V2:
>   * Put [PATCH v1 4/4] xen: change <asm/bug.h> to <xen/bug.h> as second patch,
>     update the patch to change all <asm/bug.h> to <xen/bug.h> among the whole project
>     to not break build.
>   * Update the commit message.
> ---
>   xen/arch/arm/include/asm/bug.h       | 19 +++----------------
>   xen/arch/arm/include/asm/div64.h     |  2 +-
>   xen/arch/arm/vgic/vgic-v2.c          |  2 +-
>   xen/arch/arm/vgic/vgic.c             |  2 +-
>   xen/arch/x86/acpi/cpufreq/cpufreq.c  |  2 +-
>   xen/arch/x86/include/asm/asm_defns.h |  2 +-
>   xen/arch/x86/include/asm/bug.h       | 19 ++-----------------
>   xen/drivers/cpufreq/cpufreq.c        |  2 +-
>   xen/include/xen/lib.h                |  2 +-
>   9 files changed, 12 insertions(+), 40 deletions(-)
> 
> diff --git a/xen/arch/arm/include/asm/bug.h b/xen/arch/arm/include/asm/bug.h
> index f4088d0913..cacaf014ab 100644
> --- a/xen/arch/arm/include/asm/bug.h
> +++ b/xen/arch/arm/include/asm/bug.h
> @@ -1,6 +1,8 @@
>   #ifndef __ARM_BUG_H__
>   #define __ARM_BUG_H__
>   
> +#include <xen/types.h>

You are not adding new code in bug.h, so can you explain why this is now 
necessary?

> +
>   #if defined(CONFIG_ARM_32)
>   # include <asm/arm32/bug.h>
>   #elif defined(CONFIG_ARM_64)
> @@ -9,9 +11,7 @@
>   # error "unknown ARM variant"
>   #endif
>   
> -#define BUG_DISP_WIDTH    24
> -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)

Even if the values are the same as the one you defined in the common 
bug.h, it doesn't feel right to remove them as long as...

> +#define BUG_FRAME_STRUCT

the arch is defining BUG_FRAME_STRUCT. So I would say the generic one 
should be defined within BUG_FRAME_STRUCT.

Cheers,
Jan Beulich Feb. 27, 2023, 2:29 p.m. UTC | #2
On 24.02.2023 12:31, Oleksii Kurochko wrote:
> Since the generic version of bug.h stuff was introduced use <xen/bug.h>
> instead of unnecessary <asm/bug.h>

You keep saying "unnecessary" here, but that's not really correct.
Including asm/bug.h alone simply becomes meaningless. So how about
"... instead of now useless (in isolation) <asm/bug.h>"?

> --- a/xen/arch/x86/include/asm/bug.h
> +++ b/xen/arch/x86/include/asm/bug.h
> @@ -1,19 +1,10 @@
>  #ifndef __X86_BUG_H__
>  #define __X86_BUG_H__
>  
> -#define BUG_DISP_WIDTH    24
> -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
> -
> -#define BUGFRAME_run_fn 0
> -#define BUGFRAME_warn   1
> -#define BUGFRAME_bug    2
> -#define BUGFRAME_assert 3
> -
> -#define BUGFRAME_NR     4
> -
>  #ifndef __ASSEMBLY__
>  
> +#define BUG_FRAME_STRUCT
> +
>  struct bug_frame {
>      signed int loc_disp:BUG_DISP_WIDTH;
>      unsigned int line_hi:BUG_LINE_HI_WIDTH;

Why would x86 continue to define its own bug_frame (and other items)?

Jan
Oleksii K. Feb. 28, 2023, 12:38 p.m. UTC | #3
Hi Julien,

On Sat, 2023-02-25 at 16:47 +0000, Julien Grall wrote:
> Hi Oleksii,
> 
> On 24/02/2023 11:31, Oleksii Kurochko wrote:
> > Since the generic version of bug.h stuff was introduced use
> > <xen/bug.h>
> > instead of unnecessary <asm/bug.h>
> > 
> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > ---
> > Changes in V3:
> >   * Update patch 2 not to break compilation: move some parts from
> > patches 3 and 4
> >     to patch 2:
> >     * move some generic parts from <asm/bug.h> to <xen/bug.h>
> >     * add define BUG_FRAME_STRUCT in ARM's <asm/bug.h>
> > ---
> > Changes in V2:
> >   * Put [PATCH v1 4/4] xen: change <asm/bug.h> to <xen/bug.h> as
> > second patch,
> >     update the patch to change all <asm/bug.h> to <xen/bug.h> among
> > the whole project
> >     to not break build.
> >   * Update the commit message.
> > ---
> >   xen/arch/arm/include/asm/bug.h       | 19 +++----------------
> >   xen/arch/arm/include/asm/div64.h     |  2 +-
> >   xen/arch/arm/vgic/vgic-v2.c          |  2 +-
> >   xen/arch/arm/vgic/vgic.c             |  2 +-
> >   xen/arch/x86/acpi/cpufreq/cpufreq.c  |  2 +-
> >   xen/arch/x86/include/asm/asm_defns.h |  2 +-
> >   xen/arch/x86/include/asm/bug.h       | 19 ++-----------------
> >   xen/drivers/cpufreq/cpufreq.c        |  2 +-
> >   xen/include/xen/lib.h                |  2 +-
> >   9 files changed, 12 insertions(+), 40 deletions(-)
> > 
> > diff --git a/xen/arch/arm/include/asm/bug.h
> > b/xen/arch/arm/include/asm/bug.h
> > index f4088d0913..cacaf014ab 100644
> > --- a/xen/arch/arm/include/asm/bug.h
> > +++ b/xen/arch/arm/include/asm/bug.h
> > @@ -1,6 +1,8 @@
> >   #ifndef __ARM_BUG_H__
> >   #define __ARM_BUG_H__
> >   
> > +#include <xen/types.h>
> 
> You are not adding new code in bug.h, so can you explain why this is
> now 
> necessary?
> 
> > +
> >   #if defined(CONFIG_ARM_32)
> >   # include <asm/arm32/bug.h>
> >   #elif defined(CONFIG_ARM_64)
> > @@ -9,9 +11,7 @@
> >   # error "unknown ARM variant"
> >   #endif
> >   
> > -#define BUG_DISP_WIDTH    24
> > -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> > -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
> 
> Even if the values are the same as the one you defined in the common 
> bug.h, it doesn't feel right to remove them as long as...
> 
> > +#define BUG_FRAME_STRUCT
> 
> the arch is defining BUG_FRAME_STRUCT. So I would say the generic one
> should be defined within BUG_FRAME_STRUCT.
> 
One of the reason BUG_DISP_WIDTH, BUG_LINE_* were removed is that they
don't use in ARM at all...

But generally I agree that it should be part of "#ifndef
BUG_FRAME_STRUCT" as it is 'struct bug_frame is dependent on it and
these defines look 'struct bug_frame' specific.

I'll update that in new version of the patch.
> Cheers,
> 
~ Oleksii
Oleksii K. Feb. 28, 2023, 1:07 p.m. UTC | #4
On Sat, 2023-02-25 at 16:47 +0000, Julien Grall wrote:
> Hi Oleksii,
> 
> On 24/02/2023 11:31, Oleksii Kurochko wrote:
> > Since the generic version of bug.h stuff was introduced use
> > <xen/bug.h>
> > instead of unnecessary <asm/bug.h>
> > 
> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
> > ---
> > Changes in V3:
> >   * Update patch 2 not to break compilation: move some parts from
> > patches 3 and 4
> >     to patch 2:
> >     * move some generic parts from <asm/bug.h> to <xen/bug.h>
> >     * add define BUG_FRAME_STRUCT in ARM's <asm/bug.h>
> > ---
> > Changes in V2:
> >   * Put [PATCH v1 4/4] xen: change <asm/bug.h> to <xen/bug.h> as
> > second patch,
> >     update the patch to change all <asm/bug.h> to <xen/bug.h> among
> > the whole project
> >     to not break build.
> >   * Update the commit message.
> > ---
> >   xen/arch/arm/include/asm/bug.h       | 19 +++----------------
> >   xen/arch/arm/include/asm/div64.h     |  2 +-
> >   xen/arch/arm/vgic/vgic-v2.c          |  2 +-
> >   xen/arch/arm/vgic/vgic.c             |  2 +-
> >   xen/arch/x86/acpi/cpufreq/cpufreq.c  |  2 +-
> >   xen/arch/x86/include/asm/asm_defns.h |  2 +-
> >   xen/arch/x86/include/asm/bug.h       | 19 ++-----------------
> >   xen/drivers/cpufreq/cpufreq.c        |  2 +-
> >   xen/include/xen/lib.h                |  2 +-
> >   9 files changed, 12 insertions(+), 40 deletions(-)
> > 
> > diff --git a/xen/arch/arm/include/asm/bug.h
> > b/xen/arch/arm/include/asm/bug.h
> > index f4088d0913..cacaf014ab 100644
> > --- a/xen/arch/arm/include/asm/bug.h
> > +++ b/xen/arch/arm/include/asm/bug.h
> > @@ -1,6 +1,8 @@
> >   #ifndef __ARM_BUG_H__
> >   #define __ARM_BUG_H__
> >   
> > +#include <xen/types.h>
> 
> You are not adding new code in bug.h, so can you explain why this is
> now 
> necessary?
I am not adding new code but inside 'struct bug_frame' there are
uint16_t and uint32_t which are defined in <xen/types.h>.

And after <asm/bug.h> was changed to <xen/bug.h> it started to complain
on these types.
> 
> > +
> >   #if defined(CONFIG_ARM_32)
> >   # include <asm/arm32/bug.h>
> >   #elif defined(CONFIG_ARM_64)
> > @@ -9,9 +11,7 @@
> >   # error "unknown ARM variant"
> >   #endif
> >   
> > -#define BUG_DISP_WIDTH    24
> > -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> > -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
> 
> Even if the values are the same as the one you defined in the common 
> bug.h, it doesn't feel right to remove them as long as...
> 
> > +#define BUG_FRAME_STRUCT
> 
> the arch is defining BUG_FRAME_STRUCT. So I would say the generic one
> should be defined within BUG_FRAME_STRUCT.
One of the reason BUG_DISP_WIDTH, BUG_LINE_* were removed is that they
don't use in ARM at all...

But generally I agree that it should be part of "#ifndef
BUG_FRAME_STRUCT" as it is 'struct bug_frame is dependent on it and
these defines look 'struct bug_frame' specific.

I'll update that in new version of the patch.
> 
> Cheers,
>
Oleksii K. Feb. 28, 2023, 1:14 p.m. UTC | #5
On Mon, 2023-02-27 at 15:29 +0100, Jan Beulich wrote:
> On 24.02.2023 12:31, Oleksii Kurochko wrote:
> > Since the generic version of bug.h stuff was introduced use
> > <xen/bug.h>
> > instead of unnecessary <asm/bug.h>
> 
> You keep saying "unnecessary" here, but that's not really correct.
> Including asm/bug.h alone simply becomes meaningless. So how about
> "... instead of now useless (in isolation) <asm/bug.h>"?
> 
> > --- a/xen/arch/x86/include/asm/bug.h
> > +++ b/xen/arch/x86/include/asm/bug.h
> > @@ -1,19 +1,10 @@
> >  #ifndef __X86_BUG_H__
> >  #define __X86_BUG_H__
> >  
> > -#define BUG_DISP_WIDTH    24
> > -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> > -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
> > -
> > -#define BUGFRAME_run_fn 0
> > -#define BUGFRAME_warn   1
> > -#define BUGFRAME_bug    2
> > -#define BUGFRAME_assert 3
> > -
> > -#define BUGFRAME_NR     4
> > -
> >  #ifndef __ASSEMBLY__
> >  
> > +#define BUG_FRAME_STRUCT
> > +
> >  struct bug_frame {
> >      signed int loc_disp:BUG_DISP_WIDTH;
> >      unsigned int line_hi:BUG_LINE_HI_WIDTH;
> 
> Why would x86 continue to define its own bug_frame (and other items)?
> 
Because x86 will be switched to generic one in the following patches of
the patch series and right now it defines only BUG_FRAME_STRUCT which
means that it will not use generic one implemetation now.
The idea of the patch was to rename <asm/bug.h> to <xen/bug.h> with
minimal required changes to keep Xen compilable.

And I am going to back:

-#define BUG_DISP_WIDTH    24
-#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
-#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)

for the same reason as in ARM. these defines are related to 'stuct
bug_frame' so should go with it.
These defines will be removed when an architecture will be switched to
generic implementation.

> Jan
~ Oleksii
Jan Beulich Feb. 28, 2023, 1:30 p.m. UTC | #6
On 28.02.2023 14:07, Oleksii wrote:
> On Sat, 2023-02-25 at 16:47 +0000, Julien Grall wrote:
>> On 24/02/2023 11:31, Oleksii Kurochko wrote:
>>> --- a/xen/arch/arm/include/asm/bug.h
>>> +++ b/xen/arch/arm/include/asm/bug.h
>>> @@ -1,6 +1,8 @@
>>>   #ifndef __ARM_BUG_H__
>>>   #define __ARM_BUG_H__
>>>   
>>> +#include <xen/types.h>
>>
>> You are not adding new code in bug.h, so can you explain why this is
>> now 
>> necessary?
> I am not adding new code but inside 'struct bug_frame' there are
> uint16_t and uint32_t which are defined in <xen/types.h>.
> 
> And after <asm/bug.h> was changed to <xen/bug.h> it started to complain
> on these types.

Wouldn't xen/bug.h want to include xen/types.h anyway, and then clearly
before including asm/bug.h?

Jan
Julien Grall Feb. 28, 2023, 2:04 p.m. UTC | #7
On 28/02/2023 12:38, Oleksii wrote:
> Hi Julien,

Hi,

> On Sat, 2023-02-25 at 16:47 +0000, Julien Grall wrote:
>> Hi Oleksii,
>>
>> On 24/02/2023 11:31, Oleksii Kurochko wrote:
>>> Since the generic version of bug.h stuff was introduced use
>>> <xen/bug.h>
>>> instead of unnecessary <asm/bug.h>
>>>
>>> Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
>>> ---
>>> Changes in V3:
>>>    * Update patch 2 not to break compilation: move some parts from
>>> patches 3 and 4
>>>      to patch 2:
>>>      * move some generic parts from <asm/bug.h> to <xen/bug.h>
>>>      * add define BUG_FRAME_STRUCT in ARM's <asm/bug.h>
>>> ---
>>> Changes in V2:
>>>    * Put [PATCH v1 4/4] xen: change <asm/bug.h> to <xen/bug.h> as
>>> second patch,
>>>      update the patch to change all <asm/bug.h> to <xen/bug.h> among
>>> the whole project
>>>      to not break build.
>>>    * Update the commit message.
>>> ---
>>>    xen/arch/arm/include/asm/bug.h       | 19 +++----------------
>>>    xen/arch/arm/include/asm/div64.h     |  2 +-
>>>    xen/arch/arm/vgic/vgic-v2.c          |  2 +-
>>>    xen/arch/arm/vgic/vgic.c             |  2 +-
>>>    xen/arch/x86/acpi/cpufreq/cpufreq.c  |  2 +-
>>>    xen/arch/x86/include/asm/asm_defns.h |  2 +-
>>>    xen/arch/x86/include/asm/bug.h       | 19 ++-----------------
>>>    xen/drivers/cpufreq/cpufreq.c        |  2 +-
>>>    xen/include/xen/lib.h                |  2 +-
>>>    9 files changed, 12 insertions(+), 40 deletions(-)
>>>
>>> diff --git a/xen/arch/arm/include/asm/bug.h
>>> b/xen/arch/arm/include/asm/bug.h
>>> index f4088d0913..cacaf014ab 100644
>>> --- a/xen/arch/arm/include/asm/bug.h
>>> +++ b/xen/arch/arm/include/asm/bug.h
>>> @@ -1,6 +1,8 @@
>>>    #ifndef __ARM_BUG_H__
>>>    #define __ARM_BUG_H__
>>>    
>>> +#include <xen/types.h>
>>
>> You are not adding new code in bug.h, so can you explain why this is
>> now
>> necessary?
>>
>>> +
>>>    #if defined(CONFIG_ARM_32)
>>>    # include <asm/arm32/bug.h>
>>>    #elif defined(CONFIG_ARM_64)
>>> @@ -9,9 +11,7 @@
>>>    # error "unknown ARM variant"
>>>    #endif
>>>    
>>> -#define BUG_DISP_WIDTH    24
>>> -#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
>>> -#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
>>
>> Even if the values are the same as the one you defined in the common
>> bug.h, it doesn't feel right to remove them as long as...
>>
>>> +#define BUG_FRAME_STRUCT
>>
>> the arch is defining BUG_FRAME_STRUCT. So I would say the generic one
>> should be defined within BUG_FRAME_STRUCT.
>>
> One of the reason BUG_DISP_WIDTH, BUG_LINE_* were removed is that they
> don't use in ARM at all...

Hmmm ok. But this sort of things should have been documented in the 
commit message even thought it doesn't feel this is related to what the 
patch is doing.

Cheers,
Oleksii K. Feb. 28, 2023, 4 p.m. UTC | #8
On Tue, 2023-02-28 at 14:30 +0100, Jan Beulich wrote:
> On 28.02.2023 14:07, Oleksii wrote:
> > On Sat, 2023-02-25 at 16:47 +0000, Julien Grall wrote:
> > > On 24/02/2023 11:31, Oleksii Kurochko wrote:
> > > > --- a/xen/arch/arm/include/asm/bug.h
> > > > +++ b/xen/arch/arm/include/asm/bug.h
> > > > @@ -1,6 +1,8 @@
> > > >   #ifndef __ARM_BUG_H__
> > > >   #define __ARM_BUG_H__
> > > >   
> > > > +#include <xen/types.h>
> > > 
> > > You are not adding new code in bug.h, so can you explain why this
> > > is
> > > now 
> > > necessary?
> > I am not adding new code but inside 'struct bug_frame' there are
> > uint16_t and uint32_t which are defined in <xen/types.h>.
> > 
> > And after <asm/bug.h> was changed to <xen/bug.h> it started to
> > complain
> > on these types.
> 
> Wouldn't xen/bug.h want to include xen/types.h anyway, and then
> clearly
> before including asm/bug.h?
<xen/types.h> can be moved to <xen/bug.h> but generic implementation
doesn't use any specific from <xen/types.h> types.
But probably you are right that it would be better move to
<xen/bug.h>...
> 
> Jan
~ Oleksii
diff mbox series

Patch

diff --git a/xen/arch/arm/include/asm/bug.h b/xen/arch/arm/include/asm/bug.h
index f4088d0913..cacaf014ab 100644
--- a/xen/arch/arm/include/asm/bug.h
+++ b/xen/arch/arm/include/asm/bug.h
@@ -1,6 +1,8 @@ 
 #ifndef __ARM_BUG_H__
 #define __ARM_BUG_H__
 
+#include <xen/types.h>
+
 #if defined(CONFIG_ARM_32)
 # include <asm/arm32/bug.h>
 #elif defined(CONFIG_ARM_64)
@@ -9,9 +11,7 @@ 
 # error "unknown ARM variant"
 #endif
 
-#define BUG_DISP_WIDTH    24
-#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
-#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
+#define BUG_FRAME_STRUCT
 
 struct bug_frame {
     signed int loc_disp;    /* Relative address to the bug address */
@@ -26,13 +26,6 @@  struct bug_frame {
 #define bug_line(b) ((b)->line)
 #define bug_msg(b) ((const char *)(b) + (b)->msg_disp)
 
-#define BUGFRAME_run_fn 0
-#define BUGFRAME_warn   1
-#define BUGFRAME_bug    2
-#define BUGFRAME_assert 3
-
-#define BUGFRAME_NR     4
-
 /* Many versions of GCC doesn't support the asm %c parameter which would
  * be preferable to this unpleasantness. We use mergeable string
  * sections to avoid multiple copies of the string appearing in the
@@ -89,12 +82,6 @@  struct bug_frame {
     unreachable();                                              \
 } while (0)
 
-extern const struct bug_frame __start_bug_frames[],
-                              __stop_bug_frames_0[],
-                              __stop_bug_frames_1[],
-                              __stop_bug_frames_2[],
-                              __stop_bug_frames_3[];
-
 #endif /* __ARM_BUG_H__ */
 /*
  * Local variables:
diff --git a/xen/arch/arm/include/asm/div64.h b/xen/arch/arm/include/asm/div64.h
index 1cd58bc51a..fc667a80f9 100644
--- a/xen/arch/arm/include/asm/div64.h
+++ b/xen/arch/arm/include/asm/div64.h
@@ -74,7 +74,7 @@ 
 
 #elif __GNUC__ >= 4
 
-#include <asm/bug.h>
+#include <xen/bug.h>
 
 /*
  * If the divisor happens to be constant, we determine the appropriate
diff --git a/xen/arch/arm/vgic/vgic-v2.c b/xen/arch/arm/vgic/vgic-v2.c
index 1a99d3a8b4..c90e88fddb 100644
--- a/xen/arch/arm/vgic/vgic-v2.c
+++ b/xen/arch/arm/vgic/vgic-v2.c
@@ -16,8 +16,8 @@ 
  */
 
 #include <asm/new_vgic.h>
-#include <asm/bug.h>
 #include <asm/gic.h>
+#include <xen/bug.h>
 #include <xen/sched.h>
 #include <xen/sizes.h>
 
diff --git a/xen/arch/arm/vgic/vgic.c b/xen/arch/arm/vgic/vgic.c
index f0f2ea5021..b9463a5f27 100644
--- a/xen/arch/arm/vgic/vgic.c
+++ b/xen/arch/arm/vgic/vgic.c
@@ -15,9 +15,9 @@ 
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <xen/bug.h>
 #include <xen/list_sort.h>
 #include <xen/sched.h>
-#include <asm/bug.h>
 #include <asm/event.h>
 #include <asm/new_vgic.h>
 
diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufreq/cpufreq.c
index c27cbb2304..18ff2a443b 100644
--- a/xen/arch/x86/acpi/cpufreq/cpufreq.c
+++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c
@@ -27,6 +27,7 @@ 
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  */
 
+#include <xen/bug.h>
 #include <xen/types.h>
 #include <xen/errno.h>
 #include <xen/delay.h>
@@ -35,7 +36,6 @@ 
 #include <xen/sched.h>
 #include <xen/timer.h>
 #include <xen/xmalloc.h>
-#include <asm/bug.h>
 #include <asm/msr.h>
 #include <asm/io.h>
 #include <asm/processor.h>
diff --git a/xen/arch/x86/include/asm/asm_defns.h b/xen/arch/x86/include/asm/asm_defns.h
index d9431180cf..a8526cf36c 100644
--- a/xen/arch/x86/include/asm/asm_defns.h
+++ b/xen/arch/x86/include/asm/asm_defns.h
@@ -6,7 +6,7 @@ 
 /* NB. Auto-generated from arch/.../asm-offsets.c */
 #include <asm/asm-offsets.h>
 #endif
-#include <asm/bug.h>
+#include <xen/bug.h>
 #include <asm/x86-defns.h>
 #include <xen/stringify.h>
 #include <asm/cpufeature.h>
diff --git a/xen/arch/x86/include/asm/bug.h b/xen/arch/x86/include/asm/bug.h
index b7265bdfbe..4b3e7b019d 100644
--- a/xen/arch/x86/include/asm/bug.h
+++ b/xen/arch/x86/include/asm/bug.h
@@ -1,19 +1,10 @@ 
 #ifndef __X86_BUG_H__
 #define __X86_BUG_H__
 
-#define BUG_DISP_WIDTH    24
-#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
-#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
-
-#define BUGFRAME_run_fn 0
-#define BUGFRAME_warn   1
-#define BUGFRAME_bug    2
-#define BUGFRAME_assert 3
-
-#define BUGFRAME_NR     4
-
 #ifndef __ASSEMBLY__
 
+#define BUG_FRAME_STRUCT
+
 struct bug_frame {
     signed int loc_disp:BUG_DISP_WIDTH;
     unsigned int line_hi:BUG_LINE_HI_WIDTH;
@@ -80,12 +71,6 @@  struct bug_frame {
     unreachable();                                              \
 } while (0)
 
-extern const struct bug_frame __start_bug_frames[],
-                              __stop_bug_frames_0[],
-                              __stop_bug_frames_1[],
-                              __stop_bug_frames_2[],
-                              __stop_bug_frames_3[];
-
 #else  /* !__ASSEMBLY__ */
 
 /*
diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c
index a94520ee57..354f78580b 100644
--- a/xen/drivers/cpufreq/cpufreq.c
+++ b/xen/drivers/cpufreq/cpufreq.c
@@ -26,6 +26,7 @@ 
  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  */
 
+#include <xen/bug.h>
 #include <xen/types.h>
 #include <xen/errno.h>
 #include <xen/delay.h>
@@ -39,7 +40,6 @@ 
 #include <xen/guest_access.h>
 #include <xen/domain.h>
 #include <xen/cpu.h>
-#include <asm/bug.h>
 #include <asm/io.h>
 #include <asm/processor.h>
 
diff --git a/xen/include/xen/lib.h b/xen/include/xen/lib.h
index 05ee1e18af..e914ccade0 100644
--- a/xen/include/xen/lib.h
+++ b/xen/include/xen/lib.h
@@ -24,12 +24,12 @@ 
 
 #ifndef __ASSEMBLY__
 
+#include <xen/bug.h>
 #include <xen/inttypes.h>
 #include <xen/stdarg.h>
 #include <xen/types.h>
 #include <xen/xmalloc.h>
 #include <xen/string.h>
-#include <asm/bug.h>
 
 #define BUG_ON(p)  do { if (unlikely(p)) BUG();  } while (0)
 #define WARN_ON(p)  ({                  \