firewire: revert to 4 GB RDMA, fix protocols using Memory Space
Undo a feature introduced in v3.14 by commitfcd46b3442
"firewire: Enable remote DMA above 4 GB". That change raised the minimum address at which protocol drivers and user programs can register for request reception from 0x0001'0000'0000 to 0x8000'0000'0000. It turned out that at least one vendor-specific protocol exists which uses lower addresses: https://bugzilla.kernel.org/show_bug.cgi?id=76921 For the time being, revert most of commitfcd46b3442
so that affected protocols work like with kernel v3.13 and before. Just keep the valid documentation parts from the regressing commit, and the ability to identify controllers which could be programmed to accept >32 bit physical DMA addresses. The rest offcd46b3442
should probably be brought back as an optional instead of default feature. Reported-by: Fabien Spindler <fabien.spindler@inria.fr> Cc: <stable@vger.kernel.org> # 3.14+ Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
c7208164e6
commit
2fe2023adf
3 changed files with 11 additions and 8 deletions
|
@ -25,9 +25,11 @@ using data transfer rates in the order of 10MB/s or more.
|
|||
With most FireWire controllers, memory access is limited to the low 4 GB
|
||||
of physical address space. This can be a problem on IA64 machines where
|
||||
memory is located mostly above that limit, but it is rarely a problem on
|
||||
more common hardware such as x86, x86-64 and PowerPC. However, at least
|
||||
Agere/LSI FW643e and FW643e2 controllers are known to support access to
|
||||
physical addresses above 4 GB.
|
||||
more common hardware such as x86, x86-64 and PowerPC.
|
||||
|
||||
At least LSI FW643e and FW643e2 controllers are known to support access to
|
||||
physical addresses above 4 GB, but this feature is currently not enabled by
|
||||
Linux.
|
||||
|
||||
Together with a early initialization of the OHCI-1394 controller for debugging,
|
||||
this facility proved most useful for examining long debugs logs in the printk
|
||||
|
@ -101,8 +103,9 @@ Step-by-step instructions for using firescope with early OHCI initialization:
|
|||
compliant, they are based on TI PCILynx chips and require drivers for Win-
|
||||
dows operating systems.
|
||||
|
||||
The mentioned kernel log message contains ">4 GB phys DMA" in case of
|
||||
OHCI-1394 controllers which support accesses above this limit.
|
||||
The mentioned kernel log message contains the string "physUB" if the
|
||||
controller implements a writable Physical Upper Bound register. This is
|
||||
required for physical DMA above 4 GB (but not utilized by Linux yet).
|
||||
|
||||
2) Establish a working FireWire cable connection:
|
||||
|
||||
|
|
|
@ -237,8 +237,8 @@ static inline bool is_next_generation(int new_generation, int old_generation)
|
|||
|
||||
#define LOCAL_BUS 0xffc0
|
||||
|
||||
/* arbitrarily chosen maximum range for physical DMA: 128 TB */
|
||||
#define FW_MAX_PHYSICAL_RANGE (128ULL << 40)
|
||||
/* OHCI-1394's default upper bound for physical DMA: 4 GB */
|
||||
#define FW_MAX_PHYSICAL_RANGE (1ULL << 32)
|
||||
|
||||
void fw_core_handle_request(struct fw_card *card, struct fw_packet *request);
|
||||
void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet);
|
||||
|
|
|
@ -3716,7 +3716,7 @@ static int pci_probe(struct pci_dev *dev,
|
|||
version >> 16, version & 0xff, ohci->card.index,
|
||||
ohci->n_ir, ohci->n_it, ohci->quirks,
|
||||
reg_read(ohci, OHCI1394_PhyUpperBound) ?
|
||||
", >4 GB phys DMA" : "");
|
||||
", physUB" : "");
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in a new issue