<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>237861</bug_id>
          
          <creation_ts>2022-03-14 18:00:28 -0700</creation_ts>
          <short_desc>[WebGPU] Repeated calls to wgpuDeviceGetQueue() are supposed to return the same pointer</short_desc>
          <delta_ts>2022-03-15 23:10:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>237583</blocked>
    
    <blocked>237864</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1851099</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 18:00:28 -0700</bug_when>
    <thetext>[WebGPU] Repeated calls to wgpuDeviceGetQueue() are supposed to return the same pointer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851100</commentid>
    <comment_count>1</comment_count>
      <attachid>454644</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-14 18:02:08 -0700</bug_when>
    <thetext>Created attachment 454644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851215</commentid>
    <comment_count>2</comment_count>
      <attachid>454644</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-15 03:22:43 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt; Source/WebGPU/WebGPU/Adapter.mm:123
&gt;      // See the comment in Device::setLabel() about why we&apos;re not setting the label here.

I think you can remove this comment.
For all intents and purposes, passing label to the device constructor counts as initialising, e.g setting, the label for the device.

&gt; Source/WebGPU/WebGPU/Device.mm:56
&gt; +    if (deviceLabel &amp;&amp; strlen(deviceLabel))

nit: we calculate the length of the label for the purpose of &quot;isempty&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851253</commentid>
    <comment_count>3</comment_count>
      <attachid>454644</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-03-15 06:14:17 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt; Source/WebGPU/WebGPU/Adapter.mm:171
&gt; +            callback(status, new WGPUDeviceImpl { device.releaseNonNull(), { queue } }, message);

btw: Is there a reason for this pattern where we create new wrapper objects every time we communicate with another layer in the sw stack?

I think it&apos;s employed here (invoking the wgpu client callback) as well as internally ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851491</commentid>
    <comment_count>4</comment_count>
      <attachid>454644</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 14:03:26 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt;&gt; Source/WebGPU/WebGPU/Adapter.mm:123
&gt;&gt;      // See the comment in Device::setLabel() about why we&apos;re not setting the label here.
&gt; 
&gt; I think you can remove this comment.
&gt; For all intents and purposes, passing label to the device constructor counts as initialising, e.g setting, the label for the device.

Good point.

&gt;&gt; Source/WebGPU/WebGPU/Adapter.mm:171
&gt;&gt; +            callback(status, new WGPUDeviceImpl { device.releaseNonNull(), { queue } }, message);
&gt; 
&gt; btw: Is there a reason for this pattern where we create new wrapper objects every time we communicate with another layer in the sw stack?
&gt; 
&gt; I think it&apos;s employed here (invoking the wgpu client callback) as well as internally ?

There&apos;s a (bad) reason. Ideas for improvements are welcome.

The reason is that the shared WebGPU.h header has:

typedef struct WGPUDeviceImpl* WGPUDevice;

However, it would be convenient if we could have our own names like this:

namespace WebGPU {
class Device {
    ...
    id&lt;MTLDevice&gt; m_device;
    ...
}
}

I thought of 3 possible solutions:

1. Use reinterpret_cast&lt;&gt;() to freely convert between WGPUDeviceImpl* and WebGPU::Device*. This breaks C++&apos;s type system, and is technically UB (I think) so I was hoping to avoid this option.

2. Don&apos;t have nice names, and don&apos;t use &quot;namespace WebGPU&quot;:

struct WGPUDeviceImpl {
    ...
    id&lt;MTLDevice&gt; m_device;
    ...
}

This is unfortunate because it foregoes C++&apos;s built-in namespace support in favor of prefixes, and isn&apos;t the pattern we use for the rest of WebKit

3. Do a double-pointer-indirection:

struct WGPUDeviceImpl {
    Ref&lt;WebGPU::Device&gt; device;
};

This isn&apos;t great for performance (though it&apos;s probably negligible) and has a somewhat bad smell about having two types which mean the same thing.

For the initial implementation, I chose option 3, under the assumption that it would be easy/mechanical to change later if a better option presents itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851500</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 14:30:25 -0700</bug_when>
    <thetext>Committed r291315 (248454@trunk): &lt;https://commits.webkit.org/248454@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851502</commentid>
    <comment_count>6</comment_count>
      <attachid>454644</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-03-15 14:30:48 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt;&gt;&gt; Source/WebGPU/WebGPU/Adapter.mm:171
&gt;&gt;&gt; +            callback(status, new WGPUDeviceImpl { device.releaseNonNull(), { queue } }, message);
&gt;&gt; 
&gt;&gt; btw: Is there a reason for this pattern where we create new wrapper objects every time we communicate with another layer in the sw stack?
&gt;&gt; 
&gt;&gt; I think it&apos;s employed here (invoking the wgpu client callback) as well as internally ?
&gt; 
&gt; There&apos;s a (bad) reason. Ideas for improvements are welcome.
&gt; 
&gt; The reason is that the shared WebGPU.h header has:
&gt; 
&gt; typedef struct WGPUDeviceImpl* WGPUDevice;
&gt; 
&gt; However, it would be convenient if we could have our own names like this:
&gt; 
&gt; namespace WebGPU {
&gt; class Device {
&gt;     ...
&gt;     id&lt;MTLDevice&gt; m_device;
&gt;     ...
&gt; }
&gt; }
&gt; 
&gt; I thought of 3 possible solutions:
&gt; 
&gt; 1. Use reinterpret_cast&lt;&gt;() to freely convert between WGPUDeviceImpl* and WebGPU::Device*. This breaks C++&apos;s type system, and is technically UB (I think) so I was hoping to avoid this option.
&gt; 
&gt; 2. Don&apos;t have nice names, and don&apos;t use &quot;namespace WebGPU&quot;:
&gt; 
&gt; struct WGPUDeviceImpl {
&gt;     ...
&gt;     id&lt;MTLDevice&gt; m_device;
&gt;     ...
&gt; }
&gt; 
&gt; This is unfortunate because it foregoes C++&apos;s built-in namespace support in favor of prefixes, and isn&apos;t the pattern we use for the rest of WebKit
&gt; 
&gt; 3. Do a double-pointer-indirection:
&gt; 
&gt; struct WGPUDeviceImpl {
&gt;     Ref&lt;WebGPU::Device&gt; device;
&gt; };
&gt; 
&gt; This isn&apos;t great for performance (though it&apos;s probably negligible) and has a somewhat bad smell about having two types which mean the same thing.
&gt; 
&gt; For the initial implementation, I chose option 3, under the assumption that it would be easy/mechanical to change later if a better option presents itself.

I filed https://bugs.webkit.org/show_bug.cgi?id=237921 about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851504</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-15 14:31:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/90330891&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851663</commentid>
    <comment_count>8</comment_count>
      <attachid>454644</attachid>
    <who name="Dan Glastonbury">djg</who>
    <bug_when>2022-03-15 23:09:59 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt;&gt;&gt;&gt; Source/WebGPU/WebGPU/Adapter.mm:171
&gt;&gt;&gt;&gt; +            callback(status, new WGPUDeviceImpl { device.releaseNonNull(), { queue } }, message);
&gt;&gt;&gt; 
&gt;&gt;&gt; btw: Is there a reason for this pattern where we create new wrapper objects every time we communicate with another layer in the sw stack?
&gt;&gt;&gt; 
&gt;&gt;&gt; I think it&apos;s employed here (invoking the wgpu client callback) as well as internally ?
&gt;&gt; 
&gt;&gt; There&apos;s a (bad) reason. Ideas for improvements are welcome.
&gt;&gt; 
&gt;&gt; The reason is that the shared WebGPU.h header has:
&gt;&gt; 
&gt;&gt; typedef struct WGPUDeviceImpl* WGPUDevice;
&gt;&gt; 
&gt;&gt; However, it would be convenient if we could have our own names like this:
&gt;&gt; 
&gt;&gt; namespace WebGPU {
&gt;&gt; class Device {
&gt;&gt;     ...
&gt;&gt;     id&lt;MTLDevice&gt; m_device;
&gt;&gt;     ...
&gt;&gt; }
&gt;&gt; }
&gt;&gt; 
&gt;&gt; I thought of 3 possible solutions:
&gt;&gt; 
&gt;&gt; 1. Use reinterpret_cast&lt;&gt;() to freely convert between WGPUDeviceImpl* and WebGPU::Device*. This breaks C++&apos;s type system, and is technically UB (I think) so I was hoping to avoid this option.
&gt;&gt; 
&gt;&gt; 2. Don&apos;t have nice names, and don&apos;t use &quot;namespace WebGPU&quot;:
&gt;&gt; 
&gt;&gt; struct WGPUDeviceImpl {
&gt;&gt;     ...
&gt;&gt;     id&lt;MTLDevice&gt; m_device;
&gt;&gt;     ...
&gt;&gt; }
&gt;&gt; 
&gt;&gt; This is unfortunate because it foregoes C++&apos;s built-in namespace support in favor of prefixes, and isn&apos;t the pattern we use for the rest of WebKit
&gt;&gt; 
&gt;&gt; 3. Do a double-pointer-indirection:
&gt;&gt; 
&gt;&gt; struct WGPUDeviceImpl {
&gt;&gt;     Ref&lt;WebGPU::Device&gt; device;
&gt;&gt; };
&gt;&gt; 
&gt;&gt; This isn&apos;t great for performance (though it&apos;s probably negligible) and has a somewhat bad smell about having two types which mean the same thing.
&gt;&gt; 
&gt;&gt; For the initial implementation, I chose option 3, under the assumption that it would be easy/mechanical to change later if a better option presents itself.
&gt; 
&gt; I filed https://bugs.webkit.org/show_bug.cgi?id=237921 about it.

Can you forward decl the namespaced type? eg:

namespace WebGPU { class Device; }
typedef WebGPU::Device* WGPUDevice;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851664</commentid>
    <comment_count>9</comment_count>
      <attachid>454644</attachid>
    <who name="Dan Glastonbury">djg</who>
    <bug_when>2022-03-15 23:10:01 -0700</bug_when>
    <thetext>Comment on attachment 454644
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454644&amp;action=review

&gt;&gt;&gt;&gt; Source/WebGPU/WebGPU/Adapter.mm:171
&gt;&gt;&gt;&gt; +            callback(status, new WGPUDeviceImpl { device.releaseNonNull(), { queue } }, message);
&gt;&gt;&gt; 
&gt;&gt;&gt; btw: Is there a reason for this pattern where we create new wrapper objects every time we communicate with another layer in the sw stack?
&gt;&gt;&gt; 
&gt;&gt;&gt; I think it&apos;s employed here (invoking the wgpu client callback) as well as internally ?
&gt;&gt; 
&gt;&gt; There&apos;s a (bad) reason. Ideas for improvements are welcome.
&gt;&gt; 
&gt;&gt; The reason is that the shared WebGPU.h header has:
&gt;&gt; 
&gt;&gt; typedef struct WGPUDeviceImpl* WGPUDevice;
&gt;&gt; 
&gt;&gt; However, it would be convenient if we could have our own names like this:
&gt;&gt; 
&gt;&gt; namespace WebGPU {
&gt;&gt; class Device {
&gt;&gt;     ...
&gt;&gt;     id&lt;MTLDevice&gt; m_device;
&gt;&gt;     ...
&gt;&gt; }
&gt;&gt; }
&gt;&gt; 
&gt;&gt; I thought of 3 possible solutions:
&gt;&gt; 
&gt;&gt; 1. Use reinterpret_cast&lt;&gt;() to freely convert between WGPUDeviceImpl* and WebGPU::Device*. This breaks C++&apos;s type system, and is technically UB (I think) so I was hoping to avoid this option.
&gt;&gt; 
&gt;&gt; 2. Don&apos;t have nice names, and don&apos;t use &quot;namespace WebGPU&quot;:
&gt;&gt; 
&gt;&gt; struct WGPUDeviceImpl {
&gt;&gt;     ...
&gt;&gt;     id&lt;MTLDevice&gt; m_device;
&gt;&gt;     ...
&gt;&gt; }
&gt;&gt; 
&gt;&gt; This is unfortunate because it foregoes C++&apos;s built-in namespace support in favor of prefixes, and isn&apos;t the pattern we use for the rest of WebKit
&gt;&gt; 
&gt;&gt; 3. Do a double-pointer-indirection:
&gt;&gt; 
&gt;&gt; struct WGPUDeviceImpl {
&gt;&gt;     Ref&lt;WebGPU::Device&gt; device;
&gt;&gt; };
&gt;&gt; 
&gt;&gt; This isn&apos;t great for performance (though it&apos;s probably negligible) and has a somewhat bad smell about having two types which mean the same thing.
&gt;&gt; 
&gt;&gt; For the initial implementation, I chose option 3, under the assumption that it would be easy/mechanical to change later if a better option presents itself.
&gt; 
&gt; I filed https://bugs.webkit.org/show_bug.cgi?id=237921 about it.

Can you forward decl the namespaced type? eg:

namespace WebGPU { class Device; }
typedef WebGPU::Device* WGPUDevice;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454644</attachid>
            <date>2022-03-14 18:02:08 -0700</date>
            <delta_ts>2022-03-15 03:34:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237861-20220314180207.patch</filename>
            <type>text/plain</type>
            <size>5912</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGYxYjYyM2RjYTVkNzQ2ZGFi
YWZlMzg2MzJmMWYwZmZmNWQ5MGQ5ODMuLjE0ZDIyYTg1MTQyMzQ3ZjllNzZjNzkxY2M4M2ZhM2Ez
MGQ4OTAxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjItMDMtMTQgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBSZXBl
YXRlZCBjYWxscyB0byB3Z3B1RGV2aWNlR2V0UXVldWUoKSBhcmUgc3VwcG9zZWQgdG8gcmV0dXJu
IHRoZSBzYW1lIHBvaW50ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNzg2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFByZXZpb3VzbHksIHdncHVEZXZpY2VHZXRRdWV1ZSgpIGhhZCAibmV3IFdHUFVR
dWV1ZUltcGwgeyAuLi4gfSIgYnV0IHRoaXMgaXMgd3JvbmcgYmVjYXVzZQorICAgICAgICB0aGUg
ZGVmYXVsdCBxdWV1ZSBkb2Vzbid0IGNoYW5nZSBmcm9tIG9uZSBjYWxsIHRvIHRoZSBuZXh0Lgor
CisgICAgICAgICogV2ViR1BVL0FkYXB0ZXIubW06CisgICAgICAgIChXZWJHUFU6OkFkYXB0ZXI6
OnJlcXVlc3REZXZpY2UpOgorICAgICAgICAod2dwdUFkYXB0ZXJSZXF1ZXN0RGV2aWNlKToKKyAg
ICAgICAgKHdncHVBZGFwdGVyUmVxdWVzdERldmljZVdpdGhCbG9jayk6CisgICAgICAgICogV2Vi
R1BVL0RldmljZS5oOgorICAgICAgICAqIFdlYkdQVS9EZXZpY2UubW06CisgICAgICAgIChXZWJH
UFU6OkRldmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpnZXRRdWV1ZSk6
CisgICAgICAgICh3Z3B1RGV2aWNlR2V0UXVldWUpOgorCiAyMDIyLTAzLTEyICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0IEZBTExCQUNLX1BM
QVRGT1JNX05BTUUgaW4gcGxhY2Ugb2YgRkFMTEJBQ0tfUExBVEZPUk0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0FkYXB0ZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9BZGFw
dGVyLm1tCmluZGV4IGZjYTNiMGRmNjFmODkyZGU5ZjY5ZmIzODlkZmMwZDdkNDNlYmJiNDUuLmJh
ZGFmYzU2OGE4MmQ1Nzk0ZWFjY2VhNmZjYjQzODI1MmNhY2IyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0FkYXB0ZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQWRh
cHRlci5tbQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgQWRhcHRlcjo6cmVxdWVzdERldmljZShj
b25zdCBXR1BVRGV2aWNlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwgV1RGOjpGdW5jdGlvCiAKICAg
ICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gRGV2aWNlOjpzZXRMYWJlbCgpIGFib3V0IHdoeSB3ZSdy
ZSBub3Qgc2V0dGluZyB0aGUgbGFiZWwgaGVyZS4KIAotICAgIGNhbGxiYWNrKFdHUFVSZXF1ZXN0
RGV2aWNlU3RhdHVzX1N1Y2Nlc3MsIERldmljZTo6Y3JlYXRlKG1fZGV2aWNlKSwgbnVsbHB0cik7
CisgICAgY2FsbGJhY2soV0dQVVJlcXVlc3REZXZpY2VTdGF0dXNfU3VjY2VzcywgRGV2aWNlOjpj
cmVhdGUobV9kZXZpY2UsIGRlc2NyaXB0b3IubGFiZWwpLCBudWxscHRyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViR1BVCkBAIC0xNTUsMTMgKzE1NSwyMSBAQCBib29sIHdncHVBZGFwdGVySGFz
RmVhdHVyZShXR1BVQWRhcHRlciBhZGFwdGVyLCBXR1BVRmVhdHVyZU5hbWUgZmVhdHVyZSkKIHZv
aWQgd2dwdUFkYXB0ZXJSZXF1ZXN0RGV2aWNlKFdHUFVBZGFwdGVyIGFkYXB0ZXIsIGNvbnN0IFdH
UFVEZXZpY2VEZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBXR1BVUmVxdWVzdERldmljZUNhbGxiYWNr
IGNhbGxiYWNrLCB2b2lkKiB1c2VyZGF0YSkKIHsKICAgICBhZGFwdGVyLT5hZGFwdGVyLT5yZXF1
ZXN0RGV2aWNlKCpkZXNjcmlwdG9yLCBbY2FsbGJhY2ssIHVzZXJkYXRhXSAoV0dQVVJlcXVlc3RE
ZXZpY2VTdGF0dXMgc3RhdHVzLCBSZWZQdHI8V2ViR1BVOjpEZXZpY2U+JiYgZGV2aWNlLCBjb25z
dCBjaGFyKiBtZXNzYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrKHN0YXR1cywgZGV2aWNlID8gbmV3
IFdHUFVEZXZpY2VJbXBsIHsgZGV2aWNlLnJlbGVhc2VOb25OdWxsKCkgfSA6IG51bGxwdHIsIG1l
c3NhZ2UsIHVzZXJkYXRhKTsKKyAgICAgICAgaWYgKGRldmljZSkgeworICAgICAgICAgICAgYXV0
byYgcXVldWUgPSBkZXZpY2UtPmdldFF1ZXVlKCk7CisgICAgICAgICAgICBjYWxsYmFjayhzdGF0
dXMsIG5ldyBXR1BVRGV2aWNlSW1wbCB7IGRldmljZS5yZWxlYXNlTm9uTnVsbCgpLCB7IHF1ZXVl
IH0gfSwgbWVzc2FnZSwgdXNlcmRhdGEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNh
bGxiYWNrKHN0YXR1cywgbnVsbHB0ciwgbWVzc2FnZSwgdXNlcmRhdGEpOwogICAgIH0pOwogfQog
CiB2b2lkIHdncHVBZGFwdGVyUmVxdWVzdERldmljZVdpdGhCbG9jayhXR1BVQWRhcHRlciBhZGFw
dGVyLCBXR1BVRGV2aWNlRGVzY3JpcHRvciBjb25zdCAqIGRlc2NyaXB0b3IsIFdHUFVSZXF1ZXN0
RGV2aWNlQmxvY2tDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBhZGFwdGVyLT5hZGFwdGVyLT5y
ZXF1ZXN0RGV2aWNlKCpkZXNjcmlwdG9yLCBbY2FsbGJhY2tdIChXR1BVUmVxdWVzdERldmljZVN0
YXR1cyBzdGF0dXMsIFJlZlB0cjxXZWJHUFU6OkRldmljZT4mJiBkZXZpY2UsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2soc3RhdHVzLCBkZXZpY2UgPyBuZXcgV0dQVURl
dmljZUltcGwgeyBkZXZpY2UucmVsZWFzZU5vbk51bGwoKSB9IDogbnVsbHB0ciwgbWVzc2FnZSk7
CisgICAgICAgIGlmIChkZXZpY2UpIHsKKyAgICAgICAgICAgIGF1dG8mIHF1ZXVlID0gZGV2aWNl
LT5nZXRRdWV1ZSgpOworICAgICAgICAgICAgY2FsbGJhY2soc3RhdHVzLCBuZXcgV0dQVURldmlj
ZUltcGwgeyBkZXZpY2UucmVsZWFzZU5vbk51bGwoKSwgeyBxdWV1ZSB9IH0sIG1lc3NhZ2UpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxiYWNrKHN0YXR1cywgbnVsbHB0ciwgbWVz
c2FnZSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZp
Y2UuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5oCmluZGV4IDM4NzVlMzEyM2M3NzEw
ZjYxZDBhMzY5MWQwOGMxYjAwZWY1ZWU4NTAuLmQ4MDVkYzBmODgyNDE4ODc5MjhhM2QzOTlhY2Jl
Yjk3YWUzOTY5ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5oCisr
KyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0RldmljZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW1wb3J0ICJRdWV1ZS5oIgogI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2Mu
aD4KICNpbXBvcnQgPHd0Zi9GdW5jdGlvbi5oPgogI2ltcG9ydCA8d3RmL1JlZi5oPgpAQCAtNDcs
MTIgKzQ4LDExIEBAIGNsYXNzIFNoYWRlck1vZHVsZTsKIGNsYXNzIFN1cmZhY2U7CiBjbGFzcyBT
d2FwQ2hhaW47CiBjbGFzcyBUZXh0dXJlOwotY2xhc3MgUXVldWU7CiAKIGNsYXNzIERldmljZSA6
IHB1YmxpYyBSZWZDb3VudGVkPERldmljZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8RGV2aWNlPiBjcmVhdGUoaWQ8TVRMRGV2aWNl
Pik7CisgICAgc3RhdGljIFJlZlB0cjxEZXZpY2U+IGNyZWF0ZShpZDxNVExEZXZpY2U+LCBjb25z
dCBjaGFyKiBkZXZpY2VMYWJlbCk7CiAKICAgICB+RGV2aWNlKCk7CiAKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZGVzdHJveSgpOwogICAgIHNpemVfdCBlbnVtZXJhdGVGZWF0
dXJlcyhXR1BVRmVhdHVyZU5hbWUqIGZlYXR1cmVzKTsKICAgICBib29sIGdldExpbWl0cyhXR1BV
U3VwcG9ydGVkTGltaXRzJik7Ci0gICAgUmVmUHRyPFF1ZXVlPiBnZXRRdWV1ZSgpOworICAgIFF1
ZXVlJiBnZXRRdWV1ZSgpOwogICAgIGJvb2wgaGFzRmVhdHVyZShXR1BVRmVhdHVyZU5hbWUpOwog
ICAgIGJvb2wgcG9wRXJyb3JTY29wZShXVEY6OkZ1bmN0aW9uPHZvaWQoV0dQVUVycm9yVHlwZSwg
Y29uc3QgY2hhciopPiYmIGNhbGxiYWNrKTsKICAgICB2b2lkIHB1c2hFcnJvclNjb3BlKFdHUFVF
cnJvckZpbHRlcik7CkBAIC05Myw0ICs5Myw1IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBXR1BVRGV2
aWNlSW1wbCB7CiAgICAgUmVmPFdlYkdQVTo6RGV2aWNlPiBkZXZpY2U7CisgICAgV0dQVVF1ZXVl
SW1wbCBkZWZhdWx0UXVldWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
RGV2aWNlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvRGV2aWNlLm1tCmluZGV4IGM4M2Y4NDNj
MjY0N2Y3OWFmMTY2MjExMTc1NTQ5YzhjMmMzN2RiYmEuLjFhNGM1ZmQ4NDk0YWU3NzUxMjg0YWJh
NTkwMWUzZjljZGM3YmRmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Rldmlj
ZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9EZXZpY2UubW0KQEAgLTQ1LDEzICs0NSwx
NyBAQAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAotUmVmUHRyPERldmljZT4gRGV2aWNlOjpjcmVh
dGUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCitSZWZQdHI8RGV2aWNlPiBEZXZpY2U6OmNyZWF0ZShp
ZDxNVExEZXZpY2U+IGRldmljZSwgY29uc3QgY2hhciogZGV2aWNlTGFiZWwpCiB7CiAgICAgaWQ8
TVRMQ29tbWFuZFF1ZXVlPiBjb21tYW5kUXVldWUgPSBbZGV2aWNlIG5ld0NvbW1hbmRRdWV1ZV07
CiAgICAgaWYgKCFjb21tYW5kUXVldWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1
dG8gcXVldWUgPSBRdWV1ZTo6Y3JlYXRlKGNvbW1hbmRRdWV1ZSk7CiAKKyAgICBjb21tYW5kUXVl
dWUubGFiZWwgPSBAIkRlZmF1bHQgcXVldWUiOworICAgIGlmIChkZXZpY2VMYWJlbCAmJiBzdHJs
ZW4oZGV2aWNlTGFiZWwpKQorICAgICAgICBjb21tYW5kUXVldWUubGFiZWwgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIkRlZmF1bHQgcXVldWUgZm9yIGRldmljZSAlcyIsIGRldmljZUxh
YmVsXTsKKwogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERldmljZShkZXZpY2UsIFdURk1vdmUo
cXVldWUpKSk7CiB9CiAKQEAgLTg0LDkgKzg4LDkgQEAgYm9vbCBEZXZpY2U6OmdldExpbWl0cyhX
R1BVU3VwcG9ydGVkTGltaXRzJiBsaW1pdHMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0
cjxRdWV1ZT4gRGV2aWNlOjpnZXRRdWV1ZSgpCitRdWV1ZSYgRGV2aWNlOjpnZXRRdWV1ZSgpCiB7
Ci0gICAgcmV0dXJuIG1fZGVmYXVsdFF1ZXVlLmNvcHlSZWYoKTsKKyAgICByZXR1cm4gbV9kZWZh
dWx0UXVldWU7CiB9CiAKIGJvb2wgRGV2aWNlOjpoYXNGZWF0dXJlKFdHUFVGZWF0dXJlTmFtZSkK
QEAgLTI1NSw4ICsyNTksNyBAQCBib29sIHdncHVEZXZpY2VHZXRMaW1pdHMoV0dQVURldmljZSBk
ZXZpY2UsIFdHUFVTdXBwb3J0ZWRMaW1pdHMqIGxpbWl0cykKIAogV0dQVVF1ZXVlIHdncHVEZXZp
Y2VHZXRRdWV1ZShXR1BVRGV2aWNlIGRldmljZSkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IGRldmlj
ZS0+ZGV2aWNlLT5nZXRRdWV1ZSgpOwotICAgIHJldHVybiByZXN1bHQgPyBuZXcgV0dQVVF1ZXVl
SW1wbCB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpIH0gOiBudWxscHRyOworICAgIHJldHVybiAm
ZGV2aWNlLT5kZWZhdWx0UXVldWU7CiB9CiAKIGJvb2wgd2dwdURldmljZUhhc0ZlYXR1cmUoV0dQ
VURldmljZSBkZXZpY2UsIFdHUFVGZWF0dXJlTmFtZSBmZWF0dXJlKQo=
</data>
<flag name="review"
          id="482360"
          type_id="1"
          status="+"
          setter="kkinnunen"
    />
    <flag name="commit-queue"
          id="482405"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>