forked from Minki/linux
Merge branch 'parisc-4.4-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc fixes from Helge Deller: "Fix the boot crash on Mako machines with Huge Pages, prevent a panic with SATA controllers (and others) by correctly calculating the IOMMU space, hook up the mlock2 syscall and drop unneeded code in the parisc pci code" * 'parisc-4.4-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: Disable huge pages on Mako machines parisc: Wire up mlock2 syscall parisc: Remove unused pcibios_init_bus() parisc iommu: fix panic due to trying to allocate too large region
This commit is contained in:
commit
a971526e4d
@ -372,7 +372,8 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
|
||||
*/
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
#define pte_huge(pte) (pte_val(pte) & _PAGE_HUGE)
|
||||
#define pte_mkhuge(pte) (__pte(pte_val(pte) | _PAGE_HUGE))
|
||||
#define pte_mkhuge(pte) (__pte(pte_val(pte) | \
|
||||
(parisc_requires_coherency() ? 0 : _PAGE_HUGE)))
|
||||
#else
|
||||
#define pte_huge(pte) (0)
|
||||
#define pte_mkhuge(pte) (pte)
|
||||
|
@ -360,8 +360,9 @@
|
||||
#define __NR_execveat (__NR_Linux + 342)
|
||||
#define __NR_membarrier (__NR_Linux + 343)
|
||||
#define __NR_userfaultfd (__NR_Linux + 344)
|
||||
#define __NR_mlock2 (__NR_Linux + 345)
|
||||
|
||||
#define __NR_Linux_syscalls (__NR_userfaultfd + 1)
|
||||
#define __NR_Linux_syscalls (__NR_mlock2 + 1)
|
||||
|
||||
|
||||
#define __IGNORE_select /* newselect */
|
||||
|
@ -171,24 +171,6 @@ void pcibios_set_master(struct pci_dev *dev)
|
||||
}
|
||||
|
||||
|
||||
void __init pcibios_init_bus(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_dev *dev = bus->self;
|
||||
unsigned short bridge_ctl;
|
||||
|
||||
/* We deal only with pci controllers and pci-pci bridges. */
|
||||
if (!dev || (dev->class >> 8) != PCI_CLASS_BRIDGE_PCI)
|
||||
return;
|
||||
|
||||
/* PCI-PCI bridge - set the cache line and default latency
|
||||
(32) for primary and secondary buses. */
|
||||
pci_write_config_byte(dev, PCI_SEC_LATENCY_TIMER, 32);
|
||||
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &bridge_ctl);
|
||||
bridge_ctl |= PCI_BRIDGE_CTL_PARITY | PCI_BRIDGE_CTL_SERR;
|
||||
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl);
|
||||
}
|
||||
|
||||
/*
|
||||
* pcibios align resources() is called every time generic PCI code
|
||||
* wants to generate a new address. The process of looking for
|
||||
|
@ -440,6 +440,7 @@
|
||||
ENTRY_COMP(execveat)
|
||||
ENTRY_SAME(membarrier)
|
||||
ENTRY_SAME(userfaultfd)
|
||||
ENTRY_SAME(mlock2) /* 345 */
|
||||
|
||||
|
||||
.ifne (. - 90b) - (__NR_Linux_syscalls * (91b - 90b))
|
||||
|
@ -104,7 +104,11 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
|
||||
struct scatterlist *contig_sg; /* contig chunk head */
|
||||
unsigned long dma_offset, dma_len; /* start/len of DMA stream */
|
||||
unsigned int n_mappings = 0;
|
||||
unsigned int max_seg_size = dma_get_max_seg_size(dev);
|
||||
unsigned int max_seg_size = min(dma_get_max_seg_size(dev),
|
||||
(unsigned)DMA_CHUNK_SIZE);
|
||||
unsigned int max_seg_boundary = dma_get_seg_boundary(dev) + 1;
|
||||
if (max_seg_boundary) /* check if the addition above didn't overflow */
|
||||
max_seg_size = min(max_seg_size, max_seg_boundary);
|
||||
|
||||
while (nents > 0) {
|
||||
|
||||
@ -138,14 +142,11 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
|
||||
|
||||
/*
|
||||
** First make sure current dma stream won't
|
||||
** exceed DMA_CHUNK_SIZE if we coalesce the
|
||||
** exceed max_seg_size if we coalesce the
|
||||
** next entry.
|
||||
*/
|
||||
if(unlikely(ALIGN(dma_len + dma_offset + startsg->length,
|
||||
IOVP_SIZE) > DMA_CHUNK_SIZE))
|
||||
break;
|
||||
|
||||
if (startsg->length + dma_len > max_seg_size)
|
||||
if (unlikely(ALIGN(dma_len + dma_offset + startsg->length, IOVP_SIZE) >
|
||||
max_seg_size))
|
||||
break;
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user