need to use the amiga_bus_stride_1swap methods for the word accesses.
Analyzed and submitted via port-amiga@ by Martin Åberg.
Tested on formerly working hardware
- by Jukka Andberg with Dlink DE-660+ (ne)
- by Frank Wille with D-Link DFE-670TXD (ne)
Tested on formerly not working hardware:
- by Martin with 3Com 3c589 Etherling III (ep)
- by Martin and Frank with CompactFlash cards (wdc)
struct disk_sectoralign {
/* First aligned sector number. */
uint32_t dsa_firstaligned;
/* Number of sectors per aligned unit. */
uint32_t dsa_alignment;
};
- Teach wd(4) to get it from ATA.
- Teach cgd(4) to pass it through from the underlying disk.
- Teach dk(4) to pass it through with adjustments.
- Teach zpool (zfs) to take advantage of it.
=> XXX zpool doesn't seem to understand when the vdev's starting
sector is misaligned.
Missing:
- ccd(4) and raidframe(4) support -- these should support _using_
DIOCGSECTORALIGN to decide where to start putting ccd or raid
stripes on disk, and these should perhaps _implement_
DIOCGSECTORALIGN by reporting the stripe/interleave factor.
- sd(4) support -- I don't know any obvious way to get it from SCSI,
but if any SCSI wizards know better than I, please feel free to
teach sd(4) about it!
- any ld(4) attachments -- might be worth teaching the ld drivers for
nvme and various raid controllers to get the aligned sector size
There's some duplicate logic here for now. I'm doing it this way,
rather than gathering the logic into a new disklabel_sectoralign
function or something, so that this change is limited to adding a new
ioctl, without any new kernel symbols, in order to make it easy to
pull up to netbsd-9 without worrying about the module ABI.
Detected by UBSan and already fixed upstream.
Cherry-pick:
From aa0218d6a12814fac50b287214f9f3b0b99e11b1 Mon Sep 17 00:00:00 2001
From: Brian Behlendorf <behlendorf1@llnl.gov>
Date: Tue, 7 Jan 2014 23:24:37 +0100
Subject: [PATCH] Fix nvlist 'Bus Error' for Sparc
The mis-aligned memory accesses in nvpair_native_embedded() and
nvpair_native_embedded_array() will cause a 'Bus Error' for
architectures such as Sparc which not fully byte addressible.
To avoid this issue care is taken to avoid dereferencing the
potentially mis-aligned packed nvlist_t.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ned Bass <bass6@llnl.gov>
Signed-off-by: marku89 <mar42@kola.li>
Issue #1700
Some tools that use libhack expect thread locking.
An example of this is zpool(8).
Without it, it randomly crashes. As such, force _REENTRANT to avoid
debugging future random crashes from any other applications which
rely on this.
(This use of uvm_object causes a disproportionate amount of work.)
- Undo the pmap_destroy()/pmap_delref() split. I misunderstood the flow of
control, and there's no need for this.
- For pmap_remove_pv(), always look up the pv_entry in advance as those
calls will need to be covered by lock again soon.
- This was assuming arg == curlwp, but NULL is passed to lwp_create(), as
evidenced by a random panic during testing. How did this ever work?
- Replace a goto.
New tests:
- syscall_signal_on_sce
- syscall_detach_on_sce
The first one fails as a signal emitted to the child is caught by the
debugger.
The second one passes.
Makefiles so that we can make changes to it centrally as needed and have
less mess. Fixes the sun2 build that needs rumpvfs after librump after
the latest changes.