Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Aug 2023 11:23:48 +0200
From:      tuexen@fh-muenster.de
To:        Dmitry Chagin <dchagin@freebsd.org>
Cc:        Doug Moore <dougm@freebsd.org>, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org, src-committers@freebsd.org
Subject:   Re: git: 1a7fcf6d51eb - main - vm_phys_enqueue_contig: handle npages==0
Message-ID:  <B6B2B80C-3633-4041-AD13-ABCED4F3A3C4@fh-muenster.de>
In-Reply-To: <CAC0jpUCEyN0STBvuqv2kcvV8NY04RXGdszEf2MS6pJKC3bf8Kw@mail.gmail.com>
References:  <202308020314.3723ETgj027830@gitrepo.freebsd.org> <CAC0jpUCEyN0STBvuqv2kcvV8NY04RXGdszEf2MS6pJKC3bf8Kw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_EE90BED6-27D5-418F-BB28-2CEC87741BBE
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

> On 2. Aug 2023, at 10:15, Dmitry Chagin <dchagin@freebsd.org> wrote:
>=20
>=20
> Hi,
>=20
> With this change, I got a panic:
> vm_phys_enq_range: page 0xfffffe0000000000 and pages 0 are misaligned
My arm64 system also panics:

panic: vm_phys_enq_range: page 0xffffa000796a7000 and npages 4294443008 =
are misaligned

Best regards
Michael
>=20
> =D0=A1=D1=80, 2 =D0=B0=D0=B2=D0=B3. 2023 =D0=B3. =D0=B2 06:22, Doug =
Moore <dougm@freebsd.org>:
> The branch main has been updated by dougm:
>=20
> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3D1a7fcf6d51eb67ee3e05fdbb806f7e68=
f9f53c9c
>=20
> commit 1a7fcf6d51eb67ee3e05fdbb806f7e68f9f53c9c
> Author:     Doug Moore <dougm@FreeBSD.org>
> AuthorDate: 2023-08-02 03:12:00 +0000
> Commit:     Doug Moore <dougm@FreeBSD.org>
> CommitDate: 2023-08-02 03:12:00 +0000
>=20
>     vm_phys_enqueue_contig: handle npages=3D=3D0
>=20
>     By letting vm_phys_enqueue_contig handle the case when npages =3D=3D=
 0,
>     the callers can stop checking it, and the compiler can stop
>     zero-checking with every call to ffs(). Letting =
vm_phys_enqueue_contig
>     call vm_phys_enqueue_contig for part of its work also saves a few
>     bytes.
>=20
>     The amd64 object code shrinks by 80 bytes.
>=20
>     Reviewed by:    kib
>     Differential Revision:  https://reviews.freebsd.org/D41154
> ---
>  sys/vm/vm_phys.c | 74 =
+++++++++++++++++++++++++++-----------------------------
>  1 file changed, 35 insertions(+), 39 deletions(-)
>=20
> diff --git a/sys/vm/vm_phys.c b/sys/vm/vm_phys.c
> index 28f12231e01c..b2084bdef4e1 100644
> --- a/sys/vm/vm_phys.c
> +++ b/sys/vm/vm_phys.c
> @@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$");
>=20
>  _Static_assert(sizeof(long) * NBBY >=3D VM_PHYSSEG_MAX,
>      "Too many physsegs.");
> +_Static_assert(sizeof(long long) >=3D sizeof(vm_paddr_t),
> +    "vm_paddr_t too big for ffsll, flsll.");
>=20
>  #ifdef NUMA
>  struct mem_affinity __read_mostly *mem_affinity;
> @@ -690,18 +692,16 @@ vm_phys_split_pages(vm_page_t m, int oind, =
struct vm_freelist *fl, int order,
>   *
>   * The physical page m's buddy must not be free.
>   */
> -static void
> +static vm_page_t
>  vm_phys_enq_range(vm_page_t m, u_int npages, struct vm_freelist *fl, =
int tail)
>  {
> -       u_int n;
>         int order;
>=20
> -       KASSERT(npages > 0, ("vm_phys_enq_range: npages is 0"));
>         KASSERT(((VM_PAGE_TO_PHYS(m) + npages * PAGE_SIZE) &
>             ((PAGE_SIZE << (fls(npages) - 1)) - 1)) =3D=3D 0,
>             ("vm_phys_enq_range: page %p and npages %u are =
misaligned",
>             m, npages));
> -       do {
> +       while (npages > 0) {
>                 KASSERT(m->order =3D=3D VM_NFREEORDER,
>                     ("vm_phys_enq_range: page %p has unexpected order =
%d",
>                     m, m->order));
> @@ -709,10 +709,10 @@ vm_phys_enq_range(vm_page_t m, u_int npages, =
struct vm_freelist *fl, int tail)
>                 KASSERT(order < VM_NFREEORDER,
>                     ("vm_phys_enq_range: order %d is out of range", =
order));
>                 vm_freelist_add(fl, m, order, tail);
> -               n =3D 1 << order;
> -               m +=3D n;
> -               npages -=3D n;
> -       } while (npages > 0);
> +               m +=3D 1 << order;
> +               npages -=3D 1 << order;
> +       }
> +       return (m);
>  }
>=20
>  /*
> @@ -744,7 +744,7 @@ vm_phys_alloc_npages(int domain, int pool, int =
npages, vm_page_t ma[])
>  {
>         struct vm_freelist *alt, *fl;
>         vm_page_t m;
> -       int avail, end, flind, freelist, i, need, oind, pind;
> +       int avail, end, flind, freelist, i, oind, pind;
>=20
>         KASSERT(domain >=3D 0 && domain < vm_ndomains,
>             ("vm_phys_alloc_npages: domain %d is out of range", =
domain));
> @@ -762,20 +762,18 @@ vm_phys_alloc_npages(int domain, int pool, int =
npages, vm_page_t ma[])
>                 for (oind =3D 0; oind < VM_NFREEORDER; oind++) {
>                         while ((m =3D TAILQ_FIRST(&fl[oind].pl)) !=3D =
NULL) {
>                                 vm_freelist_rem(fl, m, oind);
> -                               avail =3D 1 << oind;
> -                               need =3D imin(npages - i, avail);
> -                               for (end =3D i + need; i < end;)
> +                               avail =3D i + (1 << oind);
> +                               end =3D imin(npages, avail);
> +                               while (i < end)
>                                         ma[i++] =3D m++;
> -                               if (need < avail) {
> +                               if (i =3D=3D npages) {
>                                         /*
> -                                        * Return excess pages to fl.  =
Its
> -                                        * order [0, oind) queues are =
empty.
> +                                        * Return excess pages to fl.  =
Its order
> +                                        * [0, oind) queues are empty.
>                                          */
> -                                       vm_phys_enq_range(m, avail - =
need, fl,
> -                                           1);
> -                                       return (npages);
> -                               } else if (i =3D=3D npages)
> +                                       vm_phys_enq_range(m, avail - =
i, fl, 1);
>                                         return (npages);
> +                               }
>                         }
>                 }
>                 for (oind =3D VM_NFREEORDER - 1; oind >=3D 0; oind--) =
{
> @@ -785,21 +783,20 @@ vm_phys_alloc_npages(int domain, int pool, int =
npages, vm_page_t ma[])
>                                     NULL) {
>                                         vm_freelist_rem(alt, m, oind);
>                                         vm_phys_set_pool(pool, m, =
oind);
> -                                       avail =3D 1 << oind;
> -                                       need =3D imin(npages - i, =
avail);
> -                                       for (end =3D i + need; i < =
end;)
> +                                       avail =3D i + (1 << oind);
> +                                       end =3D imin(npages, avail);
> +                                       while (i < end)
>                                                 ma[i++] =3D m++;
> -                                       if (need < avail) {
> +                                       if (i =3D=3D npages) {
>                                                 /*
>                                                  * Return excess pages =
to fl.
>                                                  * Its order [0, oind) =
queues
>                                                  * are empty.
>                                                  */
> -                                               vm_phys_enq_range(m, =
avail -
> -                                                   need, fl, 1);
> -                                               return (npages);
> -                                       } else if (i =3D=3D npages)
> +                                               vm_phys_enq_range(m, =
avail - i,
> +                                                   fl, 1);
>                                                 return (npages);
> +                                       }
>                                 }
>                         }
>                 }
> @@ -1146,7 +1143,7 @@ max_order(vm_page_t m)
>          * because the size of a physical address exceeds the size of
>          * a long.
>          */
> -       return (min(ffsl(VM_PAGE_TO_PHYS(m) >> PAGE_SHIFT) - 1,
> +       return (min(ffsll(VM_PAGE_TO_PHYS(m) >> PAGE_SHIFT) - 1,
>             VM_NFREEORDER - 1));
>  }
>=20
> @@ -1162,6 +1159,7 @@ vm_phys_enqueue_contig(vm_page_t m, u_long =
npages)
>         struct vm_freelist *fl;
>         struct vm_phys_seg *seg;
>         vm_page_t m_end;
> +       vm_paddr_t diff, lo;
>         int order;
>=20
>         /*
> @@ -1173,15 +1171,15 @@ vm_phys_enqueue_contig(vm_page_t m, u_long =
npages)
>         fl =3D (*seg->free_queues)[m->pool];
>         m_end =3D m + npages;
>         /* Free blocks of increasing size. */
> -       while ((order =3D max_order(m)) < VM_NFREEORDER - 1 &&
> -           m + (1 << order) <=3D m_end) {
> -               KASSERT(seg =3D=3D &vm_phys_segs[m->segind],
> -                   ("%s: page range [%p,%p) spans multiple segments",
> -                   __func__, m_end - npages, m));
> -               vm_freelist_add(fl, m, order, 1);
> -               m +=3D 1 << order;
> +       lo =3D VM_PAGE_TO_PHYS(m) >> PAGE_SHIFT;
> +       if (m < m_end &&
> +           (diff =3D lo ^ (lo + npages - 1)) !=3D 0) {
> +               order =3D min(flsll(diff) - 1, VM_NFREEORDER - 1);
> +               m =3D vm_phys_enq_range(m, roundup2(-lo, 1 << order), =
fl, 1);
>         }
> +
>         /* Free blocks of maximum size. */
> +       order =3D VM_NFREEORDER - 1;
>         while (m + (1 << order) <=3D m_end) {
>                 KASSERT(seg =3D=3D &vm_phys_segs[m->segind],
>                     ("%s: page range [%p,%p) spans multiple segments",
> @@ -1560,10 +1558,8 @@ vm_phys_alloc_contig(int domain, u_long npages, =
vm_paddr_t low, vm_paddr_t high,
>                         vm_phys_set_pool(VM_FREEPOOL_DEFAULT, m, =
oind);
>         }
>         /* Return excess pages to the free lists. */
> -       if (&m_run[npages] < m) {
> -               fl =3D (*queues)[VM_FREEPOOL_DEFAULT];
> -               vm_phys_enq_range(&m_run[npages], m - &m_run[npages], =
fl, 0);
> -       }
> +       fl =3D (*queues)[VM_FREEPOOL_DEFAULT];
> +       vm_phys_enq_range(&m_run[npages], m - &m_run[npages], fl, 0);
>         return (m_run);
>  }
>=20


--Apple-Mail=_EE90BED6-27D5-418F-BB28-2CEC87741BBE
Content-Disposition: attachment;
	filename=smime.p7s
Content-Type: application/pkcs7-signature;
	name=smime.p7s
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCEfMw
ggUSMIID+qADAgECAgkA4wvV+K8l2YEwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAkRFMSsw
KQYDVQQKDCJULVN5c3RlbXMgRW50ZXJwcmlzZSBTZXJ2aWNlcyBHbWJIMR8wHQYDVQQLDBZULVN5
c3RlbXMgVHJ1c3QgQ2VudGVyMSUwIwYDVQQDDBxULVRlbGVTZWMgR2xvYmFsUm9vdCBDbGFzcyAy
MB4XDTE2MDIyMjEzMzgyMloXDTMxMDIyMjIzNTk1OVowgZUxCzAJBgNVBAYTAkRFMUUwQwYDVQQK
EzxWZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMg
ZS4gVi4xEDAOBgNVBAsTB0RGTi1QS0kxLTArBgNVBAMTJERGTi1WZXJlaW4gQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMtg1/9moUHN0vqH
l4pzq5lN6mc5WqFggEcVToyVsuXPztNXS43O+FZsFVV2B+pG/cgDRWM+cNSrVICxI5y+NyipCf8F
XRgPxJiZN7Mg9mZ4F4fCnQ7MSjLnFp2uDo0peQcAIFTcFV9Kltd4tjTTwXS1nem/wHdN6r1ZB+Ba
L2w8pQDcNb1lDY9/Mm3yWmpLYgHurDg0WUU2SQXaeMpqbVvAgWsRzNI8qIv4cRrKO+KA3Ra0Z3qL
NupOkSk9s1FcragMvp0049ENF4N1xDkesJQLEvHVaY4l9Lg9K7/AjsMeO6W/VRCrKq4Xl14zzsjz
9AkH4wKGMUZrAcUQDBHHWekCAwEAAaOCAXQwggFwMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
k+PYMiba1fFKpZFK4OpL4qIMz+EwHwYDVR0jBBgwFoAUv1kgNgB5oKAia4zV8mHSuCzLgkowEgYD
VR0TAQH/BAgwBgEB/wIBAjAzBgNVHSAELDAqMA8GDSsGAQQBga0hgiwBAQQwDQYLKwYBBAGBrSGC
LB4wCAYGZ4EMAQICMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kwMzM2LnRlbGVzZWMuZGUv
cmwvVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY3JsMIGGBggrBgEFBQcBAQR6MHgwLAYIKwYB
BQUHMAGGIGh0dHA6Ly9vY3NwMDMzNi50ZWxlc2VjLmRlL29jc3ByMEgGCCsGAQUFBzAChjxodHRw
Oi8vcGtpMDMzNi50ZWxlc2VjLmRlL2NydC9UZWxlU2VjX0dsb2JhbFJvb3RfQ2xhc3NfMi5jZXIw
DQYJKoZIhvcNAQELBQADggEBAIcL/z4Cm2XIVi3WO5qYi3FP2ropqiH5Ri71sqQPrhE4eTizDnS6
dl2e6BiClmLbTDPo3flq3zK9LExHYFV/53RrtCyD2HlrtrdNUAtmB7Xts5et6u5/MOaZ/SLick0+
hFvu+c+Z6n/XUjkurJgARH5pO7917tALOxrN5fcPImxHhPalR6D90Bo0fa3SPXez7vTXTf/D6OWS
T1k+kEcQSrCFWMBvf/iu7QhCnh7U3xQuTY+8npTD5+32GPg8SecmqKc22CzeIs2LgtjZeOJVEqM7
h0S2EQvVDFKvaYwPBt/QolOLV5h7z/0HJPT8vcP9SpIClxvyt7bPZYoaorVyGTkwggWsMIIElKAD
AgECAgcbY7rQHiw9MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYDVQQGEwJERTFFMEMGA1UEChM8VmVy
ZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYu
MRAwDgYDVQQLEwdERk4tUEtJMS0wKwYDVQQDEyRERk4tVmVyZWluIENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IDIwHhcNMTYwNTI0MTEzODQwWhcNMzEwMjIyMjM1OTU5WjCBjTELMAkGA1UEBhMCREUx
RTBDBgNVBAoMPFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5n
c25ldHplcyBlLiBWLjEQMA4GA1UECwwHREZOLVBLSTElMCMGA1UEAwwcREZOLVZlcmVpbiBHbG9i
YWwgSXNzdWluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ07eRxH3h+Gy8Zp
1xCeOdfZojDbchwFfylfS2jxrRnWTOFrG7ELf6Gr4HuLi9gtzm6IOhDuV+UefwRRNuu6cG1joL6W
LkDh0YNMZj0cZGnlm6Stcq5oOVGHecwX064vXWNxSzl660Knl5BpBb+Q/6RAcL0D57+eGIgfn5mI
TQ5HjUhfZZkQ0tkqSe3BuS0dnxLLFdM/fx5ULzquk1enfnjK1UriGuXtQX1TX8izKvWKMKztFwUk
P7agCwf9TRqaA1KgNpzeJIdl5Of6x5ZzJBTN0OgbaJ4YWa52fvfRCng8h0uwN89Tyjo4EPPLR22M
ZD08WkVKusqAfLjz56dMTM0CAwEAAaOCAgUwggIBMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0P
AQH/BAQDAgEGMCkGA1UdIAQiMCAwDQYLKwYBBAGBrSGCLB4wDwYNKwYBBAGBrSGCLAEBBDAdBgNV
HQ4EFgQUazqYi/nyU4na4K2yMh4JH+iqO3QwHwYDVR0jBBgwFoAUk+PYMiba1fFKpZFK4OpL4qIM
z+EwgY8GA1UdHwSBhzCBhDBAoD6gPIY6aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9v
dC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDBAoD6gPIY6aHR0cDovL2NkcDIucGNhLmRmbi5kZS9n
bG9iYWwtcm9vdC1nMi1jYS9wdWIvY3JsL2NhY3JsLmNybDCB3QYIKwYBBQUHAQEEgdAwgc0wMwYI
KwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnBjYS5kZm4uZGUvT0NTUC1TZXJ2ZXIvT0NTUDBKBggrBgEF
BQcwAoY+aHR0cDovL2NkcDEucGNhLmRmbi5kZS9nbG9iYWwtcm9vdC1nMi1jYS9wdWIvY2FjZXJ0
L2NhY2VydC5jcnQwSgYIKwYBBQUHMAKGPmh0dHA6Ly9jZHAyLnBjYS5kZm4uZGUvZ2xvYmFsLXJv
b3QtZzItY2EvcHViL2NhY2VydC9jYWNlcnQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQCBeEWkTqR/
DlXwCbFqPnjMaDWpHPOVnj/z+N9rOHeJLI21rT7H8pTNoAauusyosa0zCLYkhmI2THhuUPDVbmCN
T1IxQ5dGdfBi5G5mUcFCMWdQ5UnnOR7Ln8qGSN4IFP8VSytmm6A4nwDO/afr0X9XLchMX9wQEZc+
lgQCXISoKTlslPwQkgZ7nu7YRrQbtQMMONncsKk/cQYLsgMHM8KNSGMlJTx6e1du94oFOO+4oK4v
9NsH1VuEGMGpuEvObJAaguS5Pfp38dIfMwK/U+d2+dwmJUFvL6Yb+qQTkPp8ftkLYF3sv8pBoGH7
EUkp2KgtdRXYShjqFu9VNCIaE40GMIIHKTCCBhGgAwIBAgIMJrRClNKRzetB0jc/MA0GCSqGSIb3
DQEBCwUAMIGNMQswCQYDVQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVp
bmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUw
IwYDVQQDDBxERk4tVmVyZWluIEdsb2JhbCBJc3N1aW5nIENBMB4XDTIyMDUzMDEzMjIxNVoXDTI1
MDUyOTEzMjIxNVowgcQxCzAJBgNVBAYTAkRFMRwwGgYDVQQIDBNOb3JkcmhlaW4tV2VzdGZhbGVu
MREwDwYDVQQHDAhNdWVuc3RlcjEUMBIGA1UECgwLRkggTXVlbnN0ZXIxMjAwBgNVBAsMKUZhY2hi
ZXJlaWNoIEVsZWt0cm90ZWNobmlrIHVuZCBJbmZvcm1hdGlrMQ8wDQYDVQQEDAZUdWV4ZW4xEDAO
BgNVBCoMB01pY2hhZWwxFzAVBgNVBAMMDk1pY2hhZWwgVHVleGVuMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEA2QZ7Uheto325SEnX2BTxBvYnz7u/BVmzxKlogaR4K0MA8ZcfNIdQkiJU
efjL6imq21BSFsr/tXcODFZmPrvx9aIxjntCxmEFr7qFaw3e3mUIxJyj5n6BxjzZ/hyJte8LBDbj
zj+e8WPUzXmYbSxtrh9kgw8NMx3+bo3Hslic+PkKEGx9JJp2I2TEs88xD0rHC2Ljwcfk6bS9jC+/
BAuY/TsbJoq+8d64DYSLGiIYbvMMuxM2C8BlpHLIOLx2FaH+uMqdH2dLVvCacZJ9YzHvvZY8O2nQ
OBFCG1UMpX5YLHN8g/t02a+IBt+oe97JMdJ/kZsPjolI98dcRdzz0hTXZql2xvp6zlocm9iGTRcv
dCSxy+0x4CIZD1EkVX9zCPGpzdTXnrU+zvnz14Uq3Wbfl3GiVgK0Avr1enfZepruAxAy7KGIm2zi
/qY3XSkN8fvWJmYnomOjCRjaPtqS/azmnyeodsxlVhqQKbES65u/PbOXjOlhiYAvemS0IbK4iR76
3iSmkpwSNpJt6BCtFJN+w3Y8tztCP66KPPC1Fri1oj27KPaf04J66MkSjlQdpI7POS6lDyN7X2Hw
tgZKRVA94h/JvZp4ld7mTzXTEW2tdO5azPILsL9xOYjSS5VIyUFF4MoxSbfZtXWaZFsMC1fXDNNL
uRDrISotdwADuU75Fe0CAwEAAaOCAk4wggJKMD4GA1UdIAQ3MDUwDwYNKwYBBAGBrSGCLAEBBDAQ
Bg4rBgEEAYGtIYIsAQEECjAQBg4rBgEEAYGtIYIsAgEECjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQE
AwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwHQYDVR0OBBYEFFDbROYIxDr3fvlX
tkXqx7T8lihxMB8GA1UdIwQYMBaAFGs6mIv58lOJ2uCtsjIeCR/oqjt0MCAGA1UdEQQZMBeBFXR1
ZXhlbkBmaC1tdWVuc3Rlci5kZTCBjQYDVR0fBIGFMIGCMD+gPaA7hjlodHRwOi8vY2RwMS5wY2Eu
ZGZuLmRlL2Rmbi1jYS1nbG9iYWwtZzIvcHViL2NybC9jYWNybC5jcmwwP6A9oDuGOWh0dHA6Ly9j
ZHAyLnBjYS5kZm4uZGUvZGZuLWNhLWdsb2JhbC1nMi9wdWIvY3JsL2NhY3JsLmNybDCB2wYIKwYB
BQUHAQEEgc4wgcswMwYIKwYBBQUHMAGGJ2h0dHA6Ly9vY3NwLnBjYS5kZm4uZGUvT0NTUC1TZXJ2
ZXIvT0NTUDBJBggrBgEFBQcwAoY9aHR0cDovL2NkcDEucGNhLmRmbi5kZS9kZm4tY2EtZ2xvYmFs
LWcyL3B1Yi9jYWNlcnQvY2FjZXJ0LmNydDBJBggrBgEFBQcwAoY9aHR0cDovL2NkcDIucGNhLmRm
bi5kZS9kZm4tY2EtZ2xvYmFsLWcyL3B1Yi9jYWNlcnQvY2FjZXJ0LmNydDANBgkqhkiG9w0BAQsF
AAOCAQEALubmL854icQMxKxOxQK+deXTjC6CLYnUDwB8MvnDC+BSeh3tUHT37fSgsK1ShNUSNJX0
YF0VYLfZ6+lPyaFYLArVrAIHqvDiVURaulB9NA+3gck/VSuRz4ILYBy61XbcGQQ8Wx+g6TcqsjsF
oOhqEBycj5QuITj+EFmX8nvfo0dJtVa2OPDk1N9beLfQBcLhspJ/nv0pKhpNWv5YETG26YqYfsC7
FA/ZNGvRcoOPkjkDhBTtG+qq9DDD75XtGEBZhYXbnG15tn4/UV07B+UyK4/cqQSA+My5FML3YsQw
EYrV9klVD/mLMOdZV5+95xt7O8IdYeHrBapVlhANH5bFazGCBJ0wggSZAgEBMIGeMIGNMQswCQYD
VQQGEwJERTFFMEMGA1UECgw8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERldXRzY2hlbiBG
b3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLDAdERk4tUEtJMSUwIwYDVQQDDBxERk4tVmVy
ZWluIEdsb2JhbCBJc3N1aW5nIENBAgwmtEKU0pHN60HSNz8wDQYJYIZIAWUDBAIBBQCgggHPMBgG
CSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDgwMjA5MjM0OFowLwYJ
KoZIhvcNAQkEMSIEIFlkHAkZLMsB2d+dzsLrCYsUa+QYF/Y5gs3fnbkYZN4UMIGvBgkrBgEEAYI3
EAQxgaEwgZ4wgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxWZXJlaW4genVyIEZvZXJkZXJ1bmcg
ZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4gVi4xEDAOBgNVBAsMB0RGTi1QS0kx
JTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3VpbmcgQ0ECDCa0QpTSkc3rQdI3PzCBsQYL
KoZIhvcNAQkQAgsxgaGggZ4wgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxWZXJlaW4genVyIEZv
ZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4gVi4xEDAOBgNVBAsM
B0RGTi1QS0kxJTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3VpbmcgQ0ECDCa0QpTSkc3r
QdI3PzANBgkqhkiG9w0BAQsFAASCAgCRgRprCsXMKlRBhGE+lU4gEnNUBfWGXERJQn15DC/gRg+8
9cJNZ5MGMKtRzX8P8Abc9coA/tnhn8jjDk4Q9lyqkQqKz9ZeilkGTLyEYcQxqi+3todHgyB9CSbD
2zoipGT4DurqStepOkuRkKqCk3uXDiTWWDLnf2AfU65hQugKHoZdeN+xFYcgazX8Ytdun8el6T9F
OWcN1z52WAY0HjPYO+pkJ9JJtLNz8SKViwdk5OSTYKNO4k75BPySRrLr/hnT439e/eLNOpDIzPYX
NDWmcfqWrcmHpijfrkwdurslEhsHZiu8tW4l4nzdT0GqAnDFruxq2RmOdxWZAY4SMfjmjhK6WDpx
qcwKg7O0pBpHgwAApdV36lmbsIq5PEGgnO/7oNbbPclHdor/G/eJFAVgHoY/Cjsgi+E7t1lKb7tn
EmofQtbxWuRVHRcCZ0umztbYGZ4/MNS56Sfujp0L7uP8E1wpevLEUBVThxXyFufgVMo8pvnWtXW+
oWthg8foyDxdp5G+VbpLPKQE10PJ61jycoFo5u+15WHrfpbO8YJmf0xtnah125AMyx6zW9+ojfXf
HR6+ryAbpLXkJUQCCWVIig4pJO791B8nERZcZzF9UcdvrWvfQMojVoiut0Xvt/YXc+RGjuvWhD11
Ysa//EZCS7mq6NPl/eTfMoBuhoV0ggAAAAAAAA==
--Apple-Mail=_EE90BED6-27D5-418F-BB28-2CEC87741BBE--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B6B2B80C-3633-4041-AD13-ABCED4F3A3C4>