Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa4927b9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull parisc fixes from Helge Deller:
 "This contains a kernel segfault fix when reading /proc/kpageflags or
  /proc/kpagecount, two fixes for the serial port and PCI graphic card
  support on C8000 workstations and a fix to use unshadowed registers
  for flushing D- and I-caches."

* 'parisc-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Use unshadowed index register for flush instructions in flush_dcache_page_asm and flush_icache_page_asm
  parisc: provide pci_mmap_page_range() for parisc
  parisc: fix serial ports on C8000 workstation
  parisc: fix kernel BUG at arch/parisc/include/asm/mmzone.h:50 (part 2)
parents 418a133b d65ea48d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ extern struct node_map_data node_data[];

#define PFNNID_SHIFT (30 - PAGE_SHIFT)
#define PFNNID_MAP_MAX  512     /* support 512GB */
extern unsigned char pfnnid_map[PFNNID_MAP_MAX];
extern signed char pfnnid_map[PFNNID_MAP_MAX];

#ifndef CONFIG_64BIT
#define pfn_is_io(pfn) ((pfn & (0xf0000000UL >> PAGE_SHIFT)) == (0xf0000000UL >> PAGE_SHIFT))
@@ -46,7 +46,7 @@ static inline int pfn_to_nid(unsigned long pfn)
	i = pfn >> PFNNID_SHIFT;
	BUG_ON(i >= ARRAY_SIZE(pfnnid_map));

	return (int)pfnnid_map[i];
	return pfnnid_map[i];
}

static inline int pfn_valid(int pfn)
+5 −0
Original line number Diff line number Diff line
@@ -225,4 +225,9 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
	return channel ? 15 : 14;
}

#define HAVE_PCI_MMAP

extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
	enum pci_mmap_state mmap_state, int write_combine);

#endif /* __ASM_PARISC_PCI_H */
+1 −0
Original line number Diff line number Diff line
@@ -1205,6 +1205,7 @@ static struct hp_hardware hp_hardware_list[] = {
	{HPHW_FIO, 0x004, 0x00320, 0x0, "Metheus Frame Buffer"}, 
	{HPHW_FIO, 0x004, 0x00340, 0x0, "BARCO CX4500 VME Grphx Cnsl"}, 
	{HPHW_FIO, 0x004, 0x00360, 0x0, "Hughes TOG VME FDDI"}, 
	{HPHW_FIO, 0x076, 0x000AD, 0x00, "Crestone Peak RS-232"},
	{HPHW_IOA, 0x185, 0x0000B, 0x00, "Java BC Summit Port"}, 
	{HPHW_IOA, 0x1FF, 0x0000B, 0x00, "Hitachi Ghostview Summit Port"}, 
	{HPHW_IOA, 0x580, 0x0000B, 0x10, "U2-IOA BC Runway Port"}, 
+38 −38
Original line number Diff line number Diff line
@@ -860,7 +860,7 @@ ENTRY(flush_dcache_page_asm)
#endif

	ldil		L%dcache_stride, %r1
	ldw		R%dcache_stride(%r1), %r1
	ldw		R%dcache_stride(%r1), r31

#ifdef CONFIG_64BIT
	depdi,z		1, 63-PAGE_SHIFT,1, %r25
@@ -868,26 +868,26 @@ ENTRY(flush_dcache_page_asm)
	depwi,z		1, 31-PAGE_SHIFT,1, %r25
#endif
	add		%r28, %r25, %r25
	sub		%r25, %r1, %r25


1:      fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	fdc,m		%r1(%r28)
	sub		%r25, r31, %r25


1:      fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	fdc,m		r31(%r28)
	cmpb,COND(<<)		%r28, %r25,1b
	fdc,m		%r1(%r28)
	fdc,m		r31(%r28)

	sync

@@ -936,7 +936,7 @@ ENTRY(flush_icache_page_asm)
#endif

	ldil		L%icache_stride, %r1
	ldw		R%icache_stride(%r1), %r1
	ldw		R%icache_stride(%r1), %r31

#ifdef CONFIG_64BIT
	depdi,z		1, 63-PAGE_SHIFT,1, %r25
@@ -944,28 +944,28 @@ ENTRY(flush_icache_page_asm)
	depwi,z		1, 31-PAGE_SHIFT,1, %r25
#endif
	add		%r28, %r25, %r25
	sub		%r25, %r1, %r25
	sub		%r25, %r31, %r25


	/* fic only has the type 26 form on PA1.1, requiring an
	 * explicit space specification, so use %sr4 */
1:      fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
	fic,m		%r1(%sr4,%r28)
1:      fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)
	cmpb,COND(<<)	%r28, %r25,1b
	fic,m		%r1(%sr4,%r28)
	fic,m		%r31(%sr4,%r28)

	sync

+27 −0
Original line number Diff line number Diff line
@@ -220,6 +220,33 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,
}


int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
			enum pci_mmap_state mmap_state, int write_combine)
{
	unsigned long prot;

	/*
	 * I/O space can be accessed via normal processor loads and stores on
	 * this platform but for now we elect not to do this and portable
	 * drivers should not do this anyway.
	 */
	if (mmap_state == pci_mmap_io)
		return -EINVAL;

	if (write_combine)
		return -EINVAL;

	/*
	 * Ignore write-combine; for now only return uncached mappings.
	 */
	prot = pgprot_val(vma->vm_page_prot);
	prot |= _PAGE_NO_CACHE;
	vma->vm_page_prot = __pgprot(prot);

	return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
		vma->vm_end - vma->vm_start, vma->vm_page_prot);
}

/*
 * A driver is enabling the device.  We make sure that all the appropriate
 * bits are set to allow the device to operate as the driver is expecting.
Loading