Hi Frank, Linux v4.17 and later will no longer boot on a G3 PowerMac. The boot hangs very early, before any video driver loads. Stan and I were able to bisect the regression between v4.16 and v4.17 and arrived at commit 0b3ce78e90fc ("of: cache phandle nodes to reduce cost of of_find_node_by_phandle()"). I don't see any obvious bug in 0b3ce78e90fc or b9952b5218ad. But if you revert these from v4.18 (which is also affected) that certainly resolves the issue. I did see this in the kernel messages: Duplicate name in PowerPC,750, renamed to "l2-cache#1" Duplicate name in mac-io, renamed to "ide#1" Duplicate name in ide#1, renamed to "atapi-disk#1" Duplicate name in multifunc-device, renamed to "pci1799,1#1" No idea whether that's relevant; I haven't done any further investigation. Complete dmesg output is attached. Please let me know if there's any more information you need to help find the bug. Thanks. -- On Sun, 4 Mar 2018, frowand.list@xxxxxxxxx wrote: > From: Frank Rowand <frank.rowand@xxxxxxxx> > > Create a cache of the nodes that contain a phandle property. Use this > cache to find the node for a given phandle value instead of scanning > the devicetree to find the node. If the phandle value is not found > in the cache, of_find_node_by_phandle() will fall back to the tree > scan algorithm. > > The cache is initialized in of_core_init(). > > The cache is freed via a late_initcall_sync() if modules are not > enabled. > > If the devicetree is created by the dtc compiler, with all phandle > property values auto generated, then the size required by the cache > could be 4 * (1 + number of phandles) bytes. This results in an O(1) > node lookup cost for a given phandle value. Due to a concern that the > phandle property values might not be consistent with what is generated > by the dtc compiler, a mask has been added to the cache lookup algorithm. > To maintain the O(1) node lookup cost, the size of the cache has been > increased by rounding the number of entries up to the next power of > two. > > The overhead of finding the devicetree node containing a given phandle > value has been noted by several people in the recent past, in some cases > with a patch to add a hashed index of devicetree nodes, based on the > phandle value of the node. One concern with this approach is the extra > space added to each node. This patch takes advantage of the phandle > property values auto generated by the dtc compiler, which begin with > one and monotonically increase by one, resulting in a range of 1..n > for n phandle values. This implementation should also provide a good > reduction of overhead for any range of phandle values that are mostly > in a monotonic range. > > Performance measurements by Chintan Pandya <cpandya@xxxxxxxxxxxxxx> > of several implementations of patches that are similar to this one > suggest an expected reduction of boot time by ~400ms for his test > system. If the cache size was decreased to 64 entries, the boot > time was reduced by ~340 ms. The measurements were on a 4.9.73 kernel > for arch/arm64/boot/dts/qcom/sda670-mtp.dts, contains 2371 nodes and > 814 phandle values. > > Reported-by: Chintan Pandya <cpandya@xxxxxxxxxxxxxx> > Signed-off-by: Frank Rowand <frank.rowand@xxxxxxxx> > --- > > Changes since v3: > - of_populate_phandle_cache(): add check for failed memory allocation > > Changes since v2: > - add mask to calculation of phandle cache entry > - which results in better overhead reduction for devicetrees with > phandle properties not allocated in the monotonically increasing > range of 1..n > - due to mask, number of entries in cache potentially increased to > next power of two > - minor fixes as suggested by reviewers > - no longer using live_tree_max_phandle() so do not move it from > drivers/of/resolver.c to drivers/of/base.c > > Changes since v1: > - change short description from > of: cache phandle nodes to reduce cost of of_find_node_by_phandle() > - rebase on v4.16-rc1 > - reorder new functions in base.c to avoid forward declaration > - add locking around kfree(phandle_cache) for memory ordering > - add explicit check for non-null of phandle_cache in > of_find_node_by_phandle(). There is already a check for !handle, > which prevents accessing a null phandle_cache, but that dependency > is not obvious, so this check makes it more apparent. > - do not free phandle_cache if modules are enabled, so that > cached phandles will be available when modules are loaded > > drivers/of/base.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++--- > drivers/of/of_private.h | 3 ++ > drivers/of/resolver.c | 3 -- > 3 files changed, 85 insertions(+), 7 deletions(-) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index ad28de96e13f..e71d157d7149 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -91,10 +91,72 @@ int __weak of_node_to_nid(struct device_node *np) > } > #endif > > +static struct device_node **phandle_cache; > +static u32 phandle_cache_mask; > + > +/* > + * Assumptions behind phandle_cache implementation: > + * - phandle property values are in a contiguous range of 1..n > + * > + * If the assumptions do not hold, then > + * - the phandle lookup overhead reduction provided by the cache > + * will likely be less > + */ > +static void of_populate_phandle_cache(void) > +{ > + unsigned long flags; > + u32 cache_entries; > + struct device_node *np; > + u32 phandles = 0; > + > + raw_spin_lock_irqsave(&devtree_lock, flags); > + > + kfree(phandle_cache); > + phandle_cache = NULL; > + > + for_each_of_allnodes(np) > + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) > + phandles++; > + > + cache_entries = roundup_pow_of_two(phandles); > + phandle_cache_mask = cache_entries - 1; > + > + phandle_cache = kcalloc(cache_entries, sizeof(*phandle_cache), > + GFP_ATOMIC); > + if (!phandle_cache) > + goto out; > + > + for_each_of_allnodes(np) > + if (np->phandle && np->phandle != OF_PHANDLE_ILLEGAL) > + phandle_cache[np->phandle & phandle_cache_mask] = np; > + > +out: > + raw_spin_unlock_irqrestore(&devtree_lock, flags); > +} > + > +#ifndef CONFIG_MODULES > +static int __init of_free_phandle_cache(void) > +{ > + unsigned long flags; > + > + raw_spin_lock_irqsave(&devtree_lock, flags); > + > + kfree(phandle_cache); > + phandle_cache = NULL; > + > + raw_spin_unlock_irqrestore(&devtree_lock, flags); > + > + return 0; > +} > +late_initcall_sync(of_free_phandle_cache); > +#endif > + > void __init of_core_init(void) > { > struct device_node *np; > > + of_populate_phandle_cache(); > + > /* Create the kset, and register existing nodes */ > mutex_lock(&of_mutex); > of_kset = kset_create_and_add("devicetree", NULL, firmware_kobj); > @@ -1021,16 +1083,32 @@ int of_modalias_node(struct device_node *node, char *modalias, int len) > */ > struct device_node *of_find_node_by_phandle(phandle handle) > { > - struct device_node *np; > + struct device_node *np = NULL; > unsigned long flags; > + phandle masked_handle; > > if (!handle) > return NULL; > > raw_spin_lock_irqsave(&devtree_lock, flags); > - for_each_of_allnodes(np) > - if (np->phandle == handle) > - break; > + > + masked_handle = handle & phandle_cache_mask; > + > + if (phandle_cache) { > + if (phandle_cache[masked_handle] && > + handle == phandle_cache[masked_handle]->phandle) > + np = phandle_cache[masked_handle]; > + } > + > + if (!np) { > + for_each_of_allnodes(np) > + if (np->phandle == handle) { > + if (phandle_cache) > + phandle_cache[masked_handle] = np; > + break; > + } > + } > + > of_node_get(np); > raw_spin_unlock_irqrestore(&devtree_lock, flags); > return np; > diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h > index 0c609e7d0334..fa70650136b4 100644 > --- a/drivers/of/of_private.h > +++ b/drivers/of/of_private.h > @@ -131,6 +131,9 @@ extern void __of_update_property_sysfs(struct device_node *np, > extern void __of_sysfs_remove_bin_file(struct device_node *np, > struct property *prop); > > +/* illegal phandle value (set when unresolved) */ > +#define OF_PHANDLE_ILLEGAL 0xdeadbeef > + > /* iterators for transactions, used for overlays */ > /* forward iterator */ > #define for_each_transaction_entry(_oft, _te) \ > diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c > index 740d19bde601..b2ca8185c8c6 100644 > --- a/drivers/of/resolver.c > +++ b/drivers/of/resolver.c > @@ -19,9 +19,6 @@ > > #include "of_private.h" > > -/* illegal phandle value (set when unresolved) */ > -#define OF_PHANDLE_ILLEGAL 0xdeadbeef > - > static phandle live_tree_max_phandle(void) > { > struct device_node *node; >
Total memory = 768MB; using 2048kB for hash table (at (ptrval)) Linux version 4.18.0-g5d852e5b3424 (root@nippy) (gcc version 8.1.0 (Debian 8.1.0-12)) #4 SMP Wed Aug 29 14:54:01 AEST 2018 Found a Heathrow mac-io controller, rev: 1, mapped at 0x(ptrval) PowerMac motherboard: PowerMac G3 (Silk) Using PowerMac machine description bootconsole [udbg0] enabled CPU maps initialized for 1 thread per core (thread shift is 0) ----------------------------------------------------- Hash_size = 0x200000 phys_mem_size = 0x30000000 dcache_bsize = 0x20 icache_bsize = 0x20 cpu_features = 0x000000000501a008 possible = 0x000000002f7ff04b always = 0x0000000001000000 cpu_user_features = 0x8c000001 0x00000000 mmu_features = 0x00000001 Hash = 0x(ptrval) Hash_mask = 0x7fff ----------------------------------------------------- Found Grackle (MPC106) PCI host bridge at 0x0000000080000000. Firmware bus number: 0->0 PCI host bridge /pci (primary) ranges: IO 0x00000000fe000000..0x00000000fe7fffff -> 0x0000000000000000 MEM 0x00000000fd000000..0x00000000fdffffff -> 0x0000000000000000 MEM 0x0000000080000000..0x00000000fcffffff -> 0x0000000080000000 nvram: OF partition at 0x1800 nvram: XP partition at 0x1300 nvram: NR partition at 0x1400 Top of RAM: 0x30000000, Total RAM: 0x30000000 Memory hole size: 0MB Zone ranges: DMA [mem 0x0000000000000000-0x000000002fffffff] Normal empty HighMem empty Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000000000000-0x000000002fffffff] Initmem setup node 0 [mem 0x0000000000000000-0x000000002fffffff] On node 0 totalpages: 196608 DMA zone: 1536 pages used for memmap DMA zone: 0 pages reserved DMA zone: 196608 pages, LIFO batch:31 percpu: Embedded 14 pages/cpu @(ptrval) s24684 r8192 d24468 u57344 pcpu-alloc: s24684 r8192 d24468 u57344 alloc=14*4096 pcpu-alloc: [0] 0 [0] 1 Built 1 zonelists, mobility grouping on. Total pages: 195072 Kernel command line: root=/dev/sda12 video=atyfb:vmode:14 log_buf_len=64k earlyprintk console=tty0 log_buf_len: 65536 bytes early log buf free: 29884(91%) Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) Memory: 760236K/786432K available (5756K kernel code, 244K rwdata, 1332K rodata, 268K init, 175K bss, 26196K reserved, 0K cma-reserved, 0K highmem) Kernel virtual memory layout: * 0xfffbf000..0xfffff000 : fixmap * 0xff800000..0xffc00000 : highmem PTEs * 0xfef5b000..0xff800000 : early ioremap * 0xf1000000..0xfef5b000 : vmalloc & ioremap Hierarchical RCU implementation. NR_IRQS: 512, nr_irqs: 512, preallocated irqs: 16 irq: Found primary Apple PIC /pci/mac-io for 64 irqs irq: System has 64 possible interrupts GMT Delta read from XPRAM: -360 minutes, DST: on time_init: decrementer frequency = 16.708416 MHz time_init: processor frequency = 501.150000 MHz clocksource: timebase: mask: 0xffffffffffffffff max_cycles: 0x3da7d2cd7, max_idle_ns: 440795202411 ns clocksource: timebase mult[3bd99eb5] shift[24] registered clockevent: decrementer mult[44700b4] shift[32] cpu[0] Console: colour dummy device 80x25 console [tty0] enabled bootconsole [udbg0] disabled pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 2048 (order: 1, 8192 bytes) Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes) Hierarchical SRCU implementation. smp: Bringing up secondary CPUs ... smp: Brought up 1 node, 1 CPU Using standard scheduler topology devtmpfs: initialized Duplicate name in PowerPC,750, renamed to "l2-cache#1" Duplicate name in mac-io, renamed to "ide#1" Duplicate name in ide#1, renamed to "atapi-disk#1" Duplicate name in multifunc-device, renamed to "pci1799,1#1" random: get_random_u32 called from bucket_table_alloc+0x90/0x214 with crng_init=0 clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns futex hash table entries: 512 (order: 2, 16384 bytes) NET: Registered protocol family 16 PCI: Probing PCI hardware PCI host bridge to bus 0000:00 pci_bus 0000:00: root bus resource [io 0x0000-0x7fffff] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfdffffff] (bus address [0x00000000-0x00ffffff]) pci_bus 0000:00: root bus resource [mem 0x80000000-0xfcffffff] pci_bus 0000:00: root bus resource [bus 00-ff] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to ff pci 0000:00:00.0: [1057:0002] type 00 class 0x060000 pci 0000:00:0e.0: [1033:00cd] type 00 class 0x0c0010 pci 0000:00:0e.0: reg 0x10: [mem 0x80803000-0x80803fff] pci 0000:00:0e.0: supports D2 pci 0000:00:0e.0: PME# supported from D2 D3hot pci 0000:00:0f.0: [1033:0035] type 00 class 0x0c0310 pci 0000:00:0f.0: reg 0x10: [mem 0x80802000-0x80802fff] pci 0000:00:0f.0: supports D1 D2 pci 0000:00:0f.0: PME# supported from D0 D1 D2 D3hot pci 0000:00:0f.1: [1033:0035] type 00 class 0x0c0310 pci 0000:00:0f.1: reg 0x10: [mem 0x80801000-0x80801fff] pci 0000:00:0f.1: supports D1 D2 pci 0000:00:0f.1: PME# supported from D0 D1 D2 D3hot pci 0000:00:0f.2: [1033:00e0] type 00 class 0x0c0320 pci 0000:00:0f.2: reg 0x10: [mem 0x80800000-0x808000ff] pci 0000:00:0f.2: supports D1 D2 pci 0000:00:0f.2: PME# supported from D0 D1 D2 D3hot pci 0000:00:10.0: [106b:0010] type 00 class 0xff0000 pci 0000:00:10.0: reg 0x10: [mem 0xf3000000-0xf307ffff] pci 0000:00:12.0: [1002:4750] type 00 class 0x030000 pci 0000:00:12.0: reg 0x10: [mem 0x81000000-0x81ffffff] pci 0000:00:12.0: reg 0x14: [io 0x0c00-0x0cff] pci 0000:00:12.0: reg 0x18: [mem 0x80804000-0x80804fff] pci 0000:00:12.0: reg 0x30: [mem 0xfd000000-0xfd01ffff pref] pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00 PCI 0000:00 Cannot reserve Legacy IO [io 0x0000-0x0fff] pci 0000:00:12.0: BAR 6: assigned [mem 0xfd000000-0xfd01ffff pref] pci_bus 0000:00: resource 4 [io 0x0000-0x7fffff] pci_bus 0000:00: resource 5 [mem 0xfd000000-0xfdffffff] pci_bus 0000:00: resource 6 [mem 0x80000000-0xfcffffff] pci 0000:00:12.0: vgaarb: VGA device added: decodes=io+mem,owns=mem,locks=none pci 0000:00:12.0: vgaarb: bridge control possible pci 0000:00:12.0: vgaarb: setting as boot device (VGA legacy resources not available) vgaarb: loaded SCSI subsystem initialized libata version 3.00 loaded. usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb clocksource: Switched to clocksource timebase NET: Registered protocol family 2 tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes) TCP established hash table entries: 8192 (order: 3, 32768 bytes) TCP bind hash table entries: 8192 (order: 4, 65536 bytes) TCP: Hash tables configured (established 8192 bind 8192) UDP hash table entries: 512 (order: 2, 16384 bytes) UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) NET: Registered protocol family 1 RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. pci 0000:00:0f.0: enabling device (0014 -> 0016) pci 0000:00:0f.1: enabling device (0014 -> 0016) pci 0000:00:0f.2: enabling device (0014 -> 0016) PCI: CLS 32 bytes, default 32 Thermal assist unit using timers, shrink_timer: 200 jiffies Initialise system trusted keyrings workingset: timestamp_bits=30 max_order=18 bucket_order=0 squashfs: version 4.0 (2009/01/31) Phillip Lougher Key type asymmetric registered Asymmetric key parser 'x509' registered Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) io scheduler noop registered io scheduler deadline registered (default) io scheduler mq-deadline registered (default) io scheduler kyber registered atyfb 0000:00:12.0: enabling device (0086 -> 0087) atyfb: using auxiliary register aperture atyfb: 3D RAGE PRO (Mach64 GP, PQFP, PCI) [0x4750 rev 0x7c] atyfb: 6M SGRAM (1:1), 14.31818 MHz XTAL, 230 MHz PLL, 100 Mhz MCLK, 100 MHz XCLK Console: switching to colour frame buffer device 128x48 atyfb: fb0: ATY Mach64 frame buffer device on PCI pmac_zilog: 0.6 (Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>) Generic non-volatile memory driver v1.1 brd: module loaded loop: module loaded MacIO PCI driver attached to Heathrow chipset swim3 0.00015000:swim3: [fd0] SWIM3 floppy controller 0.00013020:ch-a: ttyS0 at MMIO 0xf3013020 (irq = 16, base_baud = 230400) is a Z85c30 ESCC - Serial port 0.00013000:ch-b: ttyS1 at MMIO 0xf3013000 (irq = 17, base_baud = 230400) is a Z85c30 ESCC - Serial port Macintosh Cuda and Egret driver. mesh: configured for synchronous 5 MB/s random: fast init done ADB keyboard at 2, handler 1 Detected ADB keyboard, type ANSI. input: ADB keyboard as /devices/virtual/input/input0 mesh: performing initial bus reset... ADB mouse at 3, handler set to 2 input: ADB mouse as /devices/virtual/input/input1 scsi host0: MESH pata-macio 0.00020000:ide: Activating pata-macio chipset Heathrow ATA, Apple bus ID 0 scsi host1: pata_macio ata1: PATA max MWDMA2 irq 28 ata1.00: ATA-7: Maxtor 6Y120P0, YAR41BW0, max UDMA/133 ata1.00: 240121728 sectors, multi 0: LBA scsi 1:0:0:0: Direct-Access ATA Maxtor 6Y120P0 1BW0 PQ: 0 ANSI: 5 sd 1:0:0:0: [sda] 240121728 512-byte logical blocks: (123 GB/114 GiB) sd 1:0:0:0: Attached scsi generic sg0 type 0 sd 1:0:0:0: [sda] Write Protect is off sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA pata-macio 0.00021000:ide: Activating pata-macio chipset Heathrow ATA, Apple bus ID 1 scsi host2: pata_macio ata2: PATA max MWDMA2 irq 30 eth0: BMAC at 00:05:02:fd:98:9c firewire_ohci 0000:00:0e.0: enabling device (0014 -> 0016) ata2.00: ATAPI: IOMEGA ZIP 100 ATAPI, 25.D, max PIO2, CDB intr ata2.01: ATAPI: MATSHITADVD-ROM SR-8582, 0B8b, max MWDMA2 scsi 2:0:0:0: Direct-Access IOMEGA ZIP 100 25.D PQ: 0 ANSI: 5 firewire_ohci 0000:00:0e.0: added OHCI v1.0 device as card 0, 4 IR + 4 IT contexts, quirks 0x1 aoe: cannot create debugfs directory aoe: AoE v85 initialised. ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-pci: EHCI PCI platform driver sd 2:0:0:0: Attached scsi generic sg1 type 0 ehci-pci 0000:00:0f.2: EHCI Host Controller ehci-pci 0000:00:0f.2: new USB bus registered, assigned bus number 1 ehci-pci 0000:00:0f.2: irq 25, io mem 0x80800000 ehci-pci 0000:00:0f.2: USB 2.0 started, EHCI 1.00 usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.18 usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: Product: EHCI Host Controller usb usb1: Manufacturer: Linux 4.18.0-g5d852e5b3424 ehci_hcd usb usb1: SerialNumber: 0000:00:0f.2 hub 1-0:1.0: USB hub found hub 1-0:1.0: 5 ports detected ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver ohci-pci: OHCI PCI platform driver ohci-pci 0000:00:0f.0: OHCI PCI host controller ohci-pci 0000:00:0f.0: new USB bus registered, assigned bus number 2 sd 2:0:0:0: [sdb] Attached SCSI removable disk ohci-pci 0000:00:0f.0: irq 25, io mem 0x80802000 scsi 2:0:1:0: CD-ROM MATSHITA DVD-ROM SR-8582 0B8b PQ: 0 ANSI: 5 sr 2:0:1:0: [sr0] scsi3-mmc drive: 24x/24x cd/rw xa/form2 cdda tray cdrom: Uniform CD-ROM driver Revision: 3.20 sr 2:0:1:0: Attached scsi CD-ROM sr0 sr 2:0:1:0: Attached scsi generic sg2 type 5 usb usb2: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18 usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb2: Product: OHCI PCI host controller usb usb2: Manufacturer: Linux 4.18.0-g5d852e5b3424 ohci_hcd usb usb2: SerialNumber: 0000:00:0f.0 hub 2-0:1.0: USB hub found hub 2-0:1.0: 3 ports detected ohci-pci 0000:00:0f.1: OHCI PCI host controller ohci-pci 0000:00:0f.1: new USB bus registered, assigned bus number 3 ohci-pci 0000:00:0f.1: irq 25, io mem 0x80801000 usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 4.18 usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb3: Product: OHCI PCI host controller usb usb3: Manufacturer: Linux 4.18.0-g5d852e5b3424 ohci_hcd usb usb3: SerialNumber: 0000:00:0f.1 firewire_core 0000:00:0e.0: created device fw0: GUID 00d0f52008006aff, S400 hub 3-0:1.0: USB hub found hub 3-0:1.0: 2 ports detected usbcore: registered new interface driver uas usbcore: registered new interface driver usb-storage mousedev: PS/2 mouse device common for all mice rtc-generic rtc-generic: rtc core: registered rtc-generic as rtc0 i2c /dev entries driver usbcore: registered new interface driver usbhid usbhid: USB HID core driver NET: Registered protocol family 17 drmem: No dynamic reconfiguration memory found Loading compiled-in X.509 certificates net firewire0: IP over IEEE 1394 on card 0000:00:0e.0 firewire_core 0000:00:0e.0: refreshed device fw0 sda: [mac] sda1 sda2 sda3 sda4 sda5 sda6 sda7 sda8 sda9 sda10 sda11 sda12 sda13 sda14 sda15 sd 1:0:0:0: [sda] Attached SCSI disk EXT4-fs (sda12): mounting ext3 file system using the ext4 subsystem EXT4-fs (sda12): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext3 filesystem) readonly on device 8:12. Freeing unused kernel memory: 268K This architecture does not have kernel memory protection. Adding 3145724k swap on /dev/sda13. Priority:-2 extents:1 across:3145724k EXT4-fs (sda12): re-mounted. Opts: (null) random: crng init done EXT4-fs (sda12): re-mounted. Opts: errors=remount-ro EXT4-fs (sda14): mounting ext3 file system using the ext4 subsystem EXT4-fs (sda14): mounted filesystem with ordered data mode. Opts: (null) phy registers: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Installing knfsd (copyright (C) 1996 okir@xxxxxxxxxxxx).