[PATCH] create config: fix 64bit PCI device configuration

6 views
Skip to first unread message

Benedikt Spranger

unread,
Aug 16, 2016, 7:08:48 AM8/16/16
to jailho...@googlegroups.com, jan.k...@siemens.com, henning...@siemens.com, Benedikt Spranger
Hi Jan,

due to a music festival a late answer and patch for jailhouse create config:

jailhouse create config generated an unusable PCI-Bar configuration for
a 64-bit memory resource. Change the config generation for 64-bit memory
resources.

Regards
Bene


Benedikt Spranger (1):
create config: fix 64bit PCI device configuration

tools/jailhouse-config-create | 4 ++++
1 file changed, 4 insertions(+)

--
2.8.1

Benedikt Spranger

unread,
Aug 16, 2016, 7:08:56 AM8/16/16
to jailho...@googlegroups.com, jan.k...@siemens.com, henning...@siemens.com, Benedikt Spranger
The PCI device BAR configuration generated by "jailhouse config create"
of the following device is broken:

05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 P
CI Express Gigabit Ethernet Controller (rev 06)
Subsystem: Device 7470:3468
Flags: bus master, fast devsel, latency 0
I/O ports at d000 [size=256]
Memory at f3204000 (64-bit, non-prefetchable) [size=4K]
Memory at f3200000 (64-bit, prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 01
Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
Capabilities: [d0] Vital Product Data
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Virtual Channel
Capabilities: [160] Device Serial Number 1a-0e-00-00-68-4c-e0-00

...
.bar_mask = {
0xffffff00, 0x00000000, 0xfffff000,
0xffffffff, 0x00000000, 0xffffc000,
},
...

Fix the config generation script:
...
.bar_mask = {
0xffffff00, 0x00000000, 0xfffff000,
0xffffffff, 0xffffc000, 0xffffffff,
},
...

Signed-off-by: Benedikt Spranger <b.spr...@linutronix.de>
---
tools/jailhouse-config-create | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/tools/jailhouse-config-create b/tools/jailhouse-config-create
index f0d65ed..283066d 100755
--- a/tools/jailhouse-config-create
+++ b/tools/jailhouse-config-create
@@ -176,6 +176,10 @@ class PCIBARs:
elif flags & PCIBARs.IORESOURCE_MEM:
mask = ~(int(end, 16) - int(start, 16))
if flags & PCIBARs.IORESOURCE_MEM_64:
+ mask = int(end, 16) - int(start, 16)
+ (start, end, flags) = f.readline().split()
+ mask |= (int(end, 16) - int(start, 16)) << 32
+ mask = ~(mask)
self.mask.append(mask & 0xffffffff)
mask >>= 32
n += 1
--
2.8.1

Jan Kiszka

unread,
Aug 16, 2016, 7:24:38 AM8/16/16
to Benedikt Spranger, jailho...@googlegroups.com, henning...@siemens.com
On 2016-08-16 13:08, Benedikt Spranger wrote:
> Hi Jan,
>
> due to a music festival a late answer and patch for jailhouse create config:

Mera Luna once again? ;)

>
> jailhouse create config generated an unusable PCI-Bar configuration for
> a 64-bit memory resource. Change the config generation for 64-bit memory
> resources.

As suspected... Thank, will have a look.

Jan

--
Siemens AG, Corporate Technology, CT RDA ITP SES-DE
Corporate Competence Center Embedded Linux

Jan Kiszka

unread,
Aug 16, 2016, 7:26:23 AM8/16/16
to Benedikt Spranger, jailho...@googlegroups.com, henning...@siemens.com
On 2016-08-16 13:08, Benedikt Spranger wrote:
Nit: as this line overwrite the one above, I would prefer an if-else here.

> + (start, end, flags) = f.readline().split()
> + mask |= (int(end, 16) - int(start, 16)) << 32
> + mask = ~(mask)
> self.mask.append(mask & 0xffffffff)
> mask >>= 32
> n += 1
>

Benedikt Spranger

unread,
Aug 16, 2016, 8:57:13 AM8/16/16
to jailho...@googlegroups.com, jan.k...@siemens.com, henning...@siemens.com, Benedikt Spranger
tools/jailhouse-config-create | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/tools/jailhouse-config-create b/tools/jailhouse-config-create
index f0d65ed..fc9552c 100755
--- a/tools/jailhouse-config-create
+++ b/tools/jailhouse-config-create
@@ -174,11 +174,16 @@ class PCIBARs:
if flags & PCIBARs.IORESOURCE_IO:
mask = ~(int(end, 16) - int(start, 16))
elif flags & PCIBARs.IORESOURCE_MEM:
- mask = ~(int(end, 16) - int(start, 16))
if flags & PCIBARs.IORESOURCE_MEM_64:
+ mask = int(end, 16) - int(start, 16)
+ (start, end, flags) = f.readline().split()
+ mask |= (int(end, 16) - int(start, 16)) << 32
+ mask = ~(mask)
self.mask.append(mask & 0xffffffff)
mask >>= 32
n += 1
+ else:
+ mask = ~(int(end, 16) - int(start, 16))
else:
mask = 0
self.mask.append(mask & 0xffffffff)
--
2.8.1

Henning Schild

unread,
Aug 16, 2016, 9:31:40 AM8/16/16
to Benedikt Spranger, jailho...@googlegroups.com, jan.k...@siemens.com
Am Tue, 16 Aug 2016 14:56:44 +0200
schrieb Benedikt Spranger <b.spr...@linutronix.de>:
That whole n+=1 never worked and i will send a patch for that in a
second. I suggest moving the n+=1 right under the second readline.

And i guess this patch should be queued after mine.

Jan Kiszka

unread,
Aug 19, 2016, 5:47:26 AM8/19/16
to Benedikt Spranger, jailho...@googlegroups.com, henning...@siemens.com
Thanks, queued.
Reply all
Reply to author
Forward
0 new messages