-
Notifications
You must be signed in to change notification settings - Fork 7
/
index3.html
598 lines (557 loc) · 107 KB
/
index3.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Store Halfword Byte-Reverse Indexed</title>
<meta name="author" content="OzLabs">
<link href="https://sthbrx.github.io/rss.xml" type="application/rss+xml" rel="alternate"
title="Store Halfword Byte-Reverse Indexed RSS Feed" />
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://sthbrx.github.io/favicon.png" rel="icon">
<link href="https://sthbrx.github.io/theme/css/main.css" media="screen, projection"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
var ts = document.createElement('span')
ts.className = 'toggle-sidebar'
ts = document.getElementById('content').appendChild(ts);
ts.addEventListener('click', function(e) {
e.preventDefault();
body = document.getElementsByTagName('body')[0];
bodyClasses = body.classList.toggle('collapse-sidebar');
});
var sections = document.querySelectorAll('aside.sidebar > section');
if (sections.length > 1) {
for (index = 0; index < sections.length; index++) {
section = sections[index];
if ((sections.length >= 3) && index % 3 === 0) {
section.classList.add("first");
}
var count = ((index +1) % 2) ? "odd" : "even";
section.classList.add(count);
}
}
if (sections.length >= 3) {
document.querySelector('aside.sidebar').classList.add('thirds');
}
});
</script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-91189608-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<header role="banner"><hgroup>
<h1><a href="https://sthbrx.github.io/">Store Halfword Byte-Reverse Indexed</a></h1>
<h2>A Power Technical Blog</h2>
</hgroup></header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="https://sthbrx.github.io/rss.xml" rel="subscribe-rss">RSS</a></li>
</ul>
<ul class="main-navigation">
<li >
<a href="https://sthbrx.github.io/category/cryptography.html">Cryptography</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/development.html">Development</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/education.html">Education</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/openpower.html">OpenPOWER</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/performance.html">Performance</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/petitboot.html">Petitboot</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/snowpatch.html">snowpatch</a>
</li>
<li >
<a href="https://sthbrx.github.io/category/virtualisation-and-emulation.html">Virtualisation and Emulation</a>
</li>
</ul></nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<h1 class="entry-title">
<a href="https://sthbrx.github.io/blog/2019/12/18/rfid-and-hrfid/">rfid and hrfid</a>
</h1>
<p class="meta">
<time datetime="2019-12-18T17:30:00+11:00" pubdate>Wed 18 December 2019</time> </p>
</header>
<div class="byline_index">
<span class="byline author vcard">
Posted by <span class="fn">
<a href="https://sthbrx.github.io/author/andrew-donnellan.html">Andrew Donnellan</a>
</span>
</span>
<time datetime="2019-12-18T17:30:00+11:00" pubdate>Wed 18 December 2019</time></div>
<div class="entry-content"><p>I was staring at some assembly recently, and for not the first time encountered <em>rfid</em> and <em>hrfid</em>, two instructions that we use when doing things like returning to userspace, returning from OPAL to the kernel, or from a host kernel into a guest.</p>
<p><em>rfid</em> copies various bits from the register SRR1 (Machine Status Save/Restore Register 1) into the MSR (Machine State Register), and then jumps to an address given in SRR0 (Machine Status Save/Restore Register 0). <em>hrfid</em> does something similar, using HSRR0 and HSRR1 (Hypervisor Machine Status Save/Restore Registers 0/1), and slightly different handling of MSR bits.</p>
<p>The various Save/Restore Registers are used to preserve the state of the CPU before jumping to an interrupt handler, entering the kernel, etc, and are set up as part of instructions like <em>sc</em> (System Call), by the interrupt mechanism, or manually (using instructions like <em>mtsrr1</em>).</p>
<p>Anyway, the way in which <em>rfid</em> and <em>hrfid</em> restores MSR bits is documented somewhat obtusely in the ISA (if you don't believe me, look it up), and I was annoyed by this, so here, have a more useful definition. Leave a comment if I got something wrong.</p>
<h1>rfid - Return From Interrupt Doubleword</h1>
<h2>Machine State Register</h2>
<p>Copy all bits (except some reserved bits) from SRR1 into the MSR, with the following exceptions:</p>
<ul>
<li>
<p>MSR_3 (HV, Hypervisor State) = MSR_3 & SRR1_3<br>
[We won't put the thread into hypervisor state if we're not already in hypervisor state]</p>
</li>
<li>
<p>If MSR_29:31 != 0b010 [Transaction State Suspended, TM not available], or SRR1_29:31 != 0b000 [Transaction State Non-transactional, TM not available] then:</p>
<ul>
<li>MSR_29:30 (TS, Transaction State) = SRR1_29:30</li>
<li>MSR_31 (TM, Transactional Memory Available) = SRR1_31</li>
</ul>
<p>[See the ISA description for explanation on how rfid interacts with TM and resulting interrupts]</p>
</li>
<li>
<p>MSR_48 (EE, External Interrupt Enable) = SRR1_48 | SRR1_49 (PR, Problem State)<br>
[If going into problem state, external interrupts will be enabled]</p>
</li>
<li>
<p>MSR_51 (ME, Machine Check Interrupt Enable) = (MSR_3 (HV, Hypervisor State) & SRR1_51) | ((! MSR_3) & MSR_51)<br>
[If we're not already in hypervisor state, we won't alter ME]</p>
</li>
<li>
<p>MSR_58 (IR, Instruction Relocate) = SRR1_58 | SRR1_49 (PR, Problem State)<br>
[If going into problem state, relocation will be enabled]</p>
</li>
<li>
<p>MSR_59 (DR, Data Relocate) = SRR1_59 | SRR1_49 (PR, Problem State)<br>
[If going into problem state, relocation will be enabled]</p>
</li>
</ul>
<h2>Next Instruction Address</h2>
<ul>
<li>NIA = SRR0_0:61 || 0b00<br>
[Jump to SRR0, set last 2 bits to zero to ensure address is aligned to 4 bytes]</li>
</ul>
<h1>hrfid - Hypervisor Return From Interrupt Doubleword</h1>
<h2>Machine State Register</h2>
<p>Copy all bits (except some reserved bits) from HSRR1 into the MSR, with the following exceptions:</p>
<ul>
<li>
<p>If MSR_29:31 != 0b010 [Transaction State Suspended, TM not available], or HSRR1_29:31 != 0b000 [Transaction State Non-transactional, TM not available] then:</p>
<ul>
<li>MSR_29:30 (TS, Transaction State) = HSRR1_29:30</li>
<li>MSR_31 (TM, Transactional Memory Available) = HSRR1_31</li>
</ul>
<p>[See the ISA description for explanation on how rfid interacts with TM and resulting interrupts]</p>
</li>
<li>
<p>MSR_48 (EE, External Interrupt Enable) = HSRR1_48 | HSRR1_49 (PR, Problem State)<br>
[If going into problem state, external interrupts will be enabled]</p>
</li>
<li>
<p>MSR_58 (IR, Instruction Relocate) = HSRR1_58 | HSRR1_49 (PR, Problem State)<br>
[If going into problem state, relocation will be enabled]</p>
</li>
<li>
<p>MSR_59 (DR, Data Relocate) = HSRR1_59 | HSRR1_49 (PR, Problem State)<br>
[If going into problem state, relocation will be enabled]</p>
</li>
</ul>
<h2>Next Instruction Address</h2>
<ul>
<li>NIA = HSRR0_0:61 || 0b00<br>
[Jump to HSRR0, set last 2 bits to zero to ensure address is aligned to 4 bytes]</li>
</ul></div>
</article>
<article>
<header>
<h1 class="entry-title">
<a href="https://sthbrx.github.io/blog/2019/06/18/ten-thousand-disks/">TEN THOUSAND DISKS</a>
</h1>
<p class="meta">
<time datetime="2019-06-18T16:47:00+10:00" pubdate>Tue 18 June 2019</time> </p>
</header>
<div class="byline_index">
<span class="byline author vcard">
Posted by <span class="fn">
<a href="https://sthbrx.github.io/author/samuel-mendoza-jonas.html">Samuel Mendoza-Jonas</a>
</span>
</span>
<time datetime="2019-06-18T16:47:00+10:00" pubdate>Tue 18 June 2019</time></div>
<div class="entry-content"><p>In OpenPOWER land we have a project called <a href="https://github.com/open-power/op-test-framework/">op-test-framework</a> which (for all its strengths and weaknesses) allows us to test firmware on a variety of different hardware platforms and even emulators like Qemu.</p>
<p>Qemu is a fantasic tool allowing us to relatively quickly test against an emulated POWER model, and of course is a critical part of KVM virtual machines running natively on POWER hardware. However the default POWER model in Qemu is based on the "pseries" machine type, which models something closer to a virtual machine or a PowerVM partition rather than a "bare metal" machine.</p>
<p>Luckily we have <a href="https://github.com/legoater">Cédric Le Goater</a> who is <a href="https://github.com/legoater/qemu">developing and maintaining</a> a Qemu "powernv" machine type which more accurately models running directly on an OpenPOWER machine. It's an unwritten rule that if you're using Qemu in op-test, you've compiled this version of Qemu!</p>
<h2>Teething Problems</h2>
<p>Because the "powernv" type does more accurately model the physical system some extra care needs to be taken when setting it up. In particular at one point we noticed that the pretend CDROM and disk drive we attached to the model were.. not being attached. <a href="https://github.com/open-power/op-test-framework/commit/1a97bc92c6029cfda91f565face260b806c04d86">This commit</a> took care of that; the problem was that the <a href="https://github.com/legoater/qemu/wiki/PowerNV#complex-configuration">PCI topology</a> defined by the layout required us to be more exact about where PCI devices were to be added. By default only three spare PCI "slots" are available but as the commit says, "This can be expanded by adding bridges"...</p>
<h2>More Slots!</h2>
<p>Never one to stop at a just-enough solution, I wondered how easy it would be to add an extra PCI bridge or two to give the Qemu model more available slots for PCI devices. It turns out, easy enough once you know the correct invocation. For example, adding a PCI bridge in the first slot of the first default PHB is:</p>
<div class="highlight"><pre><span></span><code><span class="o">-</span><span class="nx">device</span><span class="w"> </span><span class="nx">pcie</span><span class="o">-</span><span class="nx">pci</span><span class="o">-</span><span class="nx">bridge</span><span class="p">,</span><span class="nx">id</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.3</span><span class="p">,</span><span class="nx">bus</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.0</span><span class="p">,</span><span class="kd">addr</span><span class="p">=</span><span class="mh">0x0</span>
</code></pre></div>
<p>And inserting a device in that bridge just requires us to specify the bus and slot:</p>
<div class="highlight"><pre><span></span><code><span class="o">-</span><span class="nx">device</span><span class="w"> </span><span class="nx">virtio</span><span class="o">-</span><span class="nx">blk</span><span class="o">-</span><span class="nx">pci</span><span class="p">,</span><span class="nx">drive</span><span class="p">=</span><span class="nx">cdrom01</span><span class="p">,</span><span class="nx">id</span><span class="p">=</span><span class="nx">virtio02</span><span class="p">,</span><span class="nx">bus</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.4</span><span class="p">,</span><span class="kd">addr</span><span class="p">=</span><span class="mi">3</span>
</code></pre></div>
<p>Great! Each bridge provides 31 slots, so now we have plenty of room for extra devices.</p>
<h2>Why Stop There?</h2>
<p>We have three free slots, and we don't have a strict requirement on where devices are plugged in, so lets just plug a bridge into each of those slots while we're here:</p>
<div class="highlight"><pre><span></span><code><span class="o">-</span><span class="nx">device</span><span class="w"> </span><span class="nx">pcie</span><span class="o">-</span><span class="nx">pci</span><span class="o">-</span><span class="nx">bridge</span><span class="p">,</span><span class="nx">id</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.3</span><span class="p">,</span><span class="nx">bus</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.0</span><span class="p">,</span><span class="kd">addr</span><span class="p">=</span><span class="mh">0x0</span><span class="w"> </span>\
<span class="o">-</span><span class="nx">device</span><span class="w"> </span><span class="nx">pcie</span><span class="o">-</span><span class="nx">pci</span><span class="o">-</span><span class="nx">bridge</span><span class="p">,</span><span class="nx">id</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.4</span><span class="p">,</span><span class="nx">bus</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.1</span><span class="p">,</span><span class="kd">addr</span><span class="p">=</span><span class="mh">0x0</span><span class="w"> </span>\
<span class="o">-</span><span class="nx">device</span><span class="w"> </span><span class="nx">pcie</span><span class="o">-</span><span class="nx">pci</span><span class="o">-</span><span class="nx">bridge</span><span class="p">,</span><span class="nx">id</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.5</span><span class="p">,</span><span class="nx">bus</span><span class="p">=</span><span class="nx">pcie</span><span class="m m-Double">.2</span><span class="p">,</span><span class="kd">addr</span><span class="p">=</span><span class="mh">0x0</span>
</code></pre></div>
<p>What happens if we insert a new PCI bridge into another PCI bridge? Aside from stressing out our PCI developers, a bunch of extra slots! And then we could plug bridges into those bridges and then..</p>
<iframe src="https://giphy.com/embed/VB5WwlZIt8eRy" width="480" height="199" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>
<p><br></p>
<p>Thus was born <a href="https://github.com/open-power/op-test-framework/commit/6e78eea78a2f2cf37ebdd2cccbd5b18a7050c1eb">"OpTestQemu: Add PCI bridges to support more devices."</a> and the testcase <a href="https://github.com/open-power/op-test-framework/blob/master/testcases/Petitboot10000Disks.py">"Petitboot10000Disks"</a>.
The changes to the Qemu model setup fill up each PCI bridge as long as we have devices to add, but reserve the first slot to add another bridge if we run out of room... and so on..</p>
<p>Officially this is to support adding interesting disk topologies to test Pettiboot use cases, stress test device handling, and so on, but while we're here... what happens with 10,000 temporary disks?</p>
<div class="highlight"><pre><span></span><code><span class="o">======================================================================</span>
<span class="nl">ERROR</span><span class="p">:</span><span class="w"> </span><span class="n">testListDisks</span><span class="w"> </span><span class="p">(</span><span class="n">testcases</span><span class="p">.</span><span class="n">Petitboot10000Disks</span><span class="p">.</span><span class="n">ConfigEditorTestCase</span><span class="p">)</span>
<span class="o">----------------------------------------------------------------------</span>
<span class="n">Traceback</span><span class="w"> </span><span class="p">(</span><span class="n">most</span><span class="w"> </span><span class="n">recent</span><span class="w"> </span><span class="k">call</span><span class="w"> </span><span class="k">last</span><span class="p">)</span><span class="err">:</span>
<span class="w"> </span><span class="k">File</span><span class="w"> </span><span class="ss">"/home/sam/git/op-test-framework/testcases/Petitboot10000Disks.py"</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="mi">27</span><span class="p">,</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">setUp</span>
<span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="k">system</span><span class="p">.</span><span class="n">goto_state</span><span class="p">(</span><span class="n">OpSystemState</span><span class="p">.</span><span class="n">PETITBOOT_SHELL</span><span class="p">)</span>
<span class="w"> </span><span class="k">File</span><span class="w"> </span><span class="ss">"/home/sam/git/op-test-framework/common/OpTestSystem.py"</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="mi">366</span><span class="p">,</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">goto_state</span>
<span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="k">state</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">self</span><span class="p">.</span><span class="n">stateHandlers</span><span class="o">[</span><span class="n">self.state</span><span class="o">]</span><span class="p">(</span><span class="k">state</span><span class="p">)</span>
<span class="w"> </span><span class="k">File</span><span class="w"> </span><span class="ss">"/home/sam/git/op-test-framework/common/OpTestSystem.py"</span><span class="p">,</span><span class="w"> </span><span class="n">line</span><span class="w"> </span><span class="mi">695</span><span class="p">,</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">run_IPLing</span>
<span class="w"> </span><span class="n">raise</span><span class="w"> </span><span class="n">my_exception</span>
<span class="nl">UnknownStateTransition</span><span class="p">:</span><span class="w"> </span><span class="n">Something</span><span class="w"> </span><span class="n">happened</span><span class="w"> </span><span class="k">system</span><span class="w"> </span><span class="k">state</span><span class="o">=</span><span class="ss">"2"</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">we</span><span class="w"> </span><span class="n">transitioned</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="k">UNKNOWN</span><span class="w"> </span><span class="k">state</span><span class="p">.</span><span class="w"> </span><span class="n">Review</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">following</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">more</span><span class="w"> </span><span class="n">details</span>
<span class="n">Message</span><span class="o">=</span><span class="ss">"OpTestSystem in run_IPLing and the Exception=</span>
<span class="ss">"</span><span class="n">filedescriptor</span><span class="w"> </span><span class="k">out</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="k">range</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="k">select</span><span class="p">()</span><span class="ss">"</span>
<span class="ss"> caused the system to go to UNKNOWN_BAD and the system will be stopping."</span>
</code></pre></div>
<p>Yeah that's probably to be expected without some more massaging. What about a more modest 512?</p>
<div class="highlight"><pre><span></span><code><span class="n">I</span><span class="o">:</span><span class="w"> </span><span class="n">Resetting</span><span class="w"> </span><span class="n">PHBs</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">training</span><span class="w"> </span><span class="n">links</span><span class="o">...</span>
<span class="o">[</span><span class="w"> </span><span class="mf">55.293343496</span><span class="o">,</span><span class="mi">5</span><span class="o">]</span><span class="w"> </span><span class="n">PCI</span><span class="o">:</span><span class="w"> </span><span class="n">Probing</span><span class="w"> </span><span class="n">slots</span><span class="o">...</span>
<span class="o">[</span><span class="w"> </span><span class="mf">56.364337089</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">56.364973775</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">57.127964432</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">57.128545637</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">57.395489618</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">57.396048285</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">58.145944205</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">58.146465795</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">58.404954853</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">58.405485438</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0000</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.178957315</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.179524173</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.198502097</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">02.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.198982582</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">02.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.435096197</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">60.435634380</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">61.171512439</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">61.172029071</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">61.425416049</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">61.425934524</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">62.172664549</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">62.173186458</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0001</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">63.434516732</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">63.435062124</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">02</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">64.177567772</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">64.178099773</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">03</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">64.431763989</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">64.432285000</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">04</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">65.180506790</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">65.181049905</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">05</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">65.432105600</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
<span class="o">[</span><span class="w"> </span><span class="mf">65.432654326</span><span class="o">,</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="n">PHB</span><span class="err">#</span><span class="mi">0002</span><span class="o">:</span><span class="mi">06</span><span class="o">:</span><span class="mf">01.0</span><span class="w"> </span><span class="n">pci_find_ecap</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="o">!</span>
</code></pre></div>
<p>(That isn't good)</p>
<div class="highlight"><pre><span></span><code><span class="o">[</span><span class="n"> 66.177240655,5</span><span class="o">]</span><span class="w"> </span><span class="n">PCI</span><span class="w"> </span><span class="nl">Summary</span><span class="p">:</span>
<span class="o">[</span><span class="n"> 66.177906083,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">00</span><span class="err">:</span><span class="mf">00.0</span><span class="w"> </span><span class="o">[</span><span class="n">ROOT</span><span class="o">]</span><span class="w"> </span><span class="mi">1014</span><span class="w"> </span><span class="mi">03</span><span class="n">dc</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">01..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.178760724,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">01</span><span class="err">:</span><span class="mf">00.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">02..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.179501494,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">02</span><span class="err">:</span><span class="mf">01.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">03..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.180227773,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">03</span><span class="err">:</span><span class="mf">01.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">04..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.180953149,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">04</span><span class="err">:</span><span class="mf">01.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">05..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.181673576,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">05</span><span class="err">:</span><span class="mf">01.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">06..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.182395253,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">06</span><span class="err">:</span><span class="mf">01.0</span><span class="w"> </span><span class="o">[</span><span class="n">ETOX</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">b36</span><span class="w"> </span><span class="mi">000</span><span class="n">e</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">060400</span><span class="w"> </span><span class="nl">B</span><span class="p">:</span><span class="mf">07..07</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.183207399,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">07</span><span class="err">:</span><span class="mf">02.0</span><span class="w"> </span><span class="o">[</span><span class="n">PCID</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">af4</span><span class="w"> </span><span class="mi">1001</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">010000</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">scsi</span><span class="p">)</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 66.183969138,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0000</span><span class="err">:</span><span class="mi">07</span><span class="err">:</span><span class="mf">03.0</span><span class="w"> </span><span class="o">[</span><span class="n">PCID</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">af4</span><span class="w"> </span><span class="mi">1001</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">010000</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">scsi</span><span class="p">)</span><span class="w"> </span>
</code></pre></div>
<p>(a lot more of this)</p>
<div class="highlight"><pre><span></span><code><span class="o">[</span><span class="n"> 67.055196945,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0002</span><span class="err">:</span><span class="mi">02</span><span class="err">:</span><span class="mi">1</span><span class="n">e</span><span class="mf">.0</span><span class="w"> </span><span class="o">[</span><span class="n">PCID</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">af4</span><span class="w"> </span><span class="mi">1001</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">010000</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">scsi</span><span class="p">)</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 67.055926264,5</span><span class="o">]</span><span class="w"> </span><span class="n">PHB#0002</span><span class="err">:</span><span class="mi">02</span><span class="err">:</span><span class="mi">1</span><span class="n">f</span><span class="mf">.0</span><span class="w"> </span><span class="o">[</span><span class="n">PCID</span><span class="o">]</span><span class="w"> </span><span class="mi">1</span><span class="n">af4</span><span class="w"> </span><span class="mi">1001</span><span class="w"> </span><span class="nl">R</span><span class="p">:</span><span class="mi">00</span><span class="w"> </span><span class="nl">C</span><span class="p">:</span><span class="mi">010000</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">scsi</span><span class="p">)</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 67.094591773,5</span><span class="o">]</span><span class="w"> </span><span class="nl">INIT</span><span class="p">:</span><span class="w"> </span><span class="n">Waiting</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">kernel</span><span class="p">...</span>
<span class="o">[</span><span class="n"> 67.095105901,5</span><span class="o">]</span><span class="w"> </span><span class="nl">INIT</span><span class="p">:</span><span class="w"> </span><span class="mi">64</span><span class="o">-</span><span class="nc">bit</span><span class="w"> </span><span class="n">LE</span><span class="w"> </span><span class="n">kernel</span><span class="w"> </span><span class="n">discovered</span>
<span class="o">[</span><span class="n"> 68.095749915,5</span><span class="o">]</span><span class="w"> </span><span class="nl">INIT</span><span class="p">:</span><span class="w"> </span><span class="n">Starting</span><span class="w"> </span><span class="n">kernel</span><span class="w"> </span><span class="k">at</span><span class="w"> </span><span class="mh">0x20010000</span><span class="p">,</span><span class="w"> </span><span class="n">fdt</span><span class="w"> </span><span class="k">at</span><span class="w"> </span><span class="mh">0x3075d270</span><span class="w"> </span><span class="mi">168365</span><span class="w"> </span><span class="n">bytes</span>
<span class="n">zImage</span><span class="w"> </span><span class="nl">starting</span><span class="p">:</span><span class="w"> </span><span class="n">loaded</span><span class="w"> </span><span class="k">at</span><span class="w"> </span><span class="mh">0x0000000020010000</span><span class="w"> </span><span class="p">(</span><span class="nl">sp</span><span class="p">:</span><span class="w"> </span><span class="mh">0x0000000020d30ee8</span><span class="p">)</span>
<span class="n">Allocating</span><span class="w"> </span><span class="mh">0x1dc5098</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">kernel</span><span class="p">...</span>
<span class="n">Decompressing</span><span class="w"> </span><span class="p">(</span><span class="mh">0x0000000000000000</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="mh">0x000000002001f000</span><span class="err">:</span><span class="mh">0x0000000020d2e578</span><span class="p">)...</span>
<span class="n">Done</span><span class="err">!</span><span class="w"> </span><span class="n">Decompressed</span><span class="w"> </span><span class="mh">0x1c22900</span><span class="w"> </span><span class="n">bytes</span>
<span class="n">Linux</span><span class="o">/</span><span class="n">PowerPC</span><span class="w"> </span><span class="k">load</span><span class="err">:</span><span class="w"> </span>
<span class="n">Finalizing</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">tree</span><span class="p">...</span><span class="w"> </span><span class="n">flat</span><span class="w"> </span><span class="n">tree</span><span class="w"> </span><span class="k">at</span><span class="w"> </span><span class="mh">0x20d320a0</span>
<span class="o">[</span><span class="n"> 10.120562</span><span class="o">]</span><span class="w"> </span><span class="nl">watchdog</span><span class="p">:</span><span class="w"> </span><span class="n">CPU</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">self</span><span class="o">-</span><span class="n">detected</span><span class="w"> </span><span class="n">hard</span><span class="w"> </span><span class="n">LOCKUP</span><span class="w"> </span><span class="err">@</span><span class="w"> </span><span class="n">pnv_pci_cfg_write</span><span class="o">+</span><span class="mh">0x88</span><span class="o">/</span><span class="mh">0xa4</span>
<span class="o">[</span><span class="n"> 10.120746</span><span class="o">]</span><span class="w"> </span><span class="nl">watchdog</span><span class="p">:</span><span class="w"> </span><span class="n">CPU</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nl">TB</span><span class="p">:</span><span class="mi">50402010473</span><span class="p">,</span><span class="w"> </span><span class="k">last</span><span class="w"> </span><span class="n">heartbeat</span><span class="w"> </span><span class="nl">TB</span><span class="p">:</span><span class="mi">45261673150</span><span class="w"> </span><span class="p">(</span><span class="mi">10039</span><span class="n">ms</span><span class="w"> </span><span class="n">ago</span><span class="p">)</span>
<span class="o">[</span><span class="n"> 10.120808</span><span class="o">]</span><span class="w"> </span><span class="n">Modules</span><span class="w"> </span><span class="n">linked</span><span class="w"> </span><span class="ow">in</span><span class="err">:</span>
<span class="o">[</span><span class="n"> 10.120906</span><span class="o">]</span><span class="w"> </span><span class="nl">CPU</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nl">PID</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="nl">Comm</span><span class="p">:</span><span class="w"> </span><span class="n">swapper</span><span class="o">/</span><span class="mi">0</span><span class="w"> </span><span class="ow">Not</span><span class="w"> </span><span class="n">tainted</span><span class="w"> </span><span class="mf">5.0.5</span><span class="o">-</span><span class="n">openpower1</span><span class="w"> </span><span class="n">#2</span>
<span class="o">[</span><span class="n"> 10.120956</span><span class="o">]</span><span class="w"> </span><span class="nl">NIP</span><span class="p">:</span><span class="w"> </span><span class="n">c000000000058544</span><span class="w"> </span><span class="nl">LR</span><span class="p">:</span><span class="w"> </span><span class="n">c00000000004d458</span><span class="w"> </span><span class="nl">CTR</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000030052768</span>
<span class="o">[</span><span class="n"> 10.121006</span><span class="o">]</span><span class="w"> </span><span class="nl">REGS</span><span class="p">:</span><span class="w"> </span><span class="n">c0000000fff5bd70</span><span class="w"> </span><span class="nl">TRAP</span><span class="p">:</span><span class="w"> </span><span class="mi">0900</span><span class="w"> </span><span class="ow">Not</span><span class="w"> </span><span class="n">tainted</span><span class="w"> </span><span class="p">(</span><span class="mf">5.0.5</span><span class="o">-</span><span class="n">openpower1</span><span class="p">)</span>
<span class="o">[</span><span class="n"> 10.121030</span><span class="o">]</span><span class="w"> </span><span class="nl">MSR</span><span class="p">:</span><span class="w"> </span><span class="mi">9000000002009033</span><span class="w"> </span><span class="o"><</span><span class="n">SF</span><span class="p">,</span><span class="n">HV</span><span class="p">,</span><span class="n">VEC</span><span class="p">,</span><span class="n">EE</span><span class="p">,</span><span class="n">ME</span><span class="p">,</span><span class="n">IR</span><span class="p">,</span><span class="n">DR</span><span class="p">,</span><span class="n">RI</span><span class="p">,</span><span class="n">LE</span><span class="o">></span><span class="w"> </span><span class="nl">CR</span><span class="p">:</span><span class="w"> </span><span class="mi">48002482</span><span class="w"> </span><span class="nl">XER</span><span class="p">:</span><span class="w"> </span><span class="mi">20000000</span>
<span class="o">[</span><span class="n"> 10.121215</span><span class="o">]</span><span class="w"> </span><span class="nl">CFAR</span><span class="p">:</span><span class="w"> </span><span class="n">c00000000004d454</span><span class="w"> </span><span class="nl">IRQMASK</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121260</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR00</span><span class="p">:</span><span class="w"> </span><span class="mi">00000000300051</span><span class="n">ec</span><span class="w"> </span><span class="n">c0000000fd7c3130</span><span class="w"> </span><span class="n">c000000001bcaf00</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121368</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR04</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000048002482</span><span class="w"> </span><span class="n">c000000000058544</span><span class="w"> </span><span class="mi">9000000002009033</span><span class="w"> </span><span class="mi">0000000031</span><span class="n">c40060</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121476</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR08</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000031</span><span class="n">c40060</span><span class="w"> </span><span class="n">c00000000004d46c</span><span class="w"> </span><span class="mi">9000000002001003</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121584</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR12</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000031</span><span class="n">c40000</span><span class="w"> </span><span class="n">c000000001dd0000</span><span class="w"> </span><span class="n">c00000000000f560</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121692</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR16</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000001</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121800</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR20</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.121908</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR24</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000000000005</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000000</span><span class="w"> </span><span class="mi">0000000000000104</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.122016</span><span class="o">]</span><span class="w"> </span><span class="nl">GPR28</span><span class="p">:</span><span class="w"> </span><span class="mi">0000000000000002</span><span class="w"> </span><span class="mi">0000000000000004</span><span class="w"> </span><span class="mi">0000000000000086</span><span class="w"> </span><span class="n">c0000000fd9fba00</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.122150</span><span class="o">]</span><span class="w"> </span><span class="n">NIP</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000058544</span><span class="o">]</span><span class="w"> </span><span class="n">pnv_pci_cfg_write</span><span class="o">+</span><span class="mh">0x88</span><span class="o">/</span><span class="mh">0xa4</span>
<span class="o">[</span><span class="n"> 10.122187</span><span class="o">]</span><span class="w"> </span><span class="n">LR</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000004d458</span><span class="o">]</span><span class="w"> </span><span class="n">opal_return</span><span class="o">+</span><span class="mh">0x14</span><span class="o">/</span><span class="mh">0x48</span>
<span class="o">[</span><span class="n"> 10.122204</span><span class="o">]</span><span class="w"> </span><span class="k">Call</span><span class="w"> </span><span class="nl">Trace</span><span class="p">:</span>
<span class="o">[</span><span class="n"> 10.122251</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3130</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000058544</span><span class="o">]</span><span class="w"> </span><span class="n">pnv_pci_cfg_write</span><span class="o">+</span><span class="mh">0x88</span><span class="o">/</span><span class="mh">0xa4</span><span class="w"> </span><span class="p">(</span><span class="n">unreliable</span><span class="p">)</span>
<span class="o">[</span><span class="n"> 10.122332</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3150</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000000585d0</span><span class="o">]</span><span class="w"> </span><span class="n">pnv_pci_write_config</span><span class="o">+</span><span class="mh">0x70</span><span class="o">/</span><span class="mh">0x9c</span>
<span class="o">[</span><span class="n"> 10.122398</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c31a0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000234fec</span><span class="o">]</span><span class="w"> </span><span class="n">pci_bus_write_config_word</span><span class="o">+</span><span class="mh">0x74</span><span class="o">/</span><span class="mh">0x98</span>
<span class="o">[</span><span class="n"> 10.122458</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c31f0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023764c</span><span class="o">]</span><span class="w"> </span><span class="n">__pci_read_base</span><span class="o">+</span><span class="mh">0x88</span><span class="o">/</span><span class="mh">0x3a4</span>
<span class="o">[</span><span class="n"> 10.122518</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c32c0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000237a18</span><span class="o">]</span><span class="w"> </span><span class="n">pci_read_bases</span><span class="o">+</span><span class="mh">0xb0</span><span class="o">/</span><span class="mh">0xc8</span>
<span class="o">[</span><span class="n"> 10.122605</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3300</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000002384bc</span><span class="o">]</span><span class="w"> </span><span class="n">pci_setup_device</span><span class="o">+</span><span class="mh">0x4f8</span><span class="o">/</span><span class="mh">0x5b0</span>
<span class="o">[</span><span class="n"> 10.122670</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c33a0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000238d9c</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_single_device</span><span class="o">+</span><span class="mh">0x9c</span><span class="o">/</span><span class="mh">0xd4</span>
<span class="o">[</span><span class="n"> 10.122729</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c33f0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000238e2c</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_slot</span><span class="o">+</span><span class="mh">0x58</span><span class="o">/</span><span class="mh">0xf4</span>
<span class="o">[</span><span class="n"> 10.122796</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3430</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239eb8</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x40</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.122861</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c34a0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239e34</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_bridge_extend</span><span class="o">+</span><span class="mh">0x4d4</span><span class="o">/</span><span class="mh">0x504</span>
<span class="o">[</span><span class="n"> 10.122928</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3580</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023a0f8</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x280</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.122993</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c35f0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239e34</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_bridge_extend</span><span class="o">+</span><span class="mh">0x4d4</span><span class="o">/</span><span class="mh">0x504</span>
<span class="o">[</span><span class="n"> 10.123059</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c36d0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023a0f8</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x280</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.123124</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3740</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239e34</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_bridge_extend</span><span class="o">+</span><span class="mh">0x4d4</span><span class="o">/</span><span class="mh">0x504</span>
<span class="o">[</span><span class="n"> 10.123191</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3820</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023a0f8</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x280</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.123256</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3890</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239b5c</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_bridge_extend</span><span class="o">+</span><span class="mh">0x1fc</span><span class="o">/</span><span class="mh">0x504</span>
<span class="o">[</span><span class="n"> 10.123322</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3970</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023a064</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x1ec</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.123388</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c39e0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000239b5c</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_bridge_extend</span><span class="o">+</span><span class="mh">0x1fc</span><span class="o">/</span><span class="mh">0x504</span>
<span class="o">[</span><span class="n"> 10.123454</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3ac0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000023a064</span><span class="o">]</span><span class="w"> </span><span class="n">pci_scan_child_bus_extend</span><span class="o">+</span><span class="mh">0x1ec</span><span class="o">/</span><span class="mh">0x2a8</span>
<span class="o">[</span><span class="n"> 10.123516</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3b30</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000000030dcc</span><span class="o">]</span><span class="w"> </span><span class="n">pcibios_scan_phb</span><span class="o">+</span><span class="mh">0x134</span><span class="o">/</span><span class="mh">0x1f4</span>
<span class="o">[</span><span class="n"> 10.123574</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3bd0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000100a800</span><span class="o">]</span><span class="w"> </span><span class="n">pcibios_init</span><span class="o">+</span><span class="mh">0x9c</span><span class="o">/</span><span class="mh">0xbc</span>
<span class="o">[</span><span class="n"> 10.123635</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3c50</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000000f398</span><span class="o">]</span><span class="w"> </span><span class="n">do_one_initcall</span><span class="o">+</span><span class="mh">0x80</span><span class="o">/</span><span class="mh">0x15c</span>
<span class="o">[</span><span class="n"> 10.123698</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3d10</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c000000001000e94</span><span class="o">]</span><span class="w"> </span><span class="n">kernel_init_freeable</span><span class="o">+</span><span class="mh">0x248</span><span class="o">/</span><span class="mh">0x24c</span>
<span class="o">[</span><span class="n"> 10.123756</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3db0</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000000f574</span><span class="o">]</span><span class="w"> </span><span class="n">kernel_init</span><span class="o">+</span><span class="mh">0x1c</span><span class="o">/</span><span class="mh">0x150</span>
<span class="o">[</span><span class="n"> 10.123820</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c0000000fd7c3e20</span><span class="o">]</span><span class="w"> </span><span class="o">[</span><span class="n">c00000000000b72c</span><span class="o">]</span><span class="w"> </span><span class="n">ret_from_kernel_thread</span><span class="o">+</span><span class="mh">0x5c</span><span class="o">/</span><span class="mh">0x70</span>
<span class="o">[</span><span class="n"> 10.123854</span><span class="o">]</span><span class="w"> </span><span class="n">Instruction</span><span class="w"> </span><span class="k">dump</span><span class="err">:</span>
<span class="o">[</span><span class="n"> 10.123885</span><span class="o">]</span><span class="w"> </span><span class="mi">7</span><span class="n">d054378</span><span class="w"> </span><span class="mi">4</span><span class="n">bff56f5</span><span class="w"> </span><span class="mi">60000000</span><span class="w"> </span><span class="mi">38600000</span><span class="w"> </span><span class="mi">38210020</span><span class="w"> </span><span class="n">e8010010</span><span class="w"> </span><span class="mi">7</span><span class="n">c0803a6</span><span class="w"> </span><span class="mf">4e800020</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.124022</span><span class="o">]</span><span class="w"> </span><span class="n">e86a0018</span><span class="w"> </span><span class="mi">54</span><span class="n">c6043e</span><span class="w"> </span><span class="mi">7</span><span class="n">d054378</span><span class="w"> </span><span class="mi">4</span><span class="n">bff5731</span><span class="w"> </span><span class="o"><</span><span class="mi">60000000</span><span class="o">></span><span class="w"> </span><span class="mi">4</span><span class="n">bffffd8</span><span class="w"> </span><span class="n">e86a0018</span><span class="w"> </span><span class="mi">7</span><span class="n">d054378</span><span class="w"> </span>
<span class="o">[</span><span class="n"> 10.124180</span><span class="o">]</span><span class="w"> </span><span class="n">Kernel</span><span class="w"> </span><span class="n">panic</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="nl">syncing</span><span class="p">:</span><span class="w"> </span><span class="n">Hard</span><span class="w"> </span><span class="n">LOCKUP</span>
<span class="o">[</span><span class="n"> 10.124232</span><span class="o">]</span><span class="w"> </span><span class="nl">CPU</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nl">PID</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="nl">Comm</span><span class="p">:</span><span class="w"> </span><span class="n">swapper</span><span class="o">/</span><span class="mi">0</span><span class="w"> </span><span class="ow">Not</span><span class="w"> </span><span class="n">tainted</span><span class="w"> </span><span class="mf">5.0.5</span><span class="o">-</span><span class="n">openpower1</span><span class="w"> </span><span class="n">#2</span>
<span class="o">[</span><span class="n"> 10.124251</span><span class="o">]</span><span class="w"> </span><span class="k">Call</span><span class="w"> </span><span class="nl">Trace</span><span class="p">:</span>
</code></pre></div>
<p>I wonder if I can submit that bug without someone throwing something at my desk.</p></div>
</article>
<article>
<header>
<h1 class="entry-title">
<a href="https://sthbrx.github.io/blog/2019/05/29/dm-crypt-password-prompts-proliferate/">dm-crypt: Password Prompts Proliferate</a>
</h1>
<p class="meta">
<time datetime="2019-05-29T16:47:00+10:00" pubdate>Wed 29 May 2019</time> </p>
</header>
<div class="byline_index">
<span class="byline author vcard">
Posted by <span class="fn">
<a href="https://sthbrx.github.io/author/samuel-mendoza-jonas.html">Samuel Mendoza-Jonas</a>
</span>
</span>
<time datetime="2019-05-29T16:47:00+10:00" pubdate>Wed 29 May 2019</time></div>
<div class="entry-content"><p><a href="https://sthbrx.github.io/blog/2019/02/25/what-do-you-mean-no/">Just recently</a> Petitboot added a method to ask the user for a password before allowing certain actions to proceed. Underneath the covers this is checking against the root password, but the UI "pop-up" asking for the password is relatively generic. Something else which has been on the to-do list for a while is support for mounting encrpyted partitions, but there wasn't a good way to retrieve the password for them - until now!</p>
<p>With the password problem solved, there isn't too much else to do. If Petitboot sees an encrypted partition it makes a note of it and informs the UI via the <code>device_add</code> interface. Seeing this the UI shows this device in the UI even though there aren't any boot options associated with it yet:</p>
<p><img alt="encrypted_hdr" src="/images/sammj/encrypted_hdr.png"></p>
<p>Unlike normal devices in the menu these are selectable; once that happens the user is prompted for the password:</p>
<p><img alt="encrypted_password" src="/images/sammj/encrypted_password.png"></p>
<p>With password in hand pb-discover will then try to open the device with <code>cryptsetup</code>. If that succeeds the encrypted device is removed from the UI and replaced with the new un-encrypted device:</p>
<p><img alt="unencrypted_hdr" src="/images/sammj/unencrypted_hdr.png"></p>
<p>That's it! These devices can't be auto-booted from at the moment since the password needs to be manually entered. The UI also doesn't have a way yet to select specific options for <code>cryptsetup</code>, but if you find yourself needing to do so you can run <code>cryptsetup</code> manually from the shell and pb-discover will recognise the new unencrypted device automatically.</p>
<p>This is in Petitboot as of v1.10.3 so go check it out! Just make sure your image includes the kernel and cryptsetup <a href="https://github.com/open-power/op-build/pull/2840">dependencies</a>.</p></div>
</article>
<article>
<header>
<h1 class="entry-title">
<a href="https://sthbrx.github.io/blog/2019/05/07/visual-studio-code-for-linux-kernel-development/">Visual Studio Code for Linux kernel development</a>
</h1>
<p class="meta">
<time datetime="2019-05-07T00:00:00+10:00" pubdate>Tue 07 May 2019</time> </p>
</header>
<div class="byline_index">
<span class="byline author vcard">
Posted by <span class="fn">
<a href="https://sthbrx.github.io/author/russell-currey.html">Russell Currey</a>
</span>
</span>
<time datetime="2019-05-07T00:00:00+10:00" pubdate>Tue 07 May 2019</time></div>
<div class="entry-content"><p>Here we are again - back in 2016 <a href="https://sthbrx.github.io/blog/2016/06/07/using-the-atom-editor-for-linux-kernel-development/">I wrote an article on using Atom for kernel development</a>, but I didn't stay using it for too long, instead moving back to Emacs. Atom had too many shortcomings - it had that distinctive <em>Electron feel</em>, which is a problem for a text editor - you need it to be snappy. On top of that, vim support was mediocre at best, and even as a vim scrub I would find myself trying to do things that weren't implemented.</p>
<p>So in the meantime I switched to <a href="http://spacemacs.org/">spacemacs</a>, which is a very well integrated "vim in Emacs" experience, with a lot of opinionated (but good) defaults. spacemacs was pretty good to me but had some issues - disturbingly long startup times, mediocre completions and go-to-definitions, and integrating any module into spacemacs that wasn't already integrated was a big pain.</p>
<p>After that I switched to <a href="https://github.com/hlissner/doom-emacs">Doom Emacs</a>, which is like spacemacs but faster and closer to Emacs itself. It's very user configurable but much less user friendly, and I didn't really change much as my elisp-fu is practically non-existent. I was decently happy with this, but there were still some issues, some of which are just inherent to Emacs itself - like no actually usable inbuilt terminal, despite having (at least) four of them.</p>
<p>Anyway, since 2016 when I used Atom, Visual Studio Code (henceforth referred to as Code) came along and ate its lunch, using the framework (Electron) that was created for Atom. I did try it years ago, but I was very turned off by its Microsoft-ness, it seeming lack of distinguishing features from Atom, and it didn't feel like a native editor at all. Since it's massively grown in popularity since then, I decided I'd give it a try.</p>
<p><img alt="Visual Studio Code" src="/images/ruscur/vscode.png"></p>
<h3>Vim emulation</h3>
<p>First things first for me is getting a vim mode going, and Code has a pretty good one of those. The key feature for me is that there's <a href="https://neovim.io">Neovim</a> integration for Ex-commands, filling a lot of shortcomings that come with most attempts at vim emulation. In any case, everything I've tried to do that I'd do in vim (or Emacs) has worked, and there are a ton of options and things to tinker with. Obviously it's not going to do as much as you could do with Vimscript, but it's definitely not bad.</p>
<h3>Theming and UI customisation</h3>
<p>As far as the editor goes - it's good. A ton of different themes, you can change the colour of pretty much everything in the config file or in the UI, including icons for the sidebar. There's a huge sore point though, you can't customise the interface outside the editor pretty much at all. There's an extension for loading custom CSS, but it's out of the way, finnicky, and if I wanted to write CSS I wouldn't have become a kernel developer.</p>
<h3>Extensibility</h3>
<p>Extensibility is definitely a strong point, the ecosystem of extensions is good. All the language extensions I've tried have been very fully featured with a ton of different options, integration into language-specific linters and build tools. This is probably Code's strongest feature - the breadth of the extension ecosystem and the level of quality found within.</p>
<h3>Kernel development</h3>
<p>Okay, let's get into the main thing that matters - how well does the thing actually edit code. The kernel is tricky. It's huge, it has its own build system, and in my case I build it with cross compilers for another architecture. Also, y'know, it's all in C and built with make, not exactly great for any kind of IDE integration.</p>
<p>The first thing I did was check out the <a href="https://github.com/amezin/vscode-linux-kernel">vscode-linux-kernel</a> project by GitHub user "amezin", which is a great starting point. All you have to do is clone the repo, build your kernel (with a cross compiler works fine too), and run the Python script to generate the <code>compile_commands.json</code> file. Once you've done this, go-to-definition (<code>gd</code> in vim mode) works pretty well. It's not flawless, but it does go cross-file, and will pop up a nice UI if it can't figure out which file you're after.</p>
<p>Code has good built-in git support, so actions like staging files for a commit can be done from within the editor. Ctrl-P lets you quickly navigate to any file with fuzzy-matching (which is impressively fast for a project of this size), and Ctrl-Shift-P will let you search commands, which I've been using for some git stuff.</p>
<p><img alt="git command completion in Code" src="/images/ruscur/vscode-git.png"></p>
<p>There are some rough edges, though. Code is set on what so many modern editors are set on, which is the "one window per project" concept - so to get things working the way you want, you would open your kernel source as the current project. This makes it a pain to just open something else to edit, like some script, or checking the value of something in firmware, or chucking something in your bashrc.</p>
<p>Auto-triggering builds on change isn't something that makes a ton of sense for the kernel, and it's not present here. The kernel support in the repo above is decent, but it's not going to get you close to what more modern languages can get you in an editor like this.</p>
<p>Oh, and it has a powerpc assembly extension, but I didn't find it anywhere near as good as the one I "wrote" for Atom (I just took the x86 one and switched the instructions), so I'd rather use the C mode.</p>
<h3>Terminal</h3>
<p>Code has an actually good inbuilt terminal that uses your login shell. You can bring it up with Ctrl-`. The biggest gripe I have always had with Emacs is that you can never have a shell that you can actually do anything in, whether it's <code>eshell</code> or <code>shell</code> or <code>term</code> or <code>ansi-term</code>, you try to do something in it and it doesn't work or clashes with some Emacs command, and then when you try to do something Emacs-y in there it doesn't work. No such issue is present here, and it's a pleasure to use for things like triggering a remote build or doing some git operation you don't want to do with commands in the editor itself.</p>
<p>Not the most important feature, but I do like not having to alt-tab out and lose focus.</p>
<h3>Well...is it good?</h3>
<p>Yeah, it is. It has shortcomings, but installing Code and using the repo above to get started is probably the simplest way to get a competent kernel development environment going, with more features than most kernel developers (probably) have in their editors. Code is open source and so are its extensions, and it'd be the first thing I recommend to new developers who aren't already super invested into vim or Emacs, and it's worth a try if you have gripes with your current environment.</p></div>
</article>
<article>
<header>
<h1 class="entry-title">
<a href="https://sthbrx.github.io/blog/2019/04/02/article-review-curing-the-vulnerable-parser/">Article Review: Curing the Vulnerable Parser</a>
</h1>
<p class="meta">
<time datetime="2019-04-02T00:00:00+11:00" pubdate>Tue 02 April 2019</time> </p>
</header>
<div class="byline_index">
<span class="byline author vcard">
Posted by <span class="fn">
<a href="https://sthbrx.github.io/author/daniel-axtens.html">Daniel Axtens</a>
</span>
</span>
<time datetime="2019-04-02T00:00:00+11:00" pubdate>Tue 02 April 2019</time></div>
<div class="entry-content"><p>Every once in a while I read papers or articles. Previously, I've just read them myself, but I was wondering if there were more useful things I could do beyond that. So I've written up a summary and my thoughts on an article I read - let me know if it's useful!</p>
<p>I recently read <a href="https://www.usenix.org/publications/login/spring2017/bratus">Curing the Vulnerable Parser: Design Patterns for Secure Input Handling</a> (Bratus, et al; USENIX ;login: Spring 2017). It's not a formal academic paper but an article in the Usenix magazine, so it doesn't have a formal abstract I can quote, but in short it takes the long history of parser and parsing vulnerabilities and uses that as a springboard to talk about how you could design better ones. It introduces a toolkit based on that design for more safely parsing some binary formats.</p>
<h2>Background</h2>
<p>It's worth noting early on that this comes out of the <a href="http://langsec.org/">LangSec crowd</a>. They have a pretty strong underpinning philosophy:</p>
<blockquote>
<p>The Language-theoretic approach (LANGSEC) regards the Internet insecurity epidemic as a consequence of <em>ad hoc</em> programming of input handling at all layers of network stacks, and in other kinds of software stacks. LANGSEC posits that the only path to trustworthy software that takes untrusted inputs is treating all valid or expected inputs as a formal language, and the respective input-handling routines as a <em>recognizer</em> for that language. The recognition must be feasible, and the recognizer must match the language in required computation power.</p>
</blockquote>
<p>A big theme in this article is predictability:</p>
<blockquote>
<p>Trustworthy input is input with predictable effects. The goal of input-checking is being able to predict the input’s effects on the rest of your program.</p>
</blockquote>
<p>This seems sensible enough at first, but leads to some questionable assertions, such as:</p>
<blockquote>
<p>Safety is predictability. When it's impossible to predict what the effects of the input will be (however valid), there is no safety.</p>
</blockquote>
<p>They follow this with an example of Ethereum contracts stealing money from the DAO. The example is compelling enough, but again comes with a very strong assertion about the impossibility of securing a language virtual machine:</p>
<blockquote>
<p>From the viewpoint of language-theoretic security, a catastrophic exploit in Ethereum was only a matter of time: one can only find out what such programs do by running them. By then it is too late.</p>
</blockquote>
<p>I'm not sure that (a) I buy the assertions, or that (b) they provide a useful way to deal with the world as we find it.</p>
<h3>Is this even correct?</h3>
<p>You can tease out 2 contentions in the first part of the article:</p>
<ul>
<li>there should be a formal language that describes the data, and</li>
<li>this language should be as simple as possible, ideally being regular and context-free.</li>
</ul>
<p>Neither of these are bad ideas - in fact they're both good ideas - but I don't know that I draw the same links between them and security.</p>
<p>Consider PostScript as a possible counter-example. It's a Turing-complete language, so it absolutely cannot have predictable results. It has a well documented specification and executes in a restricted virtual machine. So let's say that it satisfies only the first plank of their argument.</p>
<p>I'd say that PostScript has a good security record, despite being Turing complete. PostScript has been around since 1985 and apart from the recent bugs in GhostScript, it doesn't have a long history of bugs and exploits. Maybe this just because no-one has really looked, or maybe it is possible to have reasonably safe complex languages by restricting the execution environment, as PostScript consciously and deliberately does.</p>
<p>Indeed, if you consider the recent spate <a href="https://bugs.chromium.org/p/project-zero/issues/detail?id=1675">of</a> <a href="https://bugs.chromium.org/p/project-zero/issues/detail?id=1691">GhostScript</a> <a href="https://bugs.chromium.org/p/project-zero/issues/detail?id=1682">bugs</a>, perhaps <a href="https://bugs.chromium.org/p/project-zero/issues/detail?id=1640">some</a> may be avoided by stricter compliance with a formal language specification. However, most seem to me to arise from the desirability of implementing some of the PostScript functionality in PostScript itself, and some of the GhostScript-specific, stupendously powerful operators exposed to the language to enable this. The bugs involve tricks to allow a user to get access to these operators. A non-Turing-complete language may be <em>sufficient</em> to prevent these attacks, but it is not <em>necessary</em>: just not doing this sort of meta-programming with such dangerous operators would also have worked. Storing the true values of the security state outside of a language-accessible object would also be good.</p>
<h3>Is this a useful way to deal with the world as we find it?</h3>
<p>My main problem with the general LangSec approach that this article takes is this: to get to their desired world, we need to rewrite a bunch of things with entirely different language foundations. The article talks about HTML and PDFs as examples of unsafe formats, but I cannot imagine the sudden wholesale replacement of either of these - although I would love to be proven wrong.</p>
<p>Can we get even part of the way with existing standards? Kinda-sorta, but mostly no, and to the authors' credit, they are open about this. They argue that formal definition parsing the language should be the "most restrictive input definition" - they specifically require you to "give up attempting to accept arbitrarily complex data", and call for "subsetting of many protocols, formats, encodings and command languages, including eliminating unneeded variability and introducing determinism and static values".</p>
<p>No doubt we would be in a better place if people took up these ideas for future programs.
However, for our current set of programs and use cases, this is probably not tractable in any meaningful way.</p>
<h2>The rest of the paper</h2>
<p>The rest of the paper is reasonably interesting. Their general theory is that you should build your parsers based on a formal definition of a language, and that the parser should convert the input data to a set of objects, and then your business logic should deal with those objects. This is the 'recognizer pattern', and is illustrated below:</p>
<p><img alt="The recognizer pattern: separate code parses input according to a formal grammar, creating valid objects that are passed to the business logic" src="/images/dja/recogniser.png"></p>
<p>In short, the article is full of great ideas if you happen to be parsing a simple language, or are designing not just a parser but a full language ecosystem. They do also provide a binary parser toolkit that might be helpful if you are parsing a binary format that can be expressed with a parser combinator.</p>
<p>Overall, however, I think the burden of maintaining old systems is such that a security paradigm that relies on new code is pretty unlikely, and one that relies on new languages is fatally doomed from the outset. New systems should take up these ideas, yes. But I'd really like to see people grappling with how to deal with the complex and irregular languages that we're stuck with (HTML, PDF, etc) in secure ways.</p></div>
</article>
<div class="pagination">
<a class="prev" href="https://sthbrx.github.io/index4.html">← Older</a>
<a class="next" href="https://sthbrx.github.io/index2.html">Newer →</a>
<br />
</div></div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="https://sthbrx.github.io/blog/2023/08/07/going-out-on-a-limb-efficient-elliptic-curve-arithmetic-in-openssl/">Going out on a Limb: Efficient Elliptic Curve Arithmetic in OpenSSL</a>
</li>
<li class="post">
<a href="https://sthbrx.github.io/blog/2023/08/04/quirks-of-parsing-ssh-configs/">Quirks of parsing SSH configs</a>
</li>
<li class="post">
<a href="https://sthbrx.github.io/blog/2023/04/05/detecting-rootless-docker/">Detecting rootless Docker</a>
</li>
<li class="post">
<a href="https://sthbrx.github.io/blog/2023/04/04/dumb-bugs-the-pci-device-that-wasnt/">Dumb bugs: the PCI device that wasn't</a>
</li>
<li class="post">
<a href="https://sthbrx.github.io/blog/2023/03/24/dumb-bugs-when-a-date-breaks-booting-the-kernel/">Dumb bugs: When a date breaks booting the kernel</a>
</li>
</ul>
</section>
<section>
<h1>Categories</h1>
<ul id="recent_posts">
<li><a href="https://sthbrx.github.io/category/cryptography.html">Cryptography</a></li>
<li><a href="https://sthbrx.github.io/category/development.html">Development</a></li>
<li><a href="https://sthbrx.github.io/category/education.html">Education</a></li>
<li><a href="https://sthbrx.github.io/category/openpower.html">OpenPOWER</a></li>
<li><a href="https://sthbrx.github.io/category/performance.html">Performance</a></li>
<li><a href="https://sthbrx.github.io/category/petitboot.html">Petitboot</a></li>
<li><a href="https://sthbrx.github.io/category/snowpatch.html">snowpatch</a></li>
<li><a href="https://sthbrx.github.io/category/virtualisation-and-emulation.html">Virtualisation and Emulation</a></li>
</ul>
</section>
<section>
<h1>Tags</h1>
<a href="https://sthbrx.github.io/tag/ssh.html">ssh</a>, <a href="https://sthbrx.github.io/tag/docker.html">Docker</a>, <a href="https://sthbrx.github.io/tag/syzkaller.html">syzkaller</a>, <a href="https://sthbrx.github.io/tag/linux.html">linux</a>, <a href="https://sthbrx.github.io/tag/power8.html">power8</a>, <a href="https://sthbrx.github.io/tag/distro.html">distro</a>, <a href="https://sthbrx.github.io/tag/kernel.html">kernel</a>, <a href="https://sthbrx.github.io/tag/hardening.html">hardening</a>, <a href="https://sthbrx.github.io/tag/testing.html">testing</a>, <a href="https://sthbrx.github.io/tag/conferences.html">conferences</a>, <a href="https://sthbrx.github.io/tag/instruction-set-architecture.html">Instruction Set Architecture</a>, <a href="https://sthbrx.github.io/tag/openpower.html">openpower</a>, <a href="https://sthbrx.github.io/tag/firmware.html">firmware</a>, <a href="https://sthbrx.github.io/tag/goodposts.html">goodposts</a>, <a href="https://sthbrx.github.io/tag/realcontent.html">realcontent</a>, <a href="https://sthbrx.github.io/tag/madposting.html">madposting</a>, <a href="https://sthbrx.github.io/tag/op-test.html">op-test</a>, <a href="https://sthbrx.github.io/tag/qemu.html">qemu</a>, <a href="https://sthbrx.github.io/tag/pci.html">pci</a>, <a href="https://sthbrx.github.io/tag/sparseposting.html">sparseposting</a>, <a href="https://sthbrx.github.io/tag/petitboot.html">petitboot</a>, <a href="https://sthbrx.github.io/tag/security.html">security</a>, <a href="https://sthbrx.github.io/tag/vscode.html">vscode</a>, <a href="https://sthbrx.github.io/tag/code.html">code</a>, <a href="https://sthbrx.github.io/tag/openbmc.html">openbmc</a>, <a href="https://sthbrx.github.io/tag/ipmi.html">ipmi</a>, <a href="https://sthbrx.github.io/tag/opencapi.html">opencapi</a>, <a href="https://sthbrx.github.io/tag/openpower-summit.html">openpower summit</a>, <a href="https://sthbrx.github.io/tag/easyposts.html">easyposts</a>, <a href="https://sthbrx.github.io/tag/linuxboot.html">linuxboot</a>, <a href="https://sthbrx.github.io/tag/google.html">google</a>, <a href="https://sthbrx.github.io/tag/intel.html">intel</a>, <a href="https://sthbrx.github.io/tag/osfc.html">osfc</a>, <a href="https://sthbrx.github.io/tag/shortposts.html">shortposts</a>, <a href="https://sthbrx.github.io/tag/facebook.html">facebook</a>, <a href="https://sthbrx.github.io/tag/performance.html">performance</a>, <a href="https://sthbrx.github.io/tag/phoronix.html">phoronix</a>, <a href="https://sthbrx.github.io/tag/benchmarks.html">benchmarks</a>, <a href="https://sthbrx.github.io/tag/stupid-ideas.html">stupid ideas</a>, <a href="https://sthbrx.github.io/tag/network.html">network</a>, <a href="https://sthbrx.github.io/tag/power.html">power</a>, <a href="https://sthbrx.github.io/tag/xdp.html">xdp</a>, <a href="https://sthbrx.github.io/tag/networking.html">networking</a>, <a href="https://sthbrx.github.io/tag/remoteposts.html">remoteposts</a>, <a href="https://sthbrx.github.io/tag/ceph.html">ceph</a>, <a href="https://sthbrx.github.io/tag/raid.html">raid</a>, <a href="https://sthbrx.github.io/tag/storage.html">storage</a>, <a href="https://sthbrx.github.io/tag/erasure.html">erasure</a>, <a href="https://sthbrx.github.io/tag/lustre.html">lustre</a>, <a href="https://sthbrx.github.io/tag/hpc.html">hpc</a>, <a href="https://sthbrx.github.io/tag/nvlink.html">nvlink</a>, <a href="https://sthbrx.github.io/tag/namd.html">namd</a>, <a href="https://sthbrx.github.io/tag/cuda.html">cuda</a>, <a href="https://sthbrx.github.io/tag/gpu.html">gpu</a>, <a href="https://sthbrx.github.io/tag/minsky.html">minsky</a>, <a href="https://sthbrx.github.io/tag/s822lc-for-hpc.html">S822LC for hpc</a>, <a href="https://sthbrx.github.io/tag/debug.html">debug</a>, <a href="https://sthbrx.github.io/tag/virtualisation.html">virtualisation</a>, <a href="https://sthbrx.github.io/tag/dmesg.html">dmesg</a>, <a href="https://sthbrx.github.io/tag/printk.html">printk</a>, <a href="https://sthbrx.github.io/tag/boot.html">boot</a>, <a href="https://sthbrx.github.io/tag/early.html">early</a>, <a href="https://sthbrx.github.io/tag/error.html">error</a>, <a href="https://sthbrx.github.io/tag/centos.html">centos</a>, <a href="https://sthbrx.github.io/tag/centos7.html">centos7</a>, <a href="https://sthbrx.github.io/tag/p8.html">p8</a>, <a href="https://sthbrx.github.io/tag/bmc.html">bmc</a>, <a href="https://sthbrx.github.io/tag/rhel.html">RHEL</a>, <a href="https://sthbrx.github.io/tag/skiroot.html">skiroot</a>, <a href="https://sthbrx.github.io/tag/devmapper.html">devmapper</a>, <a href="https://sthbrx.github.io/tag/lvm.html">lvm</a>, <a href="https://sthbrx.github.io/tag/cgroups.html">cgroups</a>, <a href="https://sthbrx.github.io/tag/numa.html">numa</a>, <a href="https://sthbrx.github.io/tag/development.html">Development</a>, <a href="https://sthbrx.github.io/tag/netboot.html">netboot</a>, <a href="https://sthbrx.github.io/tag/pxe.html">pxe</a>, <a href="https://sthbrx.github.io/tag/education.html">Education</a>, <a href="https://sthbrx.github.io/tag/work-experience.html">work experience</a>, <a href="https://sthbrx.github.io/tag/asm.html">asm</a>, <a href="https://sthbrx.github.io/tag/vdso.html">vdso</a>, <a href="https://sthbrx.github.io/tag/snowpatch.html">snowpatch</a>, <a href="https://sthbrx.github.io/tag/tools.html">tools</a>, <a href="https://sthbrx.github.io/tag/intern.html">intern</a>, <a href="https://sthbrx.github.io/tag/srop.html">SROP</a>, <a href="https://sthbrx.github.io/tag/mitigation.html">mitigation</a>, <a href="https://sthbrx.github.io/tag/double.html">double</a>, <a href="https://sthbrx.github.io/tag/float.html">float</a>, <a href="https://sthbrx.github.io/tag/hex.html">hex</a>, <a href="https://sthbrx.github.io/tag/debugging.html">debugging</a>, <a href="https://sthbrx.github.io/tag/skiboot.html">skiboot</a>, <a href="https://sthbrx.github.io/tag/opal.html">OPAL</a>, <a href="https://sthbrx.github.io/tag/fsp.html">FSP</a>, <a href="https://sthbrx.github.io/tag/patches.html">patches</a>, <a href="https://sthbrx.github.io/tag/based16.html">based16</a>, <a href="https://sthbrx.github.io/tag/linux-gods.html">Linux Gods</a>, <a href="https://sthbrx.github.io/tag/ozlabs.html">Ozlabs</a>, <a href="https://sthbrx.github.io/tag/offtopic.html">offtopic</a>, <a href="https://sthbrx.github.io/tag/autoboot.html">autoboot</a>, <a href="https://sthbrx.github.io/tag/kexec.html">kexec</a>, <a href="https://sthbrx.github.io/tag/aufs.html">aufs</a>, <a href="https://sthbrx.github.io/tag/overlay.html">overlay</a>, <a href="https://sthbrx.github.io/tag/php.html">php</a>, <a href="https://sthbrx.github.io/tag/capi.html">capi</a> </section>
<section>
<h1><a href="https://sthbrx.github.io/authors.html">Authors</a></h1>
<ul id="authors_list">
<li><a href="https://sthbrx.github.io/author/alastair-dsilva.html">Alastair D'Silva</a></li>
<li><a href="https://sthbrx.github.io/author/andrew-donnellan.html">Andrew Donnellan</a></li>
<li><a href="https://sthbrx.github.io/author/anton-blanchard.html">Anton Blanchard</a></li>
<li><a href="https://sthbrx.github.io/author/benjamin-gray.html">Benjamin Gray</a></li>
<li><a href="https://sthbrx.github.io/author/callum-scarvell.html">Callum Scarvell</a></li>
<li><a href="https://sthbrx.github.io/author/cyril-bur.html">Cyril Bur</a></li>
<li><a href="https://sthbrx.github.io/author/daniel-axtens.html">Daniel Axtens</a></li>
<li><a href="https://sthbrx.github.io/author/daniel-black.html">Daniel Black</a></li>
<li><a href="https://sthbrx.github.io/author/joel-stanley.html">Joel Stanley</a></li>
<li><a href="https://sthbrx.github.io/author/nick-piggin.html">Nick Piggin</a></li>
<li><a href="https://sthbrx.github.io/author/rashmica-gupta.html">Rashmica Gupta</a></li>
<li><a href="https://sthbrx.github.io/author/rohan-mclure.html">Rohan McLure</a></li>
<li><a href="https://sthbrx.github.io/author/russell-currey.html">Russell Currey</a></li>
<li><a href="https://sthbrx.github.io/author/samuel-mendoza-jonas.html">Samuel Mendoza-Jonas</a></li>
<li><a href="https://sthbrx.github.io/author/suraj-jitindar-singh.html">Suraj Jitindar Singh</a></li>
</ul>
</section>
<section>
<h1>Social</h1>
<ul>
<li><a href="https://sthbrx.github.io/rss.xml" type="application/rss+xml" rel="alternate">RSS</a></li>
<li><a href="https://github.com/sthbrx/" target="_blank">GitHub</a></li>
<li><a href="https://lists.ozlabs.org/listinfo/linuxppc-dev" target="_blank">linuxppc mailing list</a></li>
<li><a href="https://lists.ozlabs.org/listinfo/skiboot" target="_blank">Skiboot mailing list</a></li>
</ul>
</section>
<section>
<h1>Blogroll</h1>
<ul>
<li><a href="http://ozlabs.org" target="_blank">OzLabs</a></li>
</ul>
</section>
<section>
<h1>Disclaimer</h1>
<div>
This blog represents the views of the individual authors, and doesn't necessarily represent IBM's positions, strategies or opinions. </div>
</section>
</aside> </div>
</div>
<footer role="contentinfo"><p>
Copyright © 2015–2023 OzLabs —
<span class="credit">Powered by <a href="http://getpelican.com">Pelican</a></span>
</p></footer>
</body>
</html>