From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6475500386308325376 X-Received: by 10.36.17.67 with SMTP id 64mr1559137itf.51.1508272164842; Tue, 17 Oct 2017 13:29:24 -0700 (PDT) X-BeenThere: outreachy-kernel@googlegroups.com Received: by 10.107.183.212 with SMTP id h203ls569720iof.12.gmail; Tue, 17 Oct 2017 13:29:24 -0700 (PDT) X-Received: by 10.36.50.19 with SMTP id j19mr281111ita.6.1508272164136; Tue, 17 Oct 2017 13:29:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508272164; cv=none; d=google.com; s=arc-20160816; b=rBkODG5R7NSt9wsYRH3ZAEOjrs1Th12eexCLvqn8m4s3X/jEKkJJWnrJamCyT7ND8f 6BUxNX/jYJGEsOV9yPREi7m9mmiU9xCw1XZUUbIVlfcM8+ijFaqWlAvljDEWMkdML1C0 VPnaKtyvI/aytF+x67yAOA9orE8liyYVIlGl2wgV+IV+LVFJLDDuQkq84yKCCpwNzI5B k+LLZe0liUrGGye7CBLiGVCe2/WMKr61f1Hsot5Qkf+asoG2YARg9eWPofJ14J46tlgV cx8CiZf1FbKq58grhM4U+XSp1kl6YOnIly12iRNLs4rVWsonwwJ+3rlNip3Ol/o5HuiN Xx6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:in-reply-to:content-disposition:mime-version:references :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=MKLvE+gQXnSMhxsUOGbmrFkujm3iI0tzmVTbfuCV/PM=; b=GvPdQag6d150MOC9ESSSS1E9kCxKvnrhgnClk61iu71wnYW4uxLv94xP2JrSiEuHra tUQinHXbN+Id/rM2CfZ9N2NDkeWBIYntrnyDEOacIHI8gKEF9oSokBlU6WnV3kKhgrHA YbwH2y9CmE2DyvS5IJZAd0vcFm3nz3UTdDvGyINvxA9Q2cJCRodT0k57cEPD/KJwihzV 2A12B3tKCK5+jdTRe9fFiu1z6+Zc175s5gLfqcbE4CKcP97YOZL07vwrlT+ClSqNkyG1 zQlbBJ1CGiRTZ+4LTSDiFs5R27T+QCJhSFcTawS+ItfCNKNud5CecuIXxLhtJi+fnCKt 3O+A== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=mKkkX5az; spf=pass (google.com: domain of hamohammed.sa@gmail.com designates 2607:f8b0:400e:c00::230 as permitted sender) smtp.mailfrom=hamohammed.sa@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from mail-pf0-x230.google.com (mail-pf0-x230.google.com. [2607:f8b0:400e:c00::230]) by gmr-mx.google.com with ESMTPS id d125si136608itg.0.2017.10.17.13.29.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Oct 2017 13:29:24 -0700 (PDT) Received-SPF: pass (google.com: domain of hamohammed.sa@gmail.com designates 2607:f8b0:400e:c00::230 as permitted sender) client-ip=2607:f8b0:400e:c00::230; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=mKkkX5az; spf=pass (google.com: domain of hamohammed.sa@gmail.com designates 2607:f8b0:400e:c00::230 as permitted sender) smtp.mailfrom=hamohammed.sa@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: by mail-pf0-x230.google.com with SMTP id x7so2188086pfa.1 for ; Tue, 17 Oct 2017 13:29:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=MKLvE+gQXnSMhxsUOGbmrFkujm3iI0tzmVTbfuCV/PM=; b=mKkkX5azIwX2XTjFD8TiCmKr6Lt4xz6GgyQBEpOLC93zCUJyQyR6buHm5RjpmY+x03 f0RS3Ux0pLWvsrWppRnOyeFriRRpg/1jMA1iCr59vdMB6CB3WmnvBr/AGBR3GIWv64v4 e1fZcynZDsYKMlLrfS59fsdWYAAFubqPVlF2BcgERWLmtAI6CdiliJmfG3nezyaTN2nN zjw81VfK+YZ3EyKZzGTysa4fo7tQNbSGfOX6miS/L/30bCiSp0jPMjETQ4j3cesdG/de 3wWvBQH0KV5VErn7n6j40CWTDdGOTuGBQsicFICefhNbIUBSa98SNBJaEvBs7mXk8TPd J0fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=MKLvE+gQXnSMhxsUOGbmrFkujm3iI0tzmVTbfuCV/PM=; b=G7v46NCle+dmWH8Cf15xt2RPpCqid+gx4dx/V6bTO1ESJg5WtfKMTX3Q/TM9Kh5/sd v9GVZzGS9C1aYvKXFsCv+sVdA6HRlFo67QvBuDcF1DQaS9DXNlH2S6Aly+GY5uFnGwq8 zUry8myt7Rd+nKnEZA38Ri7mqgCHR1ZtQuZf5hlVjWMod7A1bFUfdsbO0wYmAV+fpTgs xa1zLwrZteDCzp98p3nwJXOtcs437sB/uva/FejNXAYttTpqBJYMd9Pz9gFqa7bpMGdd BALxQaACFbpe80GNXPtvBkW1a6Kvk2do8gv04YCRtgtQyfUX1JGhOdZU7JfkZ0FTxvhB WWRg== X-Gm-Message-State: AMCzsaUYAN5ldjwFp4EIoRj/wWrbBTedg8JFBbtHGKqDf4qaK8weIGr6 MrTfaAXOS5LxSqK1gn36nms= X-Google-Smtp-Source: AOwi7QBMFO2AkekkrGLydLNwa/yPSvnbhLLpRfq06+upNV1V6+Ff/r1zJXGNt+MLAlS1YyyJ/FldWw== X-Received: by 10.99.44.208 with SMTP id s199mr11805375pgs.80.1508272163588; Tue, 17 Oct 2017 13:29:23 -0700 (PDT) Return-Path: Received: from Haneen ([64.77.242.50]) by smtp.gmail.com with ESMTPSA id g16sm21273025pfd.87.2017.10.17.13.29.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Oct 2017 13:29:22 -0700 (PDT) Date: Tue, 17 Oct 2017 14:29:20 -0600 From: Haneen Mohammed To: Sean Paul Cc: dri-devel@lists.freedesktop.org, Daniel Vetter , Jani Nikula , David Airlie , outreachy-kernel , gregkh@linuxfoundation.org Subject: Re: [PATCH v3 1/2] drm: Move debug macros out of drmP.h Message-ID: <20171017202920.GA15615@Haneen> References: <20171017195413.rlzmpurlk6cqho2z@art_vandelay> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171017195413.rlzmpurlk6cqho2z@art_vandelay> User-Agent: Mutt/1.5.24 (2015-08-30) On Tue, Oct 17, 2017 at 03:54:13PM -0400, Sean Paul wrote: > On Tue, Oct 17, 2017 at 02:43:38AM -0600, Haneen Mohammed wrote: > > This patch extract DRM_* debug macros from drmP.h to drm_print.h and > > move printing related functions used by these macros from drm_drv.[hc] > > to drm_print.[hc]. > > > > Signed-off-by: Haneen Mohammed > > --- > > Changes in v3: > > - Move debug macros and print functions into drm_print.[hc] instead of > > introducing drm_debug.[hc]. > > > > drivers/gpu/drm/drm_drv.c | 47 ------------- > > drivers/gpu/drm/drm_print.c | 47 +++++++++++++ > > include/drm/drmP.h | 150 +----------------------------------------- > > include/drm/drm_drv.h | 7 -- > > include/drm/drm_print.h | 156 ++++++++++++++++++++++++++++++++++++++++++++ > > 5 files changed, 204 insertions(+), 203 deletions(-) > > > > > > > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > > index 7277783a..2ba73ff4 100644 > > --- a/include/drm/drmP.h > > +++ b/include/drm/drmP.h > > @@ -75,6 +75,7 @@ > > #include > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -142,160 +143,11 @@ struct pci_controller; > > /*@{*/ > > > > Any reason why you didn't move the DRM_UT_* defines as well? They're sprinkled > through a couple drivers, but it's all related to debug messaging. > > Sean > No, I didn't know they are specifically related to debug messaging. I will include them then in a revised patch. Thank you, Haneen > > /***********************************************************************/ > > -/** \name Macros to make printk easier */ > > -/*@{*/ > > - > > -#define _DRM_PRINTK(once, level, fmt, ...) \ > > - do { \ > > - printk##once(KERN_##level "[" DRM_NAME "] " fmt, \ > > - ##__VA_ARGS__); \ > > - } while (0) > > - > > -#define DRM_INFO(fmt, ...) \ > > - _DRM_PRINTK(, INFO, fmt, ##__VA_ARGS__) > > -#define DRM_NOTE(fmt, ...) \ > > - _DRM_PRINTK(, NOTICE, fmt, ##__VA_ARGS__) > > -#define DRM_WARN(fmt, ...) \ > > - _DRM_PRINTK(, WARNING, fmt, ##__VA_ARGS__) > > - > > -#define DRM_INFO_ONCE(fmt, ...) \ > > - _DRM_PRINTK(_once, INFO, fmt, ##__VA_ARGS__) > > -#define DRM_NOTE_ONCE(fmt, ...) \ > > - _DRM_PRINTK(_once, NOTICE, fmt, ##__VA_ARGS__) > > -#define DRM_WARN_ONCE(fmt, ...) \ > > - _DRM_PRINTK(_once, WARNING, fmt, ##__VA_ARGS__) > > - > > -/** > > - * Error output. > > - * > > - * \param fmt printf() like format string. > > - * \param arg arguments > > - */ > > -#define DRM_DEV_ERROR(dev, fmt, ...) \ > > - drm_dev_printk(dev, KERN_ERR, DRM_UT_NONE, __func__, " *ERROR*",\ > > - fmt, ##__VA_ARGS__) > > -#define DRM_ERROR(fmt, ...) \ > > - drm_printk(KERN_ERR, DRM_UT_NONE, fmt, ##__VA_ARGS__) > > - > > -/** > > - * Rate limited error output. Like DRM_ERROR() but won't flood the log. > > - * > > - * \param fmt printf() like format string. > > - * \param arg arguments > > - */ > > -#define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \ > > -({ \ > > - static DEFINE_RATELIMIT_STATE(_rs, \ > > - DEFAULT_RATELIMIT_INTERVAL, \ > > - DEFAULT_RATELIMIT_BURST); \ > > - \ > > - if (__ratelimit(&_rs)) \ > > - DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \ > > -}) > > -#define DRM_ERROR_RATELIMITED(fmt, ...) \ > > - DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_INFO(dev, fmt, ...) \ > > - drm_dev_printk(dev, KERN_INFO, DRM_UT_NONE, __func__, "", fmt, \ > > - ##__VA_ARGS__) > > - > > -#define DRM_DEV_INFO_ONCE(dev, fmt, ...) \ > > -({ \ > > - static bool __print_once __read_mostly; \ > > - if (!__print_once) { \ > > - __print_once = true; \ > > - DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \ > > - } \ > > -}) > > - > > -/** > > - * Debug output. > > - * > > - * \param fmt printf() like format string. > > - * \param arg arguments > > - */ > > -#define DRM_DEV_DEBUG(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_CORE, __func__, "", fmt, \ > > - ##args) > > -#define DRM_DEBUG(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_CORE, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_DEBUG_DRIVER(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_DRIVER, __func__, "", \ > > - fmt, ##args) > > -#define DRM_DEBUG_DRIVER(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_DRIVER, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_DEBUG_KMS(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_KMS, __func__, "", fmt, \ > > - ##args) > > -#define DRM_DEBUG_KMS(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_KMS, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_DEBUG_PRIME(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_PRIME, __func__, "", \ > > - fmt, ##args) > > -#define DRM_DEBUG_PRIME(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_PRIME, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_DEBUG_ATOMIC(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ATOMIC, __func__, "", \ > > - fmt, ##args) > > -#define DRM_DEBUG_ATOMIC(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__) > > - > > -#define DRM_DEV_DEBUG_VBL(dev, fmt, args...) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_VBL, __func__, "", fmt, \ > > - ##args) > > -#define DRM_DEBUG_VBL(fmt, ...) \ > > - drm_printk(KERN_DEBUG, DRM_UT_VBL, fmt, ##__VA_ARGS__) > > - > > -#define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, level, fmt, args...) \ > > -({ \ > > - static DEFINE_RATELIMIT_STATE(_rs, \ > > - DEFAULT_RATELIMIT_INTERVAL, \ > > - DEFAULT_RATELIMIT_BURST); \ > > - if (__ratelimit(&_rs)) \ > > - drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ ## level, \ > > - __func__, "", fmt, ##args); \ > > -}) > > - > > -/** > > - * Rate limited debug output. Like DRM_DEBUG() but won't flood the log. > > - * > > - * \param fmt printf() like format string. > > - * \param arg arguments > > - */ > > -#define DRM_DEV_DEBUG_RATELIMITED(dev, fmt, args...) \ > > - DEV__DRM_DEFINE_DEBUG_RATELIMITED(dev, CORE, fmt, ##args) > > -#define DRM_DEBUG_RATELIMITED(fmt, args...) \ > > - DRM_DEV_DEBUG_RATELIMITED(NULL, fmt, ##args) > > -#define DRM_DEV_DEBUG_DRIVER_RATELIMITED(dev, fmt, args...) \ > > - _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRIVER, fmt, ##args) > > -#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, args...) \ > > - DRM_DEV_DEBUG_DRIVER_RATELIMITED(NULL, fmt, ##args) > > -#define DRM_DEV_DEBUG_KMS_RATELIMITED(dev, fmt, args...) \ > > - _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, KMS, fmt, ##args) > > -#define DRM_DEBUG_KMS_RATELIMITED(fmt, args...) \ > > - DRM_DEV_DEBUG_KMS_RATELIMITED(NULL, fmt, ##args) > > -#define DRM_DEV_DEBUG_PRIME_RATELIMITED(dev, fmt, args...) \ > > - _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, PRIME, fmt, ##args) > > -#define DRM_DEBUG_PRIME_RATELIMITED(fmt, args...) \ > > - DRM_DEV_DEBUG_PRIME_RATELIMITED(NULL, fmt, ##args) > > - > > -/* Format strings and argument splitters to simplify printing > > - * various "complex" objects > > - */ > > - > > -/*@}*/ > > - > > -/***********************************************************************/ > > /** \name Internal types and structures */ > > /*@{*/ > > > > #define DRM_IF_VERSION(maj, min) (maj << 16 | min) > > > > - > > /** > > * drm_drv_uses_atomic_modeset - check if the driver implements > > * atomic_commit() > > diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h > > index 71bbaae..4f3cc25 100644 > > --- a/include/drm/drm_drv.h > > +++ b/include/drm/drm_drv.h > > @@ -592,13 +592,6 @@ struct drm_driver { > > int dev_priv_size; > > }; > > > > -__printf(6, 7) > > -void drm_dev_printk(const struct device *dev, const char *level, > > - unsigned int category, const char *function_name, > > - const char *prefix, const char *format, ...); > > -__printf(3, 4) > > -void drm_printk(const char *level, unsigned int category, > > - const char *format, ...); > > extern unsigned int drm_debug; > > > > int drm_dev_init(struct drm_device *dev, > > diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h > > index ca4d7c6..9dacc5e 100644 > > --- a/include/drm/drm_print.h > > +++ b/include/drm/drm_print.h > > @@ -128,4 +128,160 @@ static inline struct drm_printer drm_debug_printer(const char *prefix) > > }; > > return p; > > } > > + > > +__printf(6, 7) > > +void drm_dev_printk(const struct device *dev, const char *level, > > + unsigned int category, const char *function_name, > > + const char *prefix, const char *format, ...); > > +__printf(3, 4) > > +void drm_printk(const char *level, unsigned int category, > > + const char *format, ...); > > +/***********************************************************************/ > > +/** \name Macros to make printk easier */ > > +/*@{*/ > > + > > +#define _DRM_PRINTK(once, level, fmt, ...) \ > > + do { \ > > + printk##once(KERN_##level "[" DRM_NAME "] " fmt, \ > > + ##__VA_ARGS__); \ > > + } while (0) > > + > > +#define DRM_INFO(fmt, ...) \ > > + _DRM_PRINTK(, INFO, fmt, ##__VA_ARGS__) > > +#define DRM_NOTE(fmt, ...) \ > > + _DRM_PRINTK(, NOTICE, fmt, ##__VA_ARGS__) > > +#define DRM_WARN(fmt, ...) \ > > + _DRM_PRINTK(, WARNING, fmt, ##__VA_ARGS__) > > + > > +#define DRM_INFO_ONCE(fmt, ...) \ > > + _DRM_PRINTK(_once, INFO, fmt, ##__VA_ARGS__) > > +#define DRM_NOTE_ONCE(fmt, ...) \ > > + _DRM_PRINTK(_once, NOTICE, fmt, ##__VA_ARGS__) > > +#define DRM_WARN_ONCE(fmt, ...) \ > > + _DRM_PRINTK(_once, WARNING, fmt, ##__VA_ARGS__) > > + > > +/** > > + * Error output. > > + * > > + * \param fmt printf() like format string. > > + * \param arg arguments > > + */ > > +#define DRM_DEV_ERROR(dev, fmt, ...) \ > > + drm_dev_printk(dev, KERN_ERR, DRM_UT_NONE, __func__, " *ERROR*",\ > > + fmt, ##__VA_ARGS__) > > +#define DRM_ERROR(fmt, ...) \ > > + drm_printk(KERN_ERR, DRM_UT_NONE, fmt, ##__VA_ARGS__) > > + > > +/** > > + * Rate limited error output. Like DRM_ERROR() but won't flood the log. > > + * > > + * \param fmt printf() like format string. > > + * \param arg arguments > > + */ > > +#define DRM_DEV_ERROR_RATELIMITED(dev, fmt, ...) \ > > +({ \ > > + static DEFINE_RATELIMIT_STATE(_rs, \ > > + DEFAULT_RATELIMIT_INTERVAL, \ > > + DEFAULT_RATELIMIT_BURST); \ > > + \ > > + if (__ratelimit(&_rs)) \ > > + DRM_DEV_ERROR(dev, fmt, ##__VA_ARGS__); \ > > +}) > > +#define DRM_ERROR_RATELIMITED(fmt, ...) \ > > + DRM_DEV_ERROR_RATELIMITED(NULL, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_INFO(dev, fmt, ...) \ > > + drm_dev_printk(dev, KERN_INFO, DRM_UT_NONE, __func__, "", fmt, \ > > + ##__VA_ARGS__) > > + > > +#define DRM_DEV_INFO_ONCE(dev, fmt, ...) \ > > +({ \ > > + static bool __print_once __read_mostly; \ > > + if (!__print_once) { \ > > + __print_once = true; \ > > + DRM_DEV_INFO(dev, fmt, ##__VA_ARGS__); \ > > + } \ > > +}) > > + > > +/** > > + * Debug output. > > + * > > + * \param fmt printf() like format string. > > + * \param arg arguments > > + */ > > +#define DRM_DEV_DEBUG(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_CORE, __func__, "", fmt, \ > > + ##args) > > +#define DRM_DEBUG(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_CORE, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_DEBUG_DRIVER(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_DRIVER, __func__, "", \ > > + fmt, ##args) > > +#define DRM_DEBUG_DRIVER(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_DRIVER, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_DEBUG_KMS(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_KMS, __func__, "", fmt, \ > > + ##args) > > +#define DRM_DEBUG_KMS(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_KMS, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_DEBUG_PRIME(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_PRIME, __func__, "", \ > > + fmt, ##args) > > +#define DRM_DEBUG_PRIME(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_PRIME, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_DEBUG_ATOMIC(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ATOMIC, __func__, "", \ > > + fmt, ##args) > > +#define DRM_DEBUG_ATOMIC(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__) > > + > > +#define DRM_DEV_DEBUG_VBL(dev, fmt, args...) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_VBL, __func__, "", fmt, \ > > + ##args) > > +#define DRM_DEBUG_VBL(fmt, ...) \ > > + drm_printk(KERN_DEBUG, DRM_UT_VBL, fmt, ##__VA_ARGS__) > > + > > +#define _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, level, fmt, args...) \ > > +({ \ > > + static DEFINE_RATELIMIT_STATE(_rs, \ > > + DEFAULT_RATELIMIT_INTERVAL, \ > > + DEFAULT_RATELIMIT_BURST); \ > > + if (__ratelimit(&_rs)) \ > > + drm_dev_printk(dev, KERN_DEBUG, DRM_UT_ ## level, \ > > + __func__, "", fmt, ##args); \ > > +}) > > + > > +/** > > + * Rate limited debug output. Like DRM_DEBUG() but won't flood the log. > > + * > > + * \param fmt printf() like format string. > > + * \param arg arguments > > + */ > > +#define DRM_DEV_DEBUG_RATELIMITED(dev, fmt, args...) \ > > + DEV__DRM_DEFINE_DEBUG_RATELIMITED(dev, CORE, fmt, ##args) > > +#define DRM_DEBUG_RATELIMITED(fmt, args...) \ > > + DRM_DEV_DEBUG_RATELIMITED(NULL, fmt, ##args) > > +#define DRM_DEV_DEBUG_DRIVER_RATELIMITED(dev, fmt, args...) \ > > + _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, DRIVER, fmt, ##args) > > +#define DRM_DEBUG_DRIVER_RATELIMITED(fmt, args...) \ > > + DRM_DEV_DEBUG_DRIVER_RATELIMITED(NULL, fmt, ##args) > > +#define DRM_DEV_DEBUG_KMS_RATELIMITED(dev, fmt, args...) \ > > + _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, KMS, fmt, ##args) > > +#define DRM_DEBUG_KMS_RATELIMITED(fmt, args...) \ > > + DRM_DEV_DEBUG_KMS_RATELIMITED(NULL, fmt, ##args) > > +#define DRM_DEV_DEBUG_PRIME_RATELIMITED(dev, fmt, args...) \ > > + _DRM_DEV_DEFINE_DEBUG_RATELIMITED(dev, PRIME, fmt, ##args) > > +#define DRM_DEBUG_PRIME_RATELIMITED(fmt, args...) \ > > + DRM_DEV_DEBUG_PRIME_RATELIMITED(NULL, fmt, ##args) > > + > > +/* Format strings and argument splitters to simplify printing > > + * various "complex" objects > > + */ > > + > > +/*@}*/ > > + > > #endif /* DRM_PRINT_H_ */ > > -- > > 2.7.4 > > > > -- > Sean Paul, Software Engineer, Google / Chromium OS From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haneen Mohammed Subject: Re: [PATCH v3 1/2] drm: Move debug macros out of drmP.h Date: Tue, 17 Oct 2017 14:29:20 -0600 Message-ID: <20171017202920.GA15615@Haneen> References: <20171017195413.rlzmpurlk6cqho2z@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf0-x243.google.com (mail-pf0-x243.google.com [IPv6:2607:f8b0:400e:c00::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 455B76E740 for ; Tue, 17 Oct 2017 20:29:24 +0000 (UTC) Received: by mail-pf0-x243.google.com with SMTP id t188so2173116pfd.10 for ; Tue, 17 Oct 2017 13:29:24 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20171017195413.rlzmpurlk6cqho2z@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: gregkh@linuxfoundation.org, outreachy-kernel , dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMTcsIDIwMTcgYXQgMDM6NTQ6MTNQTSAtMDQwMCwgU2VhbiBQYXVsIHdyb3Rl Ogo+IE9uIFR1ZSwgT2N0IDE3LCAyMDE3IGF0IDAyOjQzOjM4QU0gLTA2MDAsIEhhbmVlbiBNb2hh bW1lZCB3cm90ZToKPiA+IFRoaXMgcGF0Y2ggZXh0cmFjdCBEUk1fKiBkZWJ1ZyBtYWNyb3MgZnJv bSBkcm1QLmggdG8gZHJtX3ByaW50LmggYW5kCj4gPiBtb3ZlIHByaW50aW5nIHJlbGF0ZWQgZnVu Y3Rpb25zIHVzZWQgYnkgdGhlc2UgbWFjcm9zIGZyb20gZHJtX2Rydi5baGNdCj4gPiB0byBkcm1f cHJpbnQuW2hjXS4KPiA+IAo+ID4gU2lnbmVkLW9mZi1ieTogSGFuZWVuIE1vaGFtbWVkIDxoYW1v aGFtbWVkLnNhQGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4gQ2hhbmdlcyBpbiB2MzoKPiA+IC0gTW92 ZSBkZWJ1ZyBtYWNyb3MgYW5kIHByaW50IGZ1bmN0aW9ucyBpbnRvIGRybV9wcmludC5baGNdIGlu c3RlYWQgb2YKPiA+IGludHJvZHVjaW5nIGRybV9kZWJ1Zy5baGNdLgo+ID4gCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2RybV9kcnYuYyAgIHwgIDQ3IC0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vZHJtX3ByaW50LmMgfCAgNDcgKysrKysrKysrKysrKwo+ID4gIGluY2x1ZGUvZHJtL2Ry bVAuaCAgICAgICAgICB8IDE1MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiA+ICBpbmNsdWRlL2RybS9kcm1fZHJ2LmggICAgICAgfCAgIDcgLS0KPiA+ICBpbmNs dWRlL2RybS9kcm1fcHJpbnQuaCAgICAgfCAxNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDIwNCBpbnNlcnRpb25zKCsp LCAyMDMgZGVsZXRpb25zKC0pCj4gPiAKPiAKPiA8c25pcCAvPgo+IAo+ID4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAo+ID4gaW5kZXggNzI3Nzc4 M2EuLjJiYTczZmY0IDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCj4gPiArKysg Yi9pbmNsdWRlL2RybS9kcm1QLmgKPiA+IEBAIC03NSw2ICs3NSw3IEBACj4gPiAgI2luY2x1ZGUg PGRybS9kcm1fc2FyZWEuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KPiA+ICAjaW5j bHVkZSA8ZHJtL2RybV9wcmltZS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4g PiAgI2luY2x1ZGUgPGRybS9kcm1fcGNpLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5o Pgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2RlYnVnZnMuaD4KPiA+IEBAIC0xNDIsMTYwICsxNDMs MTEgQEAgc3RydWN0IHBjaV9jb250cm9sbGVyOwo+ID4gIC8qQHsqLwo+ID4gIAo+IAo+IEFueSBy ZWFzb24gd2h5IHlvdSBkaWRuJ3QgbW92ZSB0aGUgRFJNX1VUXyogZGVmaW5lcyBhcyB3ZWxsPyBU aGV5J3JlIHNwcmlua2xlZAo+IHRocm91Z2ggYSBjb3VwbGUgZHJpdmVycywgYnV0IGl0J3MgYWxs IHJlbGF0ZWQgdG8gZGVidWcgbWVzc2FnaW5nLgo+IAo+IFNlYW4KPiAKCk5vLCBJIGRpZG4ndCBr bm93IHRoZXkgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGRlYnVnIG1lc3NhZ2luZy4KSSB3 aWxsIGluY2x1ZGUgdGhlbSB0aGVuIGluIGEgcmV2aXNlZCBwYXRjaC4KClRoYW5rIHlvdSwKSGFu ZWVuCgo+ID4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KPiA+IC0vKiogXG5hbWUgTWFjcm9zIHRvIG1ha2Ug cHJpbnRrIGVhc2llciAqLwo+ID4gLS8qQHsqLwo+ID4gLQo+ID4gLSNkZWZpbmUgX0RSTV9QUklO VEsob25jZSwgbGV2ZWwsIGZtdCwgLi4uKQkJCQlcCj4gPiAtCWRvIHsJCQkJCQkJCVwKPiA+IC0J CXByaW50ayMjb25jZShLRVJOXyMjbGV2ZWwgIlsiIERSTV9OQU1FICJdICIgZm10LAlcCj4gPiAt CQkJICAgICAjI19fVkFfQVJHU19fKTsJCQkJXAo+ID4gLQl9IHdoaWxlICgwKQo+ID4gLQo+ID4g LSNkZWZpbmUgRFJNX0lORk8oZm10LCAuLi4pCQkJCQkJXAo+ID4gLQlfRFJNX1BSSU5USygsIElO Rk8sIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+IC0jZGVmaW5lIERSTV9OT1RFKGZtdCwgLi4uKQkJ CQkJCVwKPiA+IC0JX0RSTV9QUklOVEsoLCBOT1RJQ0UsIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+ IC0jZGVmaW5lIERSTV9XQVJOKGZtdCwgLi4uKQkJCQkJCVwKPiA+IC0JX0RSTV9QUklOVEsoLCBX QVJOSU5HLCBmbXQsICMjX19WQV9BUkdTX18pCj4gPiAtCj4gPiAtI2RlZmluZSBEUk1fSU5GT19P TkNFKGZtdCwgLi4uKQkJCQkJCVwKPiA+IC0JX0RSTV9QUklOVEsoX29uY2UsIElORk8sIGZtdCwg IyNfX1ZBX0FSR1NfXykKPiA+IC0jZGVmaW5lIERSTV9OT1RFX09OQ0UoZm10LCAuLi4pCQkJCQkJ XAo+ID4gLQlfRFJNX1BSSU5USyhfb25jZSwgTk9USUNFLCBmbXQsICMjX19WQV9BUkdTX18pCj4g PiAtI2RlZmluZSBEUk1fV0FSTl9PTkNFKGZtdCwgLi4uKQkJCQkJCVwKPiA+IC0JX0RSTV9QUklO VEsoX29uY2UsIFdBUk5JTkcsIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+IC0KPiA+IC0vKioKPiA+ IC0gKiBFcnJvciBvdXRwdXQuCj4gPiAtICoKPiA+IC0gKiBccGFyYW0gZm10IHByaW50ZigpIGxp a2UgZm9ybWF0IHN0cmluZy4KPiA+IC0gKiBccGFyYW0gYXJnIGFyZ3VtZW50cwo+ID4gLSAqLwo+ ID4gLSNkZWZpbmUgRFJNX0RFVl9FUlJPUihkZXYsIGZtdCwgLi4uKQkJCQkJXAo+ID4gLQlkcm1f ZGV2X3ByaW50ayhkZXYsIEtFUk5fRVJSLCBEUk1fVVRfTk9ORSwgX19mdW5jX18sICIgKkVSUk9S KiIsXAo+ID4gLQkJICAgICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+IC0jZGVmaW5lIERSTV9F UlJPUihmbXQsIC4uLikJCQkJCQlcCj4gPiAtCWRybV9wcmludGsoS0VSTl9FUlIsIERSTV9VVF9O T05FLCBmbXQsCSMjX19WQV9BUkdTX18pCj4gPiAtCj4gPiAtLyoqCj4gPiAtICogUmF0ZSBsaW1p dGVkIGVycm9yIG91dHB1dC4gIExpa2UgRFJNX0VSUk9SKCkgYnV0IHdvbid0IGZsb29kIHRoZSBs b2cuCj4gPiAtICoKPiA+IC0gKiBccGFyYW0gZm10IHByaW50ZigpIGxpa2UgZm9ybWF0IHN0cmlu Zy4KPiA+IC0gKiBccGFyYW0gYXJnIGFyZ3VtZW50cwo+ID4gLSAqLwo+ID4gLSNkZWZpbmUgRFJN X0RFVl9FUlJPUl9SQVRFTElNSVRFRChkZXYsIGZtdCwgLi4uKQkJCVwKPiA+IC0oewkJCQkJCQkJ CVwKPiA+IC0Jc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUoX3JzLAkJCQlcCj4gPiAtCQkJ CSAgICAgIERFRkFVTFRfUkFURUxJTUlUX0lOVEVSVkFMLAlcCj4gPiAtCQkJCSAgICAgIERFRkFV TFRfUkFURUxJTUlUX0JVUlNUKTsJCVwKPiA+IC0JCQkJCQkJCQlcCj4gPiAtCWlmIChfX3JhdGVs aW1pdCgmX3JzKSkJCQkJCQlcCj4gPiAtCQlEUk1fREVWX0VSUk9SKGRldiwgZm10LCAjI19fVkFf QVJHU19fKTsJCQlcCj4gPiAtfSkKPiA+IC0jZGVmaW5lIERSTV9FUlJPUl9SQVRFTElNSVRFRChm bXQsIC4uLikJCQkJCVwKPiA+IC0JRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChOVUxMLCBmbXQs ICMjX19WQV9BUkdTX18pCj4gPiAtCj4gPiAtI2RlZmluZSBEUk1fREVWX0lORk8oZGV2LCBmbXQs IC4uLikJCQkJCVwKPiA+IC0JZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0lORk8sIERSTV9VVF9O T05FLCBfX2Z1bmNfXywgIiIsIGZtdCwJXAo+ID4gLQkJICAgICAgICMjX19WQV9BUkdTX18pCj4g PiAtCj4gPiAtI2RlZmluZSBEUk1fREVWX0lORk9fT05DRShkZXYsIGZtdCwgLi4uKQkJCQlcCj4g PiAtKHsJCQkJCQkJCQlcCj4gPiAtCXN0YXRpYyBib29sIF9fcHJpbnRfb25jZSBfX3JlYWRfbW9z dGx5OwkJCQlcCj4gPiAtCWlmICghX19wcmludF9vbmNlKSB7CQkJCQkJXAo+ID4gLQkJX19wcmlu dF9vbmNlID0gdHJ1ZTsJCQkJCVwKPiA+IC0JCURSTV9ERVZfSU5GTyhkZXYsIGZtdCwgIyNfX1ZB X0FSR1NfXyk7CQkJXAo+ID4gLQl9CQkJCQkJCQlcCj4gPiAtfSkKPiA+IC0KPiA+IC0vKioKPiA+ IC0gKiBEZWJ1ZyBvdXRwdXQuCj4gPiAtICoKPiA+IC0gKiBccGFyYW0gZm10IHByaW50ZigpIGxp a2UgZm9ybWF0IHN0cmluZy4KPiA+IC0gKiBccGFyYW0gYXJnIGFyZ3VtZW50cwo+ID4gLSAqLwo+ ID4gLSNkZWZpbmUgRFJNX0RFVl9ERUJVRyhkZXYsIGZtdCwgYXJncy4uLikJCQkJXAo+ID4gLQlk cm1fZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsIERSTV9VVF9DT1JFLCBfX2Z1bmNfXywgIiIs IGZtdCwJXAo+ID4gLQkJICAgICAgICMjYXJncykKPiA+IC0jZGVmaW5lIERSTV9ERUJVRyhmbXQs IC4uLikJCQkJCQlcCj4gPiAtCWRybV9wcmludGsoS0VSTl9ERUJVRywgRFJNX1VUX0NPUkUsIGZt dCwgIyNfX1ZBX0FSR1NfXykKPiA+IC0KPiA+IC0jZGVmaW5lIERSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgZm10LCBhcmdzLi4uKQkJCQlcCj4gPiAtCWRybV9kZXZfcHJpbnRrKGRldiwgS0VSTl9E RUJVRywgRFJNX1VUX0RSSVZFUiwgX19mdW5jX18sICIiLAlcCj4gPiAtCQkgICAgICAgZm10LCAj I2FyZ3MpCj4gPiAtI2RlZmluZSBEUk1fREVCVUdfRFJJVkVSKGZtdCwgLi4uKQkJCQkJXAo+ID4g LQlkcm1fcHJpbnRrKEtFUk5fREVCVUcsIERSTV9VVF9EUklWRVIsIGZtdCwgIyNfX1ZBX0FSR1Nf XykKPiA+IC0KPiA+IC0jZGVmaW5lIERSTV9ERVZfREVCVUdfS01TKGRldiwgZm10LCBhcmdzLi4u KQkJCQlcCj4gPiAtCWRybV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgRFJNX1VUX0tNUywg X19mdW5jX18sICIiLCBmbXQsCVwKPiA+IC0JCSAgICAgICAjI2FyZ3MpCj4gPiAtI2RlZmluZSBE Uk1fREVCVUdfS01TKGZtdCwgLi4uKQkJCQkJXAo+ID4gLQlkcm1fcHJpbnRrKEtFUk5fREVCVUcs IERSTV9VVF9LTVMsIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+IC0KPiA+IC0jZGVmaW5lIERSTV9E RVZfREVCVUdfUFJJTUUoZGV2LCBmbXQsIGFyZ3MuLi4pCQkJCVwKPiA+IC0JZHJtX2Rldl9wcmlu dGsoZGV2LCBLRVJOX0RFQlVHLCBEUk1fVVRfUFJJTUUsIF9fZnVuY19fLCAiIiwJXAo+ID4gLQkJ ICAgICAgIGZtdCwgIyNhcmdzKQo+ID4gLSNkZWZpbmUgRFJNX0RFQlVHX1BSSU1FKGZtdCwgLi4u KQkJCQkJXAo+ID4gLQlkcm1fcHJpbnRrKEtFUk5fREVCVUcsIERSTV9VVF9QUklNRSwgZm10LCAj I19fVkFfQVJHU19fKQo+ID4gLQo+ID4gLSNkZWZpbmUgRFJNX0RFVl9ERUJVR19BVE9NSUMoZGV2 LCBmbXQsIGFyZ3MuLi4pCQkJCVwKPiA+IC0JZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVH LCBEUk1fVVRfQVRPTUlDLCBfX2Z1bmNfXywgIiIsCVwKPiA+IC0JCSAgICAgICBmbXQsICMjYXJn cykKPiA+IC0jZGVmaW5lIERSTV9ERUJVR19BVE9NSUMoZm10LCAuLi4pCQkJCQlcCj4gPiAtCWRy bV9wcmludGsoS0VSTl9ERUJVRywgRFJNX1VUX0FUT01JQywgZm10LCAjI19fVkFfQVJHU19fKQo+ ID4gLQo+ID4gLSNkZWZpbmUgRFJNX0RFVl9ERUJVR19WQkwoZGV2LCBmbXQsIGFyZ3MuLi4pCQkJ CVwKPiA+IC0JZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCBEUk1fVVRfVkJMLCBfX2Z1 bmNfXywgIiIsIGZtdCwJXAo+ID4gLQkJICAgICAgICMjYXJncykKPiA+IC0jZGVmaW5lIERSTV9E RUJVR19WQkwoZm10LCAuLi4pCQkJCQlcCj4gPiAtCWRybV9wcmludGsoS0VSTl9ERUJVRywgRFJN X1VUX1ZCTCwgZm10LCAjI19fVkFfQVJHU19fKQo+ID4gLQo+ID4gLSNkZWZpbmUgX0RSTV9ERVZf REVGSU5FX0RFQlVHX1JBVEVMSU1JVEVEKGRldiwgbGV2ZWwsIGZtdCwgYXJncy4uLikJXAo+ID4g LSh7CQkJCQkJCQkJXAo+ID4gLQlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShfcnMsCQkJ CVwKPiA+IC0JCQkJICAgICAgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsCVwKPiA+IC0JCQkJ ICAgICAgREVGQVVMVF9SQVRFTElNSVRfQlVSU1QpOwkJXAo+ID4gLQlpZiAoX19yYXRlbGltaXQo Jl9ycykpCQkJCQkJXAo+ID4gLQkJZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCBEUk1f VVRfICMjIGxldmVsLAlcCj4gPiAtCQkJICAgICAgIF9fZnVuY19fLCAiIiwgZm10LCAjI2FyZ3Mp OwkJXAo+ID4gLX0pCj4gPiAtCj4gPiAtLyoqCj4gPiAtICogUmF0ZSBsaW1pdGVkIGRlYnVnIG91 dHB1dC4gTGlrZSBEUk1fREVCVUcoKSBidXQgd29uJ3QgZmxvb2QgdGhlIGxvZy4KPiA+IC0gKgo+ ID4gLSAqIFxwYXJhbSBmbXQgcHJpbnRmKCkgbGlrZSBmb3JtYXQgc3RyaW5nLgo+ID4gLSAqIFxw YXJhbSBhcmcgYXJndW1lbnRzCj4gPiAtICovCj4gPiAtI2RlZmluZSBEUk1fREVWX0RFQlVHX1JB VEVMSU1JVEVEKGRldiwgZm10LCBhcmdzLi4uKQkJCVwKPiA+IC0JREVWX19EUk1fREVGSU5FX0RF QlVHX1JBVEVMSU1JVEVEKGRldiwgQ09SRSwgZm10LCAjI2FyZ3MpCj4gPiAtI2RlZmluZSBEUk1f REVCVUdfUkFURUxJTUlURUQoZm10LCBhcmdzLi4uKQkJCQlcCj4gPiAtCURSTV9ERVZfREVCVUdf UkFURUxJTUlURUQoTlVMTCwgZm10LCAjI2FyZ3MpCj4gPiAtI2RlZmluZSBEUk1fREVWX0RFQlVH X0RSSVZFUl9SQVRFTElNSVRFRChkZXYsIGZtdCwgYXJncy4uLikJCVwKPiA+IC0JX0RSTV9ERVZf REVGSU5FX0RFQlVHX1JBVEVMSU1JVEVEKGRldiwgRFJJVkVSLCBmbXQsICMjYXJncykKPiA+IC0j ZGVmaW5lIERSTV9ERUJVR19EUklWRVJfUkFURUxJTUlURUQoZm10LCBhcmdzLi4uKQkJCVwKPiA+ IC0JRFJNX0RFVl9ERUJVR19EUklWRVJfUkFURUxJTUlURUQoTlVMTCwgZm10LCAjI2FyZ3MpCj4g PiAtI2RlZmluZSBEUk1fREVWX0RFQlVHX0tNU19SQVRFTElNSVRFRChkZXYsIGZtdCwgYXJncy4u LikJCVwKPiA+IC0JX0RSTV9ERVZfREVGSU5FX0RFQlVHX1JBVEVMSU1JVEVEKGRldiwgS01TLCBm bXQsICMjYXJncykKPiA+IC0jZGVmaW5lIERSTV9ERUJVR19LTVNfUkFURUxJTUlURUQoZm10LCBh cmdzLi4uKQkJCQlcCj4gPiAtCURSTV9ERVZfREVCVUdfS01TX1JBVEVMSU1JVEVEKE5VTEwsIGZt dCwgIyNhcmdzKQo+ID4gLSNkZWZpbmUgRFJNX0RFVl9ERUJVR19QUklNRV9SQVRFTElNSVRFRChk ZXYsIGZtdCwgYXJncy4uLikJCVwKPiA+IC0JX0RSTV9ERVZfREVGSU5FX0RFQlVHX1JBVEVMSU1J VEVEKGRldiwgUFJJTUUsIGZtdCwgIyNhcmdzKQo+ID4gLSNkZWZpbmUgRFJNX0RFQlVHX1BSSU1F X1JBVEVMSU1JVEVEKGZtdCwgYXJncy4uLikJCQlcCj4gPiAtCURSTV9ERVZfREVCVUdfUFJJTUVf UkFURUxJTUlURUQoTlVMTCwgZm10LCAjI2FyZ3MpCj4gPiAtCj4gPiAtLyogRm9ybWF0IHN0cmlu Z3MgYW5kIGFyZ3VtZW50IHNwbGl0dGVycyB0byBzaW1wbGlmeSBwcmludGluZwo+ID4gLSAqIHZh cmlvdXMgImNvbXBsZXgiIG9iamVjdHMKPiA+IC0gKi8KPiA+IC0KPiA+IC0vKkB9Ki8KPiA+IC0K PiA+IC0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCj4gPiAgLyoqIFxuYW1lIEludGVybmFsIHR5cGVzIGFuZCBz dHJ1Y3R1cmVzICovCj4gPiAgLypAeyovCj4gPiAgCj4gPiAgI2RlZmluZSBEUk1fSUZfVkVSU0lP TihtYWosIG1pbikgKG1haiA8PCAxNiB8IG1pbikKPiA+ICAKPiA+IC0KPiA+ICAvKioKPiA+ICAg KiBkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVzZXQgLSBjaGVjayBpZiB0aGUgZHJpdmVyIGltcGxl bWVudHMKPiA+ICAgKiBhdG9taWNfY29tbWl0KCkKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS9kcm1fZHJ2LmggYi9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiA+IGluZGV4IDcxYmJhYWUuLjRm M2NjMjUgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fZHJ2LmgKPiA+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9kcnYuaAo+ID4gQEAgLTU5MiwxMyArNTkyLDYgQEAgc3RydWN0IGRybV9k cml2ZXIgewo+ID4gIAlpbnQgZGV2X3ByaXZfc2l6ZTsKPiA+ICB9Owo+ID4gIAo+ID4gLV9fcHJp bnRmKDYsIDcpCj4gPiAtdm9pZCBkcm1fZGV2X3ByaW50ayhjb25zdCBzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IGNoYXIgKmxldmVsLAo+ID4gLQkJICAgIHVuc2lnbmVkIGludCBjYXRlZ29yeSwg Y29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSwKPiA+IC0JCSAgICBjb25zdCBjaGFyICpwcmVmaXgs IGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKPiA+IC1fX3ByaW50ZigzLCA0KQo+ID4gLXZvaWQg ZHJtX3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgdW5zaWduZWQgaW50IGNhdGVnb3J5LAo+ID4g LQkJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwo+ID4gIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJt X2RlYnVnOwo+ID4gIAo+ID4gIGludCBkcm1fZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcHJpbnQuaCBiL2luY2x1ZGUvZHJt L2RybV9wcmludC5oCj4gPiBpbmRleCBjYTRkN2M2Li45ZGFjYzVlIDEwMDY0NAo+ID4gLS0tIGEv aW5jbHVkZS9kcm0vZHJtX3ByaW50LmgKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9wcmludC5o Cj4gPiBAQCAtMTI4LDQgKzEyOCwxNjAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX3ByaW50 ZXIgZHJtX2RlYnVnX3ByaW50ZXIoY29uc3QgY2hhciAqcHJlZml4KQo+ID4gIAl9Owo+ID4gIAly ZXR1cm4gcDsKPiA+ICB9Cj4gPiArCj4gPiArX19wcmludGYoNiwgNykKPiA+ICt2b2lkIGRybV9k ZXZfcHJpbnRrKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbGV2ZWwsCj4g PiArCQkgICAgdW5zaWduZWQgaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1l LAo+ID4gKwkJICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p Owo+ID4gK19fcHJpbnRmKDMsIDQpCj4gPiArdm9pZCBkcm1fcHJpbnRrKGNvbnN0IGNoYXIgKmxl dmVsLCB1bnNpZ25lZCBpbnQgY2F0ZWdvcnksCj4gPiArCQljb25zdCBjaGFyICpmb3JtYXQsIC4u Lik7Cj4gPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwo+ID4gKy8qKiBcbmFtZSBNYWNyb3MgdG8gbWFrZSBw cmludGsgZWFzaWVyICovCj4gPiArLypAeyovCj4gPiArCj4gPiArI2RlZmluZSBfRFJNX1BSSU5U SyhvbmNlLCBsZXZlbCwgZm10LCAuLi4pCQkJCVwKPiA+ICsJZG8gewkJCQkJCQkJXAo+ID4gKwkJ cHJpbnRrIyNvbmNlKEtFUk5fIyNsZXZlbCAiWyIgRFJNX05BTUUgIl0gIiBmbXQsCVwKPiA+ICsJ CQkgICAgICMjX19WQV9BUkdTX18pOwkJCQlcCj4gPiArCX0gd2hpbGUgKDApCj4gPiArCj4gPiAr I2RlZmluZSBEUk1fSU5GTyhmbXQsIC4uLikJCQkJCQlcCj4gPiArCV9EUk1fUFJJTlRLKCwgSU5G TywgZm10LCAjI19fVkFfQVJHU19fKQo+ID4gKyNkZWZpbmUgRFJNX05PVEUoZm10LCAuLi4pCQkJ CQkJXAo+ID4gKwlfRFJNX1BSSU5USygsIE5PVElDRSwgZm10LCAjI19fVkFfQVJHU19fKQo+ID4g KyNkZWZpbmUgRFJNX1dBUk4oZm10LCAuLi4pCQkJCQkJXAo+ID4gKwlfRFJNX1BSSU5USygsIFdB Uk5JTkcsIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9JTkZPX09O Q0UoZm10LCAuLi4pCQkJCQkJXAo+ID4gKwlfRFJNX1BSSU5USyhfb25jZSwgSU5GTywgZm10LCAj I19fVkFfQVJHU19fKQo+ID4gKyNkZWZpbmUgRFJNX05PVEVfT05DRShmbXQsIC4uLikJCQkJCQlc Cj4gPiArCV9EUk1fUFJJTlRLKF9vbmNlLCBOT1RJQ0UsIGZtdCwgIyNfX1ZBX0FSR1NfXykKPiA+ ICsjZGVmaW5lIERSTV9XQVJOX09OQ0UoZm10LCAuLi4pCQkJCQkJXAo+ID4gKwlfRFJNX1BSSU5U Syhfb25jZSwgV0FSTklORywgZm10LCAjI19fVkFfQVJHU19fKQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIEVycm9yIG91dHB1dC4KPiA+ICsgKgo+ID4gKyAqIFxwYXJhbSBmbXQgcHJpbnRmKCkgbGlr ZSBmb3JtYXQgc3RyaW5nLgo+ID4gKyAqIFxwYXJhbSBhcmcgYXJndW1lbnRzCj4gPiArICovCj4g PiArI2RlZmluZSBEUk1fREVWX0VSUk9SKGRldiwgZm10LCAuLi4pCQkJCQlcCj4gPiArCWRybV9k ZXZfcHJpbnRrKGRldiwgS0VSTl9FUlIsIERSTV9VVF9OT05FLCBfX2Z1bmNfXywgIiAqRVJST1Iq IixcCj4gPiArCQkgICAgICAgZm10LCAjI19fVkFfQVJHU19fKQo+ID4gKyNkZWZpbmUgRFJNX0VS Uk9SKGZtdCwgLi4uKQkJCQkJCVwKPiA+ICsJZHJtX3ByaW50ayhLRVJOX0VSUiwgRFJNX1VUX05P TkUsIGZtdCwJIyNfX1ZBX0FSR1NfXykKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBSYXRlIGxpbWl0 ZWQgZXJyb3Igb3V0cHV0LiAgTGlrZSBEUk1fRVJST1IoKSBidXQgd29uJ3QgZmxvb2QgdGhlIGxv Zy4KPiA+ICsgKgo+ID4gKyAqIFxwYXJhbSBmbXQgcHJpbnRmKCkgbGlrZSBmb3JtYXQgc3RyaW5n Lgo+ID4gKyAqIFxwYXJhbSBhcmcgYXJndW1lbnRzCj4gPiArICovCj4gPiArI2RlZmluZSBEUk1f REVWX0VSUk9SX1JBVEVMSU1JVEVEKGRldiwgZm10LCAuLi4pCQkJXAo+ID4gKyh7CQkJCQkJCQkJ XAo+ID4gKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShfcnMsCQkJCVwKPiA+ICsJCQkJ ICAgICAgREVGQVVMVF9SQVRFTElNSVRfSU5URVJWQUwsCVwKPiA+ICsJCQkJICAgICAgREVGQVVM VF9SQVRFTElNSVRfQlVSU1QpOwkJXAo+ID4gKwkJCQkJCQkJCVwKPiA+ICsJaWYgKF9fcmF0ZWxp bWl0KCZfcnMpKQkJCQkJCVwKPiA+ICsJCURSTV9ERVZfRVJST1IoZGV2LCBmbXQsICMjX19WQV9B UkdTX18pOwkJCVwKPiA+ICt9KQo+ID4gKyNkZWZpbmUgRFJNX0VSUk9SX1JBVEVMSU1JVEVEKGZt dCwgLi4uKQkJCQkJXAo+ID4gKwlEUk1fREVWX0VSUk9SX1JBVEVMSU1JVEVEKE5VTEwsIGZtdCwg IyNfX1ZBX0FSR1NfXykKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9ERVZfSU5GTyhkZXYsIGZtdCwg Li4uKQkJCQkJXAo+ID4gKwlkcm1fZGV2X3ByaW50ayhkZXYsIEtFUk5fSU5GTywgRFJNX1VUX05P TkUsIF9fZnVuY19fLCAiIiwgZm10LAlcCj4gPiArCQkgICAgICAgIyNfX1ZBX0FSR1NfXykKPiA+ ICsKPiA+ICsjZGVmaW5lIERSTV9ERVZfSU5GT19PTkNFKGRldiwgZm10LCAuLi4pCQkJCVwKPiA+ ICsoewkJCQkJCQkJCVwKPiA+ICsJc3RhdGljIGJvb2wgX19wcmludF9vbmNlIF9fcmVhZF9tb3N0 bHk7CQkJCVwKPiA+ICsJaWYgKCFfX3ByaW50X29uY2UpIHsJCQkJCQlcCj4gPiArCQlfX3ByaW50 X29uY2UgPSB0cnVlOwkJCQkJXAo+ID4gKwkJRFJNX0RFVl9JTkZPKGRldiwgZm10LCAjI19fVkFf QVJHU19fKTsJCQlcCj4gPiArCX0JCQkJCQkJCVwKPiA+ICt9KQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIERlYnVnIG91dHB1dC4KPiA+ICsgKgo+ID4gKyAqIFxwYXJhbSBmbXQgcHJpbnRmKCkgbGlr ZSBmb3JtYXQgc3RyaW5nLgo+ID4gKyAqIFxwYXJhbSBhcmcgYXJndW1lbnRzCj4gPiArICovCj4g PiArI2RlZmluZSBEUk1fREVWX0RFQlVHKGRldiwgZm10LCBhcmdzLi4uKQkJCQlcCj4gPiArCWRy bV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgRFJNX1VUX0NPUkUsIF9fZnVuY19fLCAiIiwg Zm10LAlcCj4gPiArCQkgICAgICAgIyNhcmdzKQo+ID4gKyNkZWZpbmUgRFJNX0RFQlVHKGZtdCwg Li4uKQkJCQkJCVwKPiA+ICsJZHJtX3ByaW50ayhLRVJOX0RFQlVHLCBEUk1fVVRfQ09SRSwgZm10 LCAjI19fVkFfQVJHU19fKQo+ID4gKwo+ID4gKyNkZWZpbmUgRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCBmbXQsIGFyZ3MuLi4pCQkJCVwKPiA+ICsJZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0RF QlVHLCBEUk1fVVRfRFJJVkVSLCBfX2Z1bmNfXywgIiIsCVwKPiA+ICsJCSAgICAgICBmbXQsICMj YXJncykKPiA+ICsjZGVmaW5lIERSTV9ERUJVR19EUklWRVIoZm10LCAuLi4pCQkJCQlcCj4gPiAr CWRybV9wcmludGsoS0VSTl9ERUJVRywgRFJNX1VUX0RSSVZFUiwgZm10LCAjI19fVkFfQVJHU19f KQo+ID4gKwo+ID4gKyNkZWZpbmUgRFJNX0RFVl9ERUJVR19LTVMoZGV2LCBmbXQsIGFyZ3MuLi4p CQkJCVwKPiA+ICsJZHJtX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCBEUk1fVVRfS01TLCBf X2Z1bmNfXywgIiIsIGZtdCwJXAo+ID4gKwkJICAgICAgICMjYXJncykKPiA+ICsjZGVmaW5lIERS TV9ERUJVR19LTVMoZm10LCAuLi4pCQkJCQlcCj4gPiArCWRybV9wcmludGsoS0VSTl9ERUJVRywg RFJNX1VUX0tNUywgZm10LCAjI19fVkFfQVJHU19fKQo+ID4gKwo+ID4gKyNkZWZpbmUgRFJNX0RF Vl9ERUJVR19QUklNRShkZXYsIGZtdCwgYXJncy4uLikJCQkJXAo+ID4gKwlkcm1fZGV2X3ByaW50 ayhkZXYsIEtFUk5fREVCVUcsIERSTV9VVF9QUklNRSwgX19mdW5jX18sICIiLAlcCj4gPiArCQkg ICAgICAgZm10LCAjI2FyZ3MpCj4gPiArI2RlZmluZSBEUk1fREVCVUdfUFJJTUUoZm10LCAuLi4p CQkJCQlcCj4gPiArCWRybV9wcmludGsoS0VSTl9ERUJVRywgRFJNX1VUX1BSSU1FLCBmbXQsICMj X19WQV9BUkdTX18pCj4gPiArCj4gPiArI2RlZmluZSBEUk1fREVWX0RFQlVHX0FUT01JQyhkZXYs IGZtdCwgYXJncy4uLikJCQkJXAo+ID4gKwlkcm1fZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcs IERSTV9VVF9BVE9NSUMsIF9fZnVuY19fLCAiIiwJXAo+ID4gKwkJICAgICAgIGZtdCwgIyNhcmdz KQo+ID4gKyNkZWZpbmUgRFJNX0RFQlVHX0FUT01JQyhmbXQsIC4uLikJCQkJCVwKPiA+ICsJZHJt X3ByaW50ayhLRVJOX0RFQlVHLCBEUk1fVVRfQVRPTUlDLCBmbXQsICMjX19WQV9BUkdTX18pCj4g PiArCj4gPiArI2RlZmluZSBEUk1fREVWX0RFQlVHX1ZCTChkZXYsIGZtdCwgYXJncy4uLikJCQkJ XAo+ID4gKwlkcm1fZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsIERSTV9VVF9WQkwsIF9fZnVu Y19fLCAiIiwgZm10LAlcCj4gPiArCQkgICAgICAgIyNhcmdzKQo+ID4gKyNkZWZpbmUgRFJNX0RF QlVHX1ZCTChmbXQsIC4uLikJCQkJCVwKPiA+ICsJZHJtX3ByaW50ayhLRVJOX0RFQlVHLCBEUk1f VVRfVkJMLCBmbXQsICMjX19WQV9BUkdTX18pCj4gPiArCj4gPiArI2RlZmluZSBfRFJNX0RFVl9E RUZJTkVfREVCVUdfUkFURUxJTUlURUQoZGV2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQlcCj4gPiAr KHsJCQkJCQkJCQlcCj4gPiArCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKF9ycywJCQkJ XAo+ID4gKwkJCQkgICAgICBERUZBVUxUX1JBVEVMSU1JVF9JTlRFUlZBTCwJXAo+ID4gKwkJCQkg ICAgICBERUZBVUxUX1JBVEVMSU1JVF9CVVJTVCk7CQlcCj4gPiArCWlmIChfX3JhdGVsaW1pdCgm X3JzKSkJCQkJCQlcCj4gPiArCQlkcm1fZGV2X3ByaW50ayhkZXYsIEtFUk5fREVCVUcsIERSTV9V VF8gIyMgbGV2ZWwsCVwKPiA+ICsJCQkgICAgICAgX19mdW5jX18sICIiLCBmbXQsICMjYXJncyk7 CQlcCj4gPiArfSkKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBSYXRlIGxpbWl0ZWQgZGVidWcgb3V0 cHV0LiBMaWtlIERSTV9ERUJVRygpIGJ1dCB3b24ndCBmbG9vZCB0aGUgbG9nLgo+ID4gKyAqCj4g PiArICogXHBhcmFtIGZtdCBwcmludGYoKSBsaWtlIGZvcm1hdCBzdHJpbmcuCj4gPiArICogXHBh cmFtIGFyZyBhcmd1bWVudHMKPiA+ICsgKi8KPiA+ICsjZGVmaW5lIERSTV9ERVZfREVCVUdfUkFU RUxJTUlURUQoZGV2LCBmbXQsIGFyZ3MuLi4pCQkJXAo+ID4gKwlERVZfX0RSTV9ERUZJTkVfREVC VUdfUkFURUxJTUlURUQoZGV2LCBDT1JFLCBmbXQsICMjYXJncykKPiA+ICsjZGVmaW5lIERSTV9E RUJVR19SQVRFTElNSVRFRChmbXQsIGFyZ3MuLi4pCQkJCVwKPiA+ICsJRFJNX0RFVl9ERUJVR19S QVRFTElNSVRFRChOVUxMLCBmbXQsICMjYXJncykKPiA+ICsjZGVmaW5lIERSTV9ERVZfREVCVUdf RFJJVkVSX1JBVEVMSU1JVEVEKGRldiwgZm10LCBhcmdzLi4uKQkJXAo+ID4gKwlfRFJNX0RFVl9E RUZJTkVfREVCVUdfUkFURUxJTUlURUQoZGV2LCBEUklWRVIsIGZtdCwgIyNhcmdzKQo+ID4gKyNk ZWZpbmUgRFJNX0RFQlVHX0RSSVZFUl9SQVRFTElNSVRFRChmbXQsIGFyZ3MuLi4pCQkJXAo+ID4g KwlEUk1fREVWX0RFQlVHX0RSSVZFUl9SQVRFTElNSVRFRChOVUxMLCBmbXQsICMjYXJncykKPiA+ ICsjZGVmaW5lIERSTV9ERVZfREVCVUdfS01TX1JBVEVMSU1JVEVEKGRldiwgZm10LCBhcmdzLi4u KQkJXAo+ID4gKwlfRFJNX0RFVl9ERUZJTkVfREVCVUdfUkFURUxJTUlURUQoZGV2LCBLTVMsIGZt dCwgIyNhcmdzKQo+ID4gKyNkZWZpbmUgRFJNX0RFQlVHX0tNU19SQVRFTElNSVRFRChmbXQsIGFy Z3MuLi4pCQkJCVwKPiA+ICsJRFJNX0RFVl9ERUJVR19LTVNfUkFURUxJTUlURUQoTlVMTCwgZm10 LCAjI2FyZ3MpCj4gPiArI2RlZmluZSBEUk1fREVWX0RFQlVHX1BSSU1FX1JBVEVMSU1JVEVEKGRl diwgZm10LCBhcmdzLi4uKQkJXAo+ID4gKwlfRFJNX0RFVl9ERUZJTkVfREVCVUdfUkFURUxJTUlU RUQoZGV2LCBQUklNRSwgZm10LCAjI2FyZ3MpCj4gPiArI2RlZmluZSBEUk1fREVCVUdfUFJJTUVf UkFURUxJTUlURUQoZm10LCBhcmdzLi4uKQkJCVwKPiA+ICsJRFJNX0RFVl9ERUJVR19QUklNRV9S QVRFTElNSVRFRChOVUxMLCBmbXQsICMjYXJncykKPiA+ICsKPiA+ICsvKiBGb3JtYXQgc3RyaW5n cyBhbmQgYXJndW1lbnQgc3BsaXR0ZXJzIHRvIHNpbXBsaWZ5IHByaW50aW5nCj4gPiArICogdmFy aW91cyAiY29tcGxleCIgb2JqZWN0cwo+ID4gKyAqLwo+ID4gKwo+ID4gKy8qQH0qLwo+ID4gKwo+ ID4gICNlbmRpZiAvKiBEUk1fUFJJTlRfSF8gKi8KPiA+IC0tIAo+ID4gMi43LjQKPiA+IAo+IAo+ IC0tIAo+IFNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9T Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=