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

Re: [PATCH v7 1/5] xen: introduce CONFIG_GENERIC_BUG_FRAME


  • To: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Mon, 13 Mar 2023 17:26:36 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=G2vus6BNRVFckuwcSlznto5IidHqjeDrezO/nwXOVxQ=; b=dXT9wmATUiF9CKKq56OXQYc6cqHX84H0W1NGYvRLhchK+DcAKsldecthKECX/lhwDxQGzFWC3aSK+MCvyXITYvol8OVA/mhirfe7n/3ZqKRGlwaUQ6kFrPrg2HPdCoCAqA/k+WlPt8gp+ZQWyJ+rY4ppVpohVPdQjgPvi4bA2dyz+yvTZUn+uSoJ2e1jK474UQTktB0+qvAM+iNQXVkJIWy5pBy2Gl9k7MvkAcf9VeQFkS+3rQ3g1s5i8chKasF4+Fa1qz6iQKEfdvpvUor3Dl0v2KWgMtkXJL23tYASh7PDEKvFYIOwsegJHGCQ7WRgF5pZRdtdOMlc+pMkaIYlmg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vx2OgP+xfNQDlJm4S/c719gaJARmf4k/q5fg9+Q/U4aYH2y+J7ZshN+EqpMgPuYg+qqWqGApV6u4qczJSdNGpxdawk8R/pLwy3ay0o9bYbEEyRmlo4ViYXbh0FyenEzxAQ7lWyyDrImirXgHy9H22YzRw5MH/uQgY4AXJwsWKcYzcq/8E1RCIEPFtKJzvDE4fQtaawv2Sig2+O2lanDcT9AKZ7SFdxtvUu0VF5c7Hg5TfRnwBc5OU75k1x3jzQ5juX51gtSIFBeAcHMNq81tRPXgpVmPzm/+opNhBkspV2uQEbg+l+qtfqflguHmQOlT5GdeifTQD3YkWi5DR8PiTw==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Julien Grall <julien@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Gianluca Guida <gianluca@xxxxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Mon, 13 Mar 2023 16:26:51 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 09.03.2023 14:33, Oleksii Kurochko wrote:
> --- /dev/null
> +++ b/xen/common/bug.c
> @@ -0,0 +1,107 @@
> +#include <xen/bug.h>
> +#include <xen/errno.h>
> +#include <xen/kernel.h>
> +#include <xen/livepatch.h>
> +#include <xen/string.h>
> +#include <xen/types.h>
> +#include <xen/virtual_region.h>
> +
> +#include <asm/processor.h>
> +
> +/*
> + * Returns a negative value in case of an error otherwise
> + * BUGFRAME_{run_fn, warn, bug, assert}
> + */
> +int do_bug_frame(struct cpu_user_regs *regs, unsigned long pc)
> +{
> +    const struct bug_frame *bug = NULL;
> +    const struct virtual_region *region;
> +    const char *prefix = "", *filename, *predicate;
> +    unsigned long fixup;
> +    unsigned int id = BUGFRAME_NR, lineno;

Unnecessary initializer; "id" is set ...

> +    region = find_text_region(pc);
> +    if ( !region )
> +        return -EINVAL;
> +
> +    for ( id = 0; id < BUGFRAME_NR; id++ )

... unconditionally here.

> --- /dev/null
> +++ b/xen/include/xen/bug.h
> @@ -0,0 +1,162 @@
> +#ifndef __XEN_BUG_H__
> +#define __XEN_BUG_H__
> +
> +#define BUGFRAME_run_fn 0
> +#define BUGFRAME_warn   1
> +#define BUGFRAME_bug    2
> +#define BUGFRAME_assert 3
> +
> +#define BUGFRAME_NR     4
> +
> +#define BUG_DISP_WIDTH    24
> +#define BUG_LINE_LO_WIDTH (31 - BUG_DISP_WIDTH)
> +#define BUG_LINE_HI_WIDTH (31 - BUG_DISP_WIDTH)
> +
> +#include <asm/bug.h>
> +
> +#ifndef __ASSEMBLY__
> +
> +#ifndef BUG_DEBUGGER_TRAP_FATAL
> +#define BUG_DEBUGGER_TRAP_FATAL(regs) 0
> +#endif
> +
> +#include <xen/lib.h>
> +
> +#ifndef BUG_FRAME_STRUCT
> +
> +struct bug_frame {
> +    signed int loc_disp:BUG_DISP_WIDTH;
> +    unsigned int line_hi:BUG_LINE_HI_WIDTH;
> +    signed int ptr_disp:BUG_DISP_WIDTH;
> +    unsigned int line_lo:BUG_LINE_LO_WIDTH;
> +    signed int msg_disp[];
> +};
> +
> +#define bug_loc(b) ((unsigned long)(b) + (b)->loc_disp)
> +
> +#define bug_ptr(b) ((const void *)(b) + (b)->ptr_disp)
> +
> +#define bug_line(b) (((((b)->line_hi + ((b)->loc_disp < 0)) &                
> \
> +                       ((1 << BUG_LINE_HI_WIDTH) - 1)) <<                    
> \
> +                      BUG_LINE_LO_WIDTH) +                                   
> \
> +                     (((b)->line_lo + ((b)->ptr_disp < 0)) &                 
> \
> +                      ((1 << BUG_LINE_LO_WIDTH) - 1)))
> +
> +#define bug_msg(b) ((const char *)(b) + (b)->msg_disp[1])
> +
> +#ifndef BUILD_BUG_ON_LINE_WIDTH
> +#define BUILD_BUG_ON_LINE_WIDTH(line) \
> +    BUILD_BUG_ON((line) >> (BUG_LINE_LO_WIDTH + BUG_LINE_HI_WIDTH))
> +#endif

I still don't see why you have #ifdef here. What I would expect is (as
expressed before)

#define BUILD_BUG_ON_LINE_WIDTH(line) \
    BUILD_BUG_ON((line) >> (BUG_LINE_LO_WIDTH + BUG_LINE_HI_WIDTH))

#else  /* BUG_FRAME_STRUCT */

#ifndef BUILD_BUG_ON_LINE_WIDTH
#define BUILD_BUG_ON_LINE_WIDTH(line) ((void)(line)
#endif

(perhaps shortened to

#elif !defined(BUILD_BUG_ON_LINE_WIDTH)
#define BUILD_BUG_ON_LINE_WIDTH(line) ((void)(line)

)

> +#endif /* BUG_FRAME_STRUCT */

... and then the separate conditional further down dropped. Have you
found anything speaking against this approach?

Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.