Merge branch 'parisc-3.11-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc updates from Helge Deller: "The majority of lines changed are due the addition of a defconfig for the C8000 machine. Even the fix in parisc/kernel/cache.c file is actually ony a 10-line fix, but the change became bigger (and much nicer) to avoid errors of the checkpatch script. Here is the short-changelog: This round of parisc updates includes mostly fixes for the C8000 workstation. We have a new defconfig file for this machine, as well as fixes for it's serial port, the AGP driver and the cache routines to cope with the vmas of the FireGL card in a C8000. The sys32.h header file was not used and as such it's now gone" * 'parisc-3.11-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: Fix interrupt routing for C8000 serial ports parisc: Remove arch/parisc/kernel/sys32.h header parisc: add defconfig for c8000 machine parisc: agp/parisc-agp: allow binding of user memory to the AGP GART parisc: Fix cache routines to ignore vma's with an invalid pfn
This commit is contained in:
commit
efc6816415
|
@ -0,0 +1,279 @@
|
|||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_BLK_DEV_INTEGRITY=y
|
||||
CONFIG_PA8X00=y
|
||||
CONFIG_MLONGCALLS=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_PREEMPT=y
|
||||
# CONFIG_CROSS_MEMORY_ATTACH is not set
|
||||
CONFIG_IOMMU_CCIO=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_LBA=y
|
||||
# CONFIG_SUPERIO is not set
|
||||
# CONFIG_CHASSIS_LCD_LED is not set
|
||||
# CONFIG_PDC_CHASSIS is not set
|
||||
# CONFIG_PDC_CHASSIS_WARN is not set
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=m
|
||||
CONFIG_XFRM_SUB_POLICY=y
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=m
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_SYN_COOKIES=y
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_XFRM_MODE_BEET=m
|
||||
CONFIG_INET_DIAG=m
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_IP_DCCP=m
|
||||
# CONFIG_IP_DCCP_CCID3 is not set
|
||||
CONFIG_TIPC=m
|
||||
CONFIG_LLC2=m
|
||||
CONFIG_DNS_RESOLVER=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_STANDALONE is not set
|
||||
CONFIG_PARPORT=y
|
||||
CONFIG_PARPORT_PC=y
|
||||
CONFIG_PARPORT_PC_FIFO=y
|
||||
CONFIG_BLK_DEV_UMEM=m
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_SX8=m
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_WCACHE=y
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_PLATFORM=y
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_SIIMAGE=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_BLK_DEV_SR=m
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_CHR_DEV_SCH=m
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_SCSI_FC_ATTRS=y
|
||||
CONFIG_SCSI_SAS_LIBSAS=m
|
||||
CONFIG_ISCSI_TCP=m
|
||||
CONFIG_ISCSI_BOOT_SYSFS=m
|
||||
CONFIG_FUSION=y
|
||||
CONFIG_FUSION_SPI=y
|
||||
CONFIG_FUSION_SAS=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_TUN=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PPP=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
CONFIG_PPP_SYNC_TTY=m
|
||||
# CONFIG_WLAN is not set
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
# CONFIG_KEYBOARD_HIL is not set
|
||||
CONFIG_MOUSE_PS2=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_CM109=m
|
||||
CONFIG_SERIO_SERPORT=m
|
||||
CONFIG_SERIO_PARKBD=m
|
||||
CONFIG_SERIO_GSCPS2=m
|
||||
# CONFIG_HP_SDC is not set
|
||||
CONFIG_SERIO_PCIPS2=m
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SERIO_RAW=m
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=8
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=8
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
# CONFIG_SERIAL_MUX is not set
|
||||
CONFIG_SERIAL_JSM=m
|
||||
CONFIG_PRINTER=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
CONFIG_RAW_DRIVER=m
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
CONFIG_SSB=m
|
||||
CONFIG_SSB_DRIVER_PCICORE=y
|
||||
CONFIG_AGP=y
|
||||
CONFIG_AGP_PARISC=y
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_RADEON=y
|
||||
CONFIG_FIRMWARE_EDID=y
|
||||
CONFIG_FB_FOREIGN_ENDIAN=y
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
# CONFIG_FB_STI is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_STI_CONSOLE is not set
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_AD1889=m
|
||||
# CONFIG_SND_USB is not set
|
||||
# CONFIG_SND_GSC is not set
|
||||
CONFIG_HID_A4TECH=m
|
||||
CONFIG_HID_APPLE=m
|
||||
CONFIG_HID_BELKIN=m
|
||||
CONFIG_HID_CHERRY=m
|
||||
CONFIG_HID_CHICONY=m
|
||||
CONFIG_HID_CYPRESS=m
|
||||
CONFIG_HID_DRAGONRISE=m
|
||||
CONFIG_HID_EZKEY=m
|
||||
CONFIG_HID_KYE=m
|
||||
CONFIG_HID_GYRATION=m
|
||||
CONFIG_HID_TWINHAN=m
|
||||
CONFIG_HID_KENSINGTON=m
|
||||
CONFIG_HID_LOGITECH=m
|
||||
CONFIG_HID_LOGITECH_DJ=m
|
||||
CONFIG_HID_MICROSOFT=m
|
||||
CONFIG_HID_MONTEREY=m
|
||||
CONFIG_HID_NTRIG=m
|
||||
CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SUNPLUS=m
|
||||
CONFIG_HID_GREENASIA=m
|
||||
CONFIG_HID_SMARTJOYPLUS=m
|
||||
CONFIG_HID_TOPSEED=m
|
||||
CONFIG_HID_THRUSTMASTER=m
|
||||
CONFIG_HID_ZEROPLUS=m
|
||||
CONFIG_USB_HID=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT4_FS=m
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_REISERFS_PROC_INFO=y
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
CONFIG_QUOTA=y
|
||||
CONFIG_QFMT_V1=m
|
||||
CONFIG_QFMT_V2=m
|
||||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_CODEPAGE_737=m
|
||||
CONFIG_NLS_CODEPAGE_775=m
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
CONFIG_NLS_CODEPAGE_852=m
|
||||
CONFIG_NLS_CODEPAGE_855=m
|
||||
CONFIG_NLS_CODEPAGE_857=m
|
||||
CONFIG_NLS_CODEPAGE_860=m
|
||||
CONFIG_NLS_CODEPAGE_861=m
|
||||
CONFIG_NLS_CODEPAGE_862=m
|
||||
CONFIG_NLS_CODEPAGE_863=m
|
||||
CONFIG_NLS_CODEPAGE_864=m
|
||||
CONFIG_NLS_CODEPAGE_865=m
|
||||
CONFIG_NLS_CODEPAGE_866=m
|
||||
CONFIG_NLS_CODEPAGE_869=m
|
||||
CONFIG_NLS_CODEPAGE_936=m
|
||||
CONFIG_NLS_CODEPAGE_950=m
|
||||
CONFIG_NLS_CODEPAGE_932=m
|
||||
CONFIG_NLS_CODEPAGE_949=m
|
||||
CONFIG_NLS_CODEPAGE_874=m
|
||||
CONFIG_NLS_ISO8859_8=m
|
||||
CONFIG_NLS_CODEPAGE_1250=m
|
||||
CONFIG_NLS_CODEPAGE_1251=m
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_2=m
|
||||
CONFIG_NLS_ISO8859_3=m
|
||||
CONFIG_NLS_ISO8859_4=m
|
||||
CONFIG_NLS_ISO8859_5=m
|
||||
CONFIG_NLS_ISO8859_6=m
|
||||
CONFIG_NLS_ISO8859_7=m
|
||||
CONFIG_NLS_ISO8859_9=m
|
||||
CONFIG_NLS_ISO8859_13=m
|
||||
CONFIG_NLS_ISO8859_14=m
|
||||
CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_NLS_KOI8_R=m
|
||||
CONFIG_NLS_KOI8_U=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_UNUSED_SYMBOLS=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
CONFIG_DEBUG_SLAB_LEAK=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_DEBUG_STACKOVERFLOW=y
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_RT_MUTEX_TESTER=y
|
||||
CONFIG_PROVE_RCU_DELAY=y
|
||||
CONFIG_DEBUG_BLOCK_EXT_DEVT=y
|
||||
CONFIG_LATENCYTOP=y
|
||||
CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
|
||||
CONFIG_KEYS=y
|
||||
# CONFIG_CRYPTO_HW is not set
|
||||
CONFIG_FONTS=y
|
|
@ -23,6 +23,7 @@ struct parisc_device {
|
|||
/* generic info returned from pdc_pat_cell_module() */
|
||||
unsigned long mod_info; /* PAT specific - Misc Module info */
|
||||
unsigned long pmod_loc; /* physical Module location */
|
||||
unsigned long mod0;
|
||||
#endif
|
||||
u64 dma_mask; /* DMA mask for I/O */
|
||||
struct device dev;
|
||||
|
@ -61,4 +62,6 @@ parisc_get_drvdata(struct parisc_device *d)
|
|||
|
||||
extern struct bus_type parisc_bus_type;
|
||||
|
||||
int iosapic_serial_irq(struct parisc_device *dev);
|
||||
|
||||
#endif /*_ASM_PARISC_PARISC_DEVICE_H_*/
|
||||
|
|
|
@ -71,18 +71,27 @@ flush_cache_all_local(void)
|
|||
}
|
||||
EXPORT_SYMBOL(flush_cache_all_local);
|
||||
|
||||
/* Virtual address of pfn. */
|
||||
#define pfn_va(pfn) __va(PFN_PHYS(pfn))
|
||||
|
||||
void
|
||||
update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep)
|
||||
{
|
||||
struct page *page = pte_page(*ptep);
|
||||
unsigned long pfn = pte_pfn(*ptep);
|
||||
struct page *page;
|
||||
|
||||
if (pfn_valid(page_to_pfn(page)) && page_mapping(page) &&
|
||||
test_bit(PG_dcache_dirty, &page->flags)) {
|
||||
/* We don't have pte special. As a result, we can be called with
|
||||
an invalid pfn and we don't need to flush the kernel dcache page.
|
||||
This occurs with FireGL card in C8000. */
|
||||
if (!pfn_valid(pfn))
|
||||
return;
|
||||
|
||||
flush_kernel_dcache_page(page);
|
||||
page = pfn_to_page(pfn);
|
||||
if (page_mapping(page) && test_bit(PG_dcache_dirty, &page->flags)) {
|
||||
flush_kernel_dcache_page_addr(pfn_va(pfn));
|
||||
clear_bit(PG_dcache_dirty, &page->flags);
|
||||
} else if (parisc_requires_coherency())
|
||||
flush_kernel_dcache_page(page);
|
||||
flush_kernel_dcache_page_addr(pfn_va(pfn));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -495,44 +504,42 @@ static inline pte_t *get_ptep(pgd_t *pgd, unsigned long addr)
|
|||
|
||||
void flush_cache_mm(struct mm_struct *mm)
|
||||
{
|
||||
struct vm_area_struct *vma;
|
||||
pgd_t *pgd;
|
||||
|
||||
/* Flushing the whole cache on each cpu takes forever on
|
||||
rp3440, etc. So, avoid it if the mm isn't too big. */
|
||||
if (mm_total_size(mm) < parisc_cache_flush_threshold) {
|
||||
struct vm_area_struct *vma;
|
||||
if (mm_total_size(mm) >= parisc_cache_flush_threshold) {
|
||||
flush_cache_all();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mm->context == mfsp(3)) {
|
||||
for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
flush_user_dcache_range_asm(vma->vm_start,
|
||||
vma->vm_end);
|
||||
if (vma->vm_flags & VM_EXEC)
|
||||
flush_user_icache_range_asm(
|
||||
vma->vm_start, vma->vm_end);
|
||||
}
|
||||
} else {
|
||||
pgd_t *pgd = mm->pgd;
|
||||
|
||||
for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
unsigned long addr;
|
||||
|
||||
for (addr = vma->vm_start; addr < vma->vm_end;
|
||||
addr += PAGE_SIZE) {
|
||||
pte_t *ptep = get_ptep(pgd, addr);
|
||||
if (ptep != NULL) {
|
||||
pte_t pte = *ptep;
|
||||
__flush_cache_page(vma, addr,
|
||||
page_to_phys(pte_page(pte)));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mm->context == mfsp(3)) {
|
||||
for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
flush_user_dcache_range_asm(vma->vm_start, vma->vm_end);
|
||||
if ((vma->vm_flags & VM_EXEC) == 0)
|
||||
continue;
|
||||
flush_user_icache_range_asm(vma->vm_start, vma->vm_end);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
flush_cache_all();
|
||||
#else
|
||||
flush_cache_all_local();
|
||||
#endif
|
||||
pgd = mm->pgd;
|
||||
for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
unsigned long addr;
|
||||
|
||||
for (addr = vma->vm_start; addr < vma->vm_end;
|
||||
addr += PAGE_SIZE) {
|
||||
unsigned long pfn;
|
||||
pte_t *ptep = get_ptep(pgd, addr);
|
||||
if (!ptep)
|
||||
continue;
|
||||
pfn = pte_pfn(*ptep);
|
||||
if (!pfn_valid(pfn))
|
||||
continue;
|
||||
__flush_cache_page(vma, addr, PFN_PHYS(pfn));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -556,33 +563,32 @@ flush_user_icache_range(unsigned long start, unsigned long end)
|
|||
void flush_cache_range(struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long addr;
|
||||
pgd_t *pgd;
|
||||
|
||||
BUG_ON(!vma->vm_mm->context);
|
||||
|
||||
if ((end - start) < parisc_cache_flush_threshold) {
|
||||
if (vma->vm_mm->context == mfsp(3)) {
|
||||
flush_user_dcache_range_asm(start, end);
|
||||
if (vma->vm_flags & VM_EXEC)
|
||||
flush_user_icache_range_asm(start, end);
|
||||
} else {
|
||||
unsigned long addr;
|
||||
pgd_t *pgd = vma->vm_mm->pgd;
|
||||
|
||||
for (addr = start & PAGE_MASK; addr < end;
|
||||
addr += PAGE_SIZE) {
|
||||
pte_t *ptep = get_ptep(pgd, addr);
|
||||
if (ptep != NULL) {
|
||||
pte_t pte = *ptep;
|
||||
flush_cache_page(vma,
|
||||
addr, pte_pfn(pte));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#ifdef CONFIG_SMP
|
||||
if ((end - start) >= parisc_cache_flush_threshold) {
|
||||
flush_cache_all();
|
||||
#else
|
||||
flush_cache_all_local();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
if (vma->vm_mm->context == mfsp(3)) {
|
||||
flush_user_dcache_range_asm(start, end);
|
||||
if (vma->vm_flags & VM_EXEC)
|
||||
flush_user_icache_range_asm(start, end);
|
||||
return;
|
||||
}
|
||||
|
||||
pgd = vma->vm_mm->pgd;
|
||||
for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) {
|
||||
unsigned long pfn;
|
||||
pte_t *ptep = get_ptep(pgd, addr);
|
||||
if (!ptep)
|
||||
continue;
|
||||
pfn = pte_pfn(*ptep);
|
||||
if (pfn_valid(pfn))
|
||||
__flush_cache_page(vma, addr, PFN_PHYS(pfn));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -591,9 +597,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
|
|||
{
|
||||
BUG_ON(!vma->vm_mm->context);
|
||||
|
||||
flush_tlb_page(vma, vmaddr);
|
||||
__flush_cache_page(vma, vmaddr, page_to_phys(pfn_to_page(pfn)));
|
||||
|
||||
if (pfn_valid(pfn)) {
|
||||
flush_tlb_page(vma, vmaddr);
|
||||
__flush_cache_page(vma, vmaddr, PFN_PHYS(pfn));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PARISC_TMPALIAS
|
||||
|
|
|
@ -211,6 +211,7 @@ pat_query_module(ulong pcell_loc, ulong mod_index)
|
|||
/* REVISIT: who is the consumer of this? not sure yet... */
|
||||
dev->mod_info = pa_pdc_cell->mod_info; /* pass to PAT_GET_ENTITY() */
|
||||
dev->pmod_loc = pa_pdc_cell->mod_location;
|
||||
dev->mod0 = pa_pdc_cell->mod[0];
|
||||
|
||||
register_parisc_device(dev); /* advertise device */
|
||||
|
||||
|
|
|
@ -55,13 +55,6 @@
|
|||
* this. */
|
||||
#define A(__x) ((unsigned long)(__x))
|
||||
|
||||
/*
|
||||
* Atomically swap in the new signal mask, and wait for a signal.
|
||||
*/
|
||||
#ifdef CONFIG_64BIT
|
||||
#include "sys32.h"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Do a signal return - restore sigcontext.
|
||||
*/
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
#include <asm/uaccess.h>
|
||||
|
||||
#include "signal32.h"
|
||||
#include "sys32.h"
|
||||
|
||||
#define DEBUG_COMPAT_SIG 0
|
||||
#define DEBUG_COMPAT_SIG_LEVEL 2
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2002 Richard Hirst <rhirst at parisc-linux.org>
|
||||
* Copyright (C) 2003 James Bottomley <jejb at parisc-linux.org>
|
||||
* Copyright (C) 2003 Randolph Chung <tausq with parisc-linux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _PARISC64_KERNEL_SYS32_H
|
||||
#define _PARISC64_KERNEL_SYS32_H
|
||||
|
||||
#include <linux/compat.h>
|
||||
|
||||
/* Call a kernel syscall which will use kernel space instead of user
|
||||
* space for its copy_to/from_user.
|
||||
*/
|
||||
#define KERNEL_SYSCALL(ret, syscall, args...) \
|
||||
{ \
|
||||
mm_segment_t old_fs = get_fs(); \
|
||||
set_fs(KERNEL_DS); \
|
||||
ret = syscall(args); \
|
||||
set_fs (old_fs); \
|
||||
}
|
||||
|
||||
#endif
|
|
@ -42,8 +42,6 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/mmu_context.h>
|
||||
|
||||
#include "sys32.h"
|
||||
|
||||
#undef DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
|
@ -129,7 +129,8 @@ parisc_agp_insert_memory(struct agp_memory *mem, off_t pg_start, int type)
|
|||
off_t j, io_pg_start;
|
||||
int io_pg_count;
|
||||
|
||||
if (type != 0 || mem->type != 0) {
|
||||
if (type != mem->type ||
|
||||
agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -175,7 +176,8 @@ parisc_agp_remove_memory(struct agp_memory *mem, off_t pg_start, int type)
|
|||
struct _parisc_agp_info *info = &parisc_agp_info;
|
||||
int i, io_pg_start, io_pg_count;
|
||||
|
||||
if (type != 0 || mem->type != 0) {
|
||||
if (type != mem->type ||
|
||||
agp_bridge->driver->agp_type_to_mask_type(agp_bridge, type)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -811,18 +811,28 @@ int iosapic_fixup_irq(void *isi_obj, struct pci_dev *pcidev)
|
|||
return pcidev->irq;
|
||||
}
|
||||
|
||||
static struct iosapic_info *first_isi = NULL;
|
||||
static struct iosapic_info *iosapic_list;
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
int iosapic_serial_irq(int num)
|
||||
int iosapic_serial_irq(struct parisc_device *dev)
|
||||
{
|
||||
struct iosapic_info *isi = first_isi;
|
||||
struct irt_entry *irte = NULL; /* only used if PAT PDC */
|
||||
struct iosapic_info *isi;
|
||||
struct irt_entry *irte;
|
||||
struct vector_info *vi;
|
||||
int isi_line; /* line used by device */
|
||||
int cnt;
|
||||
int intin;
|
||||
|
||||
intin = (dev->mod_info >> 24) & 15;
|
||||
|
||||
/* lookup IRT entry for isi/slot/pin set */
|
||||
irte = &irt_cell[num];
|
||||
for (cnt = 0; cnt < irt_num_entry; cnt++) {
|
||||
irte = &irt_cell[cnt];
|
||||
if (COMPARE_IRTE_ADDR(irte, dev->mod0) &&
|
||||
irte->dest_iosapic_intin == intin)
|
||||
break;
|
||||
}
|
||||
if (cnt >= irt_num_entry)
|
||||
return 0; /* no irq found, force polling */
|
||||
|
||||
DBG_IRT("iosapic_serial_irq(): irte %p %x %x %x %x %x %x %x %x\n",
|
||||
irte,
|
||||
|
@ -834,11 +844,17 @@ int iosapic_serial_irq(int num)
|
|||
irte->src_seg_id,
|
||||
irte->dest_iosapic_intin,
|
||||
(u32) irte->dest_iosapic_addr);
|
||||
isi_line = irte->dest_iosapic_intin;
|
||||
|
||||
/* search for iosapic */
|
||||
for (isi = iosapic_list; isi; isi = isi->isi_next)
|
||||
if (isi->isi_hpa == dev->mod0)
|
||||
break;
|
||||
if (!isi)
|
||||
return 0; /* no iosapic found, force polling */
|
||||
|
||||
/* get vector info for this input line */
|
||||
vi = isi->isi_vector + isi_line;
|
||||
DBG_IRT("iosapic_serial_irq: line %d vi 0x%p\n", isi_line, vi);
|
||||
vi = isi->isi_vector + intin;
|
||||
DBG_IRT("iosapic_serial_irq: line %d vi 0x%p\n", iosapic_intin, vi);
|
||||
|
||||
/* If this IRQ line has already been setup, skip it */
|
||||
if (vi->irte)
|
||||
|
@ -941,8 +957,8 @@ void *iosapic_register(unsigned long hpa)
|
|||
vip->irqline = (unsigned char) cnt;
|
||||
vip->iosapic = isi;
|
||||
}
|
||||
if (!first_isi)
|
||||
first_isi = isi;
|
||||
isi->isi_next = iosapic_list;
|
||||
iosapic_list = isi;
|
||||
return isi;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,9 +31,8 @@ static int __init serial_init_chip(struct parisc_device *dev)
|
|||
int err;
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
extern int iosapic_serial_irq(int cellnum);
|
||||
if (!dev->irq && (dev->id.sversion == 0xad))
|
||||
dev->irq = iosapic_serial_irq(dev->mod_index-1);
|
||||
dev->irq = iosapic_serial_irq(dev);
|
||||
#endif
|
||||
|
||||
if (!dev->irq) {
|
||||
|
|
Loading…
Reference in New Issue