From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753016Ab0KRGkX (ORCPT ); Thu, 18 Nov 2010 01:40:23 -0500 Received: from mail-fx0-f46.google.com ([209.85.161.46]:46261 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751808Ab0KRGkV (ORCPT ); Thu, 18 Nov 2010 01:40:21 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:cc:content-type:content-transfer-encoding; b=FkQ58FFQIAvWMXkYL8M8ovAI4dWrz9+m5BOk3TNRBSXz8y39VfIepX0CCvVZ+oEcCb RSU8pxIEVmANMOxAURF9JKHQ0Dg3z7PADBM1MVl3C93oW21npRfh9+ahJWgYYy8KS7it iaC825rv/y17YJXanNapn/ZQSnINZA1vsIn4s= MIME-Version: 1.0 Date: Thu, 18 Nov 2010 07:40:19 +0100 X-Google-Sender-Auth: VGQuZbyjb9xjHU-GyK1stSPMP3E Message-ID: Subject: abs() vs. abs64() (was: Re: [PATCH] fbdev: fix nearest mode search) From: Geert Uytterhoeven To: michalj@gmail.com, Rolf Eike Beer , Andrew Morton Cc: linux-kernel@vger.kernel.org, Linux Fbdev development list Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id oAI6ejk6008722 [Don't use the obsolete linux-fbdev-devel address] On Thu, Nov 18, 2010 at 00:08, Michal Januszewski wrote: > In the framebuffer subsystem the abs() macro is often used as a part of > the calculation of a Manhattan metric, which in turn is used as a measure > of similarity between video modes.  The arguments of abs() are sometimes > unsigned numbers.  This worked fine until commit a49c59c0, which changed > the definition of abs() to prevent truncation.  As a result of this > change, in the following piece of code: > >  u32 a = 0, b = 1; >  u32 c = abs(a - b); Indeed, the difference of 2 numbers is unsigned, as per C. > 'c' will end up with a value of 0xffffffff instead of the expected 0x1. This happens on 64-bit only, right? Anyway, I think commit a49c59c0 is wrong: abs() operates on signed (32-bit) numbers. For larger (64-bit signed) numbers, we have abs64(). > A problem caused by this change and visible by the end user is that > framebuffer drivers relying on functions from modedb.c will fail to > find high resolution video modes similar to that explicitly requested > by the user if an exact match cannot be found (see e.g. > https://bugs.gentoo.org/show_bug.cgi?id=296539). > > Fix this problem by casting all arguments of abs() to an int prior > to the macro evaluation in modedb.c and uvesafb.c. > > Signed-off-by: Michal Januszewski > --- > diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c > index 0a4dbdc..878bea1 100644 > --- a/drivers/video/modedb.c > +++ b/drivers/video/modedb.c > @@ -636,8 +636,10 @@ done: >                        if (refresh_specified && db[i].refresh == refresh) { >                                return 1; >                        } else { > -                               if (abs(db[i].refresh - refresh) < diff) { > -                                       diff = abs(db[i].refresh - refresh); > +                               if (abs((int)(db[i].refresh - refresh)) < > +                                   diff) { > +                                       diff = abs((int)(db[i].refresh - > +                                               refresh)); >                                        best = i; >                                } >                        } > @@ -654,8 +656,8 @@ done: >        for (i = 0; i < dbsize; i++) { >                DPRINTK("Trying %ix%i\n", db[i].xres, db[i].yres); >                if (!fb_try_mode(var, info, &db[i], bpp)) { > -                       tdiff = abs(db[i].xres - xres) + > -                               abs(db[i].yres - yres); > +                       tdiff = abs((int)(db[i].xres - xres)) + > +                               abs((int)(db[i].yres - yres)); > >                        /* >                         * Penalize modes with resolutions smaller > @@ -851,13 +853,13 @@ const struct fb_videomode *fb_find_nearest_mode(const struct fb_videomode *mode, >                modelist = list_entry(pos, struct fb_modelist, list); >                cmode = &modelist->mode; > > -               d = abs(cmode->xres - mode->xres) + > -                       abs(cmode->yres - mode->yres); > +               d = abs((int)(cmode->xres - mode->xres)) + > +                       abs((int)(cmode->yres - mode->yres)); >                if (diff > d) { >                        diff = d; >                        best = cmode; >                } else if (diff == d) { > -                       d = abs(cmode->refresh - mode->refresh); > +                       d = abs((int)(cmode->refresh - mode->refresh)); >                        if (diff_refresh > d) { >                                diff_refresh = d; >                                best = cmode; > diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c > index 7b8839e..6621427 100644 > --- a/drivers/video/uvesafb.c > +++ b/drivers/video/uvesafb.c > @@ -320,9 +320,9 @@ static int uvesafb_vbe_find_mode(struct uvesafb_par *par, >        int i, match = -1, h = 0, d = 0x7fffffff; > >        for (i = 0; i < par->vbe_modes_cnt; i++) { > -               h = abs(par->vbe_modes[i].x_res - xres) + > -                   abs(par->vbe_modes[i].y_res - yres) + > -                   abs(depth - par->vbe_modes[i].depth); > +               h = abs((int)(par->vbe_modes[i].x_res - xres)) + > +                   abs((int)(par->vbe_modes[i].y_res - yres)) + > +                   abs((int)(depth - par->vbe_modes[i].depth)); > >                /* >                 * We have an exact match in terms of resolution > @@ -1375,7 +1375,7 @@ static int uvesafb_check_var(struct fb_var_screeninfo *var, >         * which is theoretically incorrect, but which we'll try to handle >         * here. >         */ > -       if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8) > +       if (depth == 0 || abs((int)(depth - var->bits_per_pixel)) >= 8) >                depth = var->bits_per_pixel; > >        match = uvesafb_vbe_find_mode(par, var->xres, var->yres, depth, Gr{oetje,eeting}s,                         Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.                                 -- Linus Torvalds {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I From mboxrd@z Thu Jan 1 00:00:00 1970 From: Geert Uytterhoeven Date: Thu, 18 Nov 2010 06:40:19 +0000 Subject: abs() vs. abs64() (was: Re: [PATCH] fbdev: fix nearest mode search) Message-Id: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1253" Content-Transfer-Encoding: base64 To: michalj@gmail.com, Rolf Eike Beer , Andrew Morton Cc: linux-kernel@vger.kernel.org, Linux Fbdev development list W0Rvbid0IHVzZSB0aGUgb2Jzb2xldGUgbGludXgtZmJkZXYtZGV2ZWwgYWRkcmVzc10KCk9uIFRo dSwgTm92IDE4LCAyMDEwIGF0IDAwOjA4LCBNaWNoYWwgSmFudXN6ZXdza2kgPG1pY2hhbGpAZ21h aWwuY29tPiB3cm90ZToKPiBJbiB0aGUgZnJhbWVidWZmZXIgc3Vic3lzdGVtIHRoZSBhYnMoKSBt YWNybyBpcyBvZnRlbiB1c2VkIGFzIGEgcGFydCBvZgo+IHRoZSBjYWxjdWxhdGlvbiBvZiBhIE1h bmhhdHRhbiBtZXRyaWMsIHdoaWNoIGluIHR1cm4gaXMgdXNlZCBhcyBhIG1lYXN1cmUKPiBvZiBz aW1pbGFyaXR5IGJldHdlZW4gdmlkZW8gbW9kZXMuIMKgVGhlIGFyZ3VtZW50cyBvZiBhYnMoKSBh cmUgc29tZXRpbWVzCj4gdW5zaWduZWQgbnVtYmVycy4gwqBUaGlzIHdvcmtlZCBmaW5lIHVudGls IGNvbW1pdCBhNDljNTljMCwgd2hpY2ggY2hhbmdlZAo+IHRoZSBkZWZpbml0aW9uIG9mIGFicygp IHRvIHByZXZlbnQgdHJ1bmNhdGlvbi4gwqBBcyBhIHJlc3VsdCBvZiB0aGlzCj4gY2hhbmdlLCBp biB0aGUgZm9sbG93aW5nIHBpZWNlIG9mIGNvZGU6Cj4KPiDCoHUzMiBhID0gMCwgYiA9IDE7Cj4g wqB1MzIgYyA9IGFicyhhIC0gYik7CgpJbmRlZWQsIHRoZSBkaWZmZXJlbmNlIG9mIDIgbnVtYmVy cyBpcyB1bnNpZ25lZCwgYXMgcGVyIEMuCgo+ICdjJyB3aWxsIGVuZCB1cCB3aXRoIGEgdmFsdWUg b2YgMHhmZmZmZmZmZiBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCAweDEuCgpUaGlzIGhhcHBlbnMg b24gNjQtYml0IG9ubHksIHJpZ2h0PwoKQW55d2F5LCBJIHRoaW5rIGNvbW1pdCBhNDljNTljMCBp cyB3cm9uZzogYWJzKCkgb3BlcmF0ZXMgb24gc2lnbmVkCigzMi1iaXQpIG51bWJlcnMuIEZvciBs YXJnZXIgKDY0LWJpdCBzaWduZWQpIG51bWJlcnMsIHdlIGhhdmUgYWJzNjQoKS4KCj4gQSBwcm9i bGVtIGNhdXNlZCBieSB0aGlzIGNoYW5nZSBhbmQgdmlzaWJsZSBieSB0aGUgZW5kIHVzZXIgaXMg dGhhdAo+IGZyYW1lYnVmZmVyIGRyaXZlcnMgcmVseWluZyBvbiBmdW5jdGlvbnMgZnJvbSBtb2Rl ZGIuYyB3aWxsIGZhaWwgdG8KPiBmaW5kIGhpZ2ggcmVzb2x1dGlvbiB2aWRlbyBtb2RlcyBzaW1p bGFyIHRvIHRoYXQgZXhwbGljaXRseSByZXF1ZXN0ZWQKPiBieSB0aGUgdXNlciBpZiBhbiBleGFj dCBtYXRjaCBjYW5ub3QgYmUgZm91bmQgKHNlZSBlLmcuCj4gaHR0cHM6Ly9idWdzLmdlbnRvby5v cmcvc2hvd19idWcuY2dpP2lkKTY1MzkpLgo+Cj4gRml4IHRoaXMgcHJvYmxlbSBieSBjYXN0aW5n IGFsbCBhcmd1bWVudHMgb2YgYWJzKCkgdG8gYW4gaW50IHByaW9yCj4gdG8gdGhlIG1hY3JvIGV2 YWx1YXRpb24gaW4gbW9kZWRiLmMgYW5kIHV2ZXNhZmIuYy4KPgo+IFNpZ25lZC1vZmYtYnk6IE1p Y2hhbCBKYW51c3pld3NraSA8bWljaGFsakBnbWFpbC5jb20+Cj4gLS0tCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCj4gaW5kZXgg MGE0ZGJkYy4uODc4YmVhMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCj4g KysrIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwo+IEBAIC02MzYsOCArNjM2LDEwIEBAIGRvbmU6 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAocmVmcmVzaF9zcGVjaWZp ZWQgJiYgZGJbaV0ucmVmcmVzaCA9IHJlZnJlc2gpIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiAxOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgfSBlbHNlIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmIChhYnMoZGJbaV0ucmVmcmVzaCAtIHJlZnJlc2gpIDwgZGlmZikg ewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgZGlmZiA9IGFicyhkYltpXS5yZWZyZXNoIC0gcmVmcmVzaCk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoYWJzKChpbnQpKGRiW2ldLnJl ZnJlc2ggLSByZWZyZXNoKSkgPAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgZGlmZikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGlmZiA9IGFicygoaW50KShkYltpXS5yZWZy ZXNoIC0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2gpKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJlc3QgPSBpOwo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IEBAIC02NTQsOCArNjU2LDggQEAgZG9uZToKPiDCoCDC oCDCoCDCoGZvciAoaSA9IDA7IGkgPCBkYnNpemU7IGkrKykgewo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgRFBSSU5USygiVHJ5aW5nICVpeCVpXG4iLCBkYltpXS54cmVzLCBkYltpXS55cmVzKTsK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICghZmJfdHJ5X21vZGUodmFyLCBpbmZvLCAmZGJb aV0sIGJwcCkpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRkaWZmID0g YWJzKGRiW2ldLnhyZXMgLSB4cmVzKSArCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBhYnMoZGJbaV0ueXJlcyAtIHlyZXMpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgdGRpZmYgPSBhYnMoKGludCkoZGJbaV0ueHJlcyAtIHhyZXMp KSArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhYnMo KGludCkoZGJbaV0ueXJlcyAtIHlyZXMpKTsKPgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgLyoKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqIFBlbmFs aXplIG1vZGVzIHdpdGggcmVzb2x1dGlvbnMgc21hbGxlcgo+IEBAIC04NTEsMTMgKzg1MywxMyBA QCBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpmYl9maW5kX25lYXJlc3RfbW9kZShjb25zdCBz dHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbW9kZWxp c3QgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGZiX21vZGVsaXN0LCBsaXN0KTsKPiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGNtb2RlID0gJm1vZGVsaXN0LT5tb2RlOwo+Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCBkID0gYWJzKGNtb2RlLT54cmVzIC0gbW9kZS0+eHJlcykgKwo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWJzKGNtb2RlLT55cmVzIC0gbW9kZS0+eXJlcyk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkID0gYWJzKChpbnQpKGNtb2RlLT54cmVzIC0gbW9k ZS0+eHJlcykpICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFicygoaW50 KShjbW9kZS0+eXJlcyAtIG1vZGUtPnlyZXMpKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlm IChkaWZmID4gZCkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGlmZiA9 IGQ7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiZXN0ID0gY21vZGU7Cj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9IGVsc2UgaWYgKGRpZmYgPSBkKSB7Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkID0gYWJzKGNtb2RlLT5yZWZyZXNoIC0gbW9kZS0+ cmVmcmVzaCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkID0gYWJzKChp bnQpKGNtb2RlLT5yZWZyZXNoIC0gbW9kZS0+cmVmcmVzaCkpOwo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKGRpZmZfcmVmcmVzaCA+IGQpIHsKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRpZmZfcmVmcmVzaCA9IGQ7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiZXN0ID0gY21vZGU7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91 dmVzYWZiLmMKPiBpbmRleCA3Yjg4MzllLi42NjIxNDI3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv dmlkZW8vdXZlc2FmYi5jCj4gKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKPiBAQCAtMzIw LDkgKzMyMCw5IEBAIHN0YXRpYyBpbnQgdXZlc2FmYl92YmVfZmluZF9tb2RlKHN0cnVjdCB1dmVz YWZiX3BhciAqcGFyLAo+IMKgIMKgIMKgIMKgaW50IGksIG1hdGNoID0gLTEsIGggPSAwLCBkID0g MHg3ZmZmZmZmZjsKPgo+IMKgIMKgIMKgIMKgZm9yIChpID0gMDsgaSA8IHBhci0+dmJlX21vZGVz X2NudDsgaSsrKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBoID0gYWJzKHBhci0+dmJlX21v ZGVzW2ldLnhfcmVzIC0geHJlcykgKwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWJz KHBhci0+dmJlX21vZGVzW2ldLnlfcmVzIC0geXJlcykgKwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgYWJzKGRlcHRoIC0gcGFyLT52YmVfbW9kZXNbaV0uZGVwdGgpOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaCA9IGFicygoaW50KShwYXItPnZiZV9tb2Rlc1tpXS54X3JlcyAtIHhy ZXMpKSArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhYnMoKGludCkocGFyLT52YmVf bW9kZXNbaV0ueV9yZXMgLSB5cmVzKSkgKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg YWJzKChpbnQpKGRlcHRoIC0gcGFyLT52YmVfbW9kZXNbaV0uZGVwdGgpKTsKPgo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgLyoKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqIFdlIGhhdmUgYW4g ZXhhY3QgbWF0Y2ggaW4gdGVybXMgb2YgcmVzb2x1dGlvbgo+IEBAIC0xMzc1LDcgKzEzNzUsNyBA QCBzdGF0aWMgaW50IHV2ZXNhZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAq dmFyLAo+IMKgIMKgIMKgIMKgICogd2hpY2ggaXMgdGhlb3JldGljYWxseSBpbmNvcnJlY3QsIGJ1 dCB3aGljaCB3ZSdsbCB0cnkgdG8gaGFuZGxlCj4gwqAgwqAgwqAgwqAgKiBoZXJlLgo+IMKgIMKg IMKgIMKgICovCj4gLSDCoCDCoCDCoCBpZiAoZGVwdGggPSAwIHx8IGFicyhkZXB0aCAtIHZhci0+ Yml0c19wZXJfcGl4ZWwpID49IDgpCj4gKyDCoCDCoCDCoCBpZiAoZGVwdGggPSAwIHx8IGFicygo aW50KShkZXB0aCAtIHZhci0+Yml0c19wZXJfcGl4ZWwpKSA+PSA4KQo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgZGVwdGggPSB2YXItPmJpdHNfcGVyX3BpeGVsOwo+Cj4gwqAgwqAgwqAgwqBtYXRj aCA9IHV2ZXNhZmJfdmJlX2ZpbmRfbW9kZShwYXIsIHZhci0+eHJlcywgdmFyLT55cmVzLCBkZXB0 aCwKCkdye29ldGplLGVldGluZ31zLAoKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgR2VlcnQKCi0tCkdlZXJ0IFV5dHRlcmhvZXZlbiAtLSBUaGVyZSdzIGxvdHMgb2YgTGludXgg YmV5b25kIGlhMzIgLS0gZ2VlcnRAbGludXgtbTY4ay5vcmcKCkluIHBlcnNvbmFsIGNvbnZlcnNh dGlvbnMgd2l0aCB0ZWNobmljYWwgcGVvcGxlLCBJIGNhbGwgbXlzZWxmIGEgaGFja2VyLiBCdXQK d2hlbiBJJ20gdGFsa2luZyB0byBqb3VybmFsaXN0cyBJIGp1c3Qgc2F5ICJwcm9ncmFtbWVyIiBv ciBzb21ldGhpbmcgbGlrZSB0aGF0LgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoMKgIMKgwqAgLS0gTGludXMgVG9ydmFsZHMK//Tounsubscribefromthislisv/send thelinf/unsubscribelinux/fbdev/inthebodyofamessagetomajordomo/vger/kernel/or gMoremajordomoinfoathttp///vger/kernel/org/majordomo/info/htCg==