mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge commit 'v2.6.35' into kbuild/kbuild
Conflicts: arch/powerpc/Makefile
This commit is contained in:
commit
772320e845
15241 changed files with 1249805 additions and 691683 deletions
|
|
@ -36,7 +36,7 @@
|
|||
#define smp_mb__after_atomic_inc() barrier()
|
||||
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
#define atomic_read(v) ((v)->counter)
|
||||
#define atomic_read(v) (*(volatile int *)&(v)->counter)
|
||||
#define atomic_set(v, i) (((v)->counter) = (i))
|
||||
|
||||
#ifndef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
#include <asm/scatterlist.h>
|
||||
#include <asm/io.h>
|
||||
|
||||
/*
|
||||
* See Documentation/DMA-API.txt for the description of how the
|
||||
* following DMA API should work.
|
||||
*/
|
||||
|
||||
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
||||
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
||||
|
||||
|
|
@ -16,24 +21,9 @@ extern unsigned long __nongprelbss dma_coherent_mem_end;
|
|||
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t gfp);
|
||||
void dma_free_coherent(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle);
|
||||
|
||||
/*
|
||||
* Map a single buffer of the indicated size for DMA in streaming mode.
|
||||
* The 32-bit bus address to use is returned.
|
||||
*
|
||||
* Once the device is given the dma address, the device owns this memory
|
||||
* until either pci_unmap_single or pci_dma_sync_single is performed.
|
||||
*/
|
||||
extern dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||
enum dma_data_direction direction);
|
||||
|
||||
/*
|
||||
* Unmap a single streaming mode DMA translation. The dma_addr and size
|
||||
* must match what was provided for in a previous pci_map_single call. All
|
||||
* other usages are undefined.
|
||||
*
|
||||
* After this call, reads by the cpu to the buffer are guarenteed to see
|
||||
* whatever the device wrote there.
|
||||
*/
|
||||
static inline
|
||||
void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
|
|
@ -41,30 +31,9 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
|||
BUG_ON(direction == DMA_NONE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Map a set of buffers described by scatterlist in streaming
|
||||
* mode for DMA. This is the scather-gather version of the
|
||||
* above pci_map_single interface. Here the scatter gather list
|
||||
* elements are each tagged with the appropriate dma address
|
||||
* and length. They are obtained via sg_dma_{address,length}(SG).
|
||||
*
|
||||
* NOTE: An implementation may be able to use a smaller number of
|
||||
* DMA address/length pairs than there are SG table elements.
|
||||
* (for example via virtual mapping capabilities)
|
||||
* The routine returns the number of addr/length pairs actually
|
||||
* used, at most nents.
|
||||
*
|
||||
* Device ownership issues as mentioned above for pci_map_single are
|
||||
* the same here.
|
||||
*/
|
||||
extern int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction direction);
|
||||
|
||||
/*
|
||||
* Unmap a set of streaming mode DMA translations.
|
||||
* Again, cpu read rules concerning calls here are the same as for
|
||||
* pci_unmap_single() above.
|
||||
*/
|
||||
static inline
|
||||
void dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
|
||||
enum dma_data_direction direction)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
#ifndef __ASM_GDB_STUB_H
|
||||
#define __ASM_GDB_STUB_H
|
||||
|
||||
#undef GDBSTUB_DEBUG_IO
|
||||
#undef GDBSTUB_DEBUG_PROTOCOL
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
|
|
@ -108,6 +109,12 @@ extern void gdbstub_printk(const char *fmt, ...);
|
|||
extern void debug_to_serial(const char *p, int n);
|
||||
extern void console_set_baud(unsigned baud);
|
||||
|
||||
#ifdef GDBSTUB_DEBUG_IO
|
||||
#define gdbstub_io(FMT,...) gdbstub_printk(FMT, ##__VA_ARGS__)
|
||||
#else
|
||||
#define gdbstub_io(FMT,...) ({ 0; })
|
||||
#endif
|
||||
|
||||
#ifdef GDBSTUB_DEBUG_PROTOCOL
|
||||
#define gdbstub_proto(FMT,...) gdbstub_printk(FMT,##__VA_ARGS__)
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@
|
|||
* the slab must be aligned such that load- and store-double instructions don't
|
||||
* fault if used
|
||||
*/
|
||||
#define ARCH_KMALLOC_MINALIGN 8
|
||||
#define ARCH_SLAB_MINALIGN 8
|
||||
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
|
||||
#define ARCH_SLAB_MINALIGN L1_CACHE_BYTES
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -43,14 +43,6 @@ extern void pci_free_consistent(struct pci_dev *hwdev, size_t size,
|
|||
/* Return the index of the PCI controller for device PDEV. */
|
||||
#define pci_controller_num(PDEV) (0)
|
||||
|
||||
/* pci_unmap_{page,single} is a nop so... */
|
||||
#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)
|
||||
#define DECLARE_PCI_UNMAP_LEN(LEN_NAME)
|
||||
#define pci_unmap_addr(PTR, ADDR_NAME) (0)
|
||||
#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0)
|
||||
#define pci_unmap_len(PTR, LEN_NAME) (0)
|
||||
#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0)
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
static inline void pci_dma_burst_advice(struct pci_dev *pdev,
|
||||
enum pci_dma_burst_strategy *strat,
|
||||
|
|
@ -68,41 +60,4 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,
|
|||
#define PCIBIOS_MIN_IO 0x100
|
||||
#define PCIBIOS_MIN_MEM 0x00010000
|
||||
|
||||
/* Make physical memory consistent for a single
|
||||
* streaming mode DMA translation after a transfer.
|
||||
*
|
||||
* If you perform a pci_map_single() but wish to interrogate the
|
||||
* buffer using the cpu, yet do not wish to teardown the PCI dma
|
||||
* mapping, you must call this function before doing so. At the
|
||||
* next point you give the PCI dma address back to the card, the
|
||||
* device again owns the buffer.
|
||||
*/
|
||||
static inline void pci_dma_sync_single(struct pci_dev *hwdev,
|
||||
dma_addr_t dma_handle,
|
||||
size_t size, int direction)
|
||||
{
|
||||
BUG_ON(direction == PCI_DMA_NONE);
|
||||
|
||||
frv_cache_wback_inv((unsigned long)bus_to_virt(dma_handle),
|
||||
(unsigned long)bus_to_virt(dma_handle) + size);
|
||||
}
|
||||
|
||||
/* Make physical memory consistent for a set of streaming
|
||||
* mode DMA translations after a transfer.
|
||||
*
|
||||
* The same as pci_dma_sync_single but for a scatter-gather list,
|
||||
* same rules and usage.
|
||||
*/
|
||||
static inline void pci_dma_sync_sg(struct pci_dev *hwdev,
|
||||
struct scatterlist *sg,
|
||||
int nelems, int direction)
|
||||
{
|
||||
int i;
|
||||
BUG_ON(direction == PCI_DMA_NONE);
|
||||
|
||||
for (i = 0; i < nelems; i++)
|
||||
frv_cache_wback_inv(sg_dma_address(&sg[i]),
|
||||
sg_dma_address(&sg[i])+sg_dma_len(&sg[i]));
|
||||
}
|
||||
|
||||
#endif /* _ASM_FRV_PCI_H */
|
||||
|
|
|
|||
|
|
@ -505,7 +505,7 @@ static inline int pte_file(pte_t pte)
|
|||
/*
|
||||
* preload information about a newly instantiated PTE into the SCR0/SCR1 PGE cache
|
||||
*/
|
||||
static inline void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte)
|
||||
static inline void update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t *ptep)
|
||||
{
|
||||
struct mm_struct *mm;
|
||||
unsigned long ampr;
|
||||
|
|
|
|||
|
|
@ -84,8 +84,6 @@ extern void show_regs(struct pt_regs *);
|
|||
#define task_pt_regs(task) ((task)->thread.frame0)
|
||||
|
||||
#define arch_has_single_step() (1)
|
||||
extern void user_enable_single_step(struct task_struct *);
|
||||
extern void user_disable_single_step(struct task_struct *);
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -1,45 +1,7 @@
|
|||
#ifndef _ASM_SCATTERLIST_H
|
||||
#define _ASM_SCATTERLIST_H
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
/*
|
||||
* Drivers must set either ->address or (preferred) page and ->offset
|
||||
* to indicate where data must be transferred to/from.
|
||||
*
|
||||
* Using page is recommended since it handles highmem data as well as
|
||||
* low mem. ->address is restricted to data which has a virtual mapping, and
|
||||
* it will go away in the future. Updating to page can be automated very
|
||||
* easily -- something like
|
||||
*
|
||||
* sg->address = some_ptr;
|
||||
*
|
||||
* can be rewritten as
|
||||
*
|
||||
* sg_set_buf(sg, some_ptr, length);
|
||||
*
|
||||
* and that's it. There's no excuse for not highmem enabling YOUR driver. /jens
|
||||
*/
|
||||
struct scatterlist {
|
||||
#ifdef CONFIG_DEBUG_SG
|
||||
unsigned long sg_magic;
|
||||
#endif
|
||||
unsigned long page_link;
|
||||
unsigned int offset; /* for highmem, page offset */
|
||||
|
||||
dma_addr_t dma_address;
|
||||
unsigned int length;
|
||||
};
|
||||
|
||||
/*
|
||||
* These macros should be used after a pci_map_sg call has been done
|
||||
* to get bus addresses of each of the SG entries and their lengths.
|
||||
* You should only work with the number of sg entries pci_map_sg
|
||||
* returns, or alternatively stop on the first sg_dma_len(sg) which
|
||||
* is 0.
|
||||
*/
|
||||
#define sg_dma_address(sg) ((sg)->dma_address)
|
||||
#define sg_dma_len(sg) ((sg)->length)
|
||||
#include <asm-generic/scatterlist.h>
|
||||
|
||||
#define ISA_DMA_THRESHOLD (0xffffffffUL)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ typedef struct {
|
|||
|
||||
#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
|
||||
|
||||
#define KERNEL_DS MAKE_MM_SEG(0xdfffffffUL)
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
#define USER_DS MAKE_MM_SEG(TASK_SIZE - 1)
|
||||
#define KERNEL_DS MAKE_MM_SEG(0xdfffffffUL)
|
||||
#else
|
||||
#define USER_DS KERNEL_DS
|
||||
#define USER_DS MAKE_MM_SEG(memory_end)
|
||||
#define KERNEL_DS MAKE_MM_SEG(0xe0000000UL)
|
||||
#endif
|
||||
|
||||
#define get_ds() (KERNEL_DS)
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ register struct thread_info *__current_thread_info asm("gr15");
|
|||
#define TIF_SINGLESTEP 4 /* restore singlestep on return to user mode */
|
||||
#define TIF_RESTORE_SIGMASK 5 /* restore signal mask in do_signal() */
|
||||
#define TIF_POLLING_NRFLAG 16 /* true if poll_idle() is polling TIF_NEED_RESCHED */
|
||||
#define TIF_MEMDIE 17 /* OOM killer killed process */
|
||||
#define TIF_MEMDIE 17 /* is terminating due to OOM killer */
|
||||
#define TIF_FREEZE 18 /* freezing for suspend */
|
||||
|
||||
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@
|
|||
#define VERIFY_READ 0
|
||||
#define VERIFY_WRITE 1
|
||||
|
||||
#define __addr_ok(addr) ((unsigned long)(addr) < get_addr_limit())
|
||||
|
||||
/*
|
||||
* check that a range of addresses falls within the current address limit
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -354,6 +354,7 @@
|
|||
#define __ARCH_WANT_STAT64
|
||||
#define __ARCH_WANT_SYS_ALARM
|
||||
/* #define __ARCH_WANT_SYS_GETHOSTNAME */
|
||||
#define __ARCH_WANT_SYS_IPC
|
||||
#define __ARCH_WANT_SYS_PAUSE
|
||||
/* #define __ARCH_WANT_SYS_SGETMASK */
|
||||
/* #define __ARCH_WANT_SYS_SIGNAL */
|
||||
|
|
|
|||
|
|
@ -171,11 +171,11 @@ int gdbstub_rx_char(unsigned char *_ch, int nonblock)
|
|||
return -EINTR;
|
||||
}
|
||||
else if (st & (UART_LSR_FE|UART_LSR_OE|UART_LSR_PE)) {
|
||||
gdbstub_proto("### GDB Rx Error (st=%02x) ###\n",st);
|
||||
gdbstub_io("### GDB Rx Error (st=%02x) ###\n",st);
|
||||
return -EIO;
|
||||
}
|
||||
else {
|
||||
gdbstub_proto("### GDB Rx %02x (st=%02x) ###\n",ch,st);
|
||||
gdbstub_io("### GDB Rx %02x (st=%02x) ###\n",ch,st);
|
||||
*_ch = ch & 0x7f;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1344,6 +1344,44 @@ void gdbstub_get_mmu_state(void)
|
|||
|
||||
} /* end gdbstub_get_mmu_state() */
|
||||
|
||||
/*
|
||||
* handle general query commands of the form 'qXXXXX'
|
||||
*/
|
||||
static void gdbstub_handle_query(void)
|
||||
{
|
||||
if (strcmp(input_buffer, "qAttached") == 0) {
|
||||
/* return current thread ID */
|
||||
sprintf(output_buffer, "1");
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(input_buffer, "qC") == 0) {
|
||||
/* return current thread ID */
|
||||
sprintf(output_buffer, "QC 0");
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(input_buffer, "qOffsets") == 0) {
|
||||
/* return relocation offset of text and data segments */
|
||||
sprintf(output_buffer, "Text=0;Data=0;Bss=0");
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(input_buffer, "qSymbol::") == 0) {
|
||||
sprintf(output_buffer, "OK");
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcmp(input_buffer, "qSupported") == 0) {
|
||||
/* query of supported features */
|
||||
sprintf(output_buffer, "PacketSize=%u;ReverseContinue-;ReverseStep-",
|
||||
sizeof(input_buffer));
|
||||
return;
|
||||
}
|
||||
|
||||
gdbstub_strcpy(output_buffer,"E01");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* handle event interception and GDB remote protocol processing
|
||||
|
|
@ -1751,6 +1789,12 @@ void gdbstub(int sigval)
|
|||
flush_cache = 1;
|
||||
break;
|
||||
|
||||
/* pNN: Read value of reg N and return it */
|
||||
case 'p':
|
||||
/* return no value, indicating that we don't support
|
||||
* this command and that gdb should use 'g' instead */
|
||||
break;
|
||||
|
||||
/* PNN,=RRRRRRRR: Write value R to reg N return OK */
|
||||
case 'P':
|
||||
ptr = &input_buffer[1];
|
||||
|
|
@ -1840,6 +1884,10 @@ void gdbstub(int sigval)
|
|||
case 'k' :
|
||||
goto done; /* just continue */
|
||||
|
||||
/* detach */
|
||||
case 'D':
|
||||
gdbstub_strcpy(output_buffer, "OK");
|
||||
break;
|
||||
|
||||
/* reset the whole machine (FIXME: system dependent) */
|
||||
case 'r':
|
||||
|
|
@ -1852,6 +1900,14 @@ void gdbstub(int sigval)
|
|||
__debug_status.dcr |= DCR_SE;
|
||||
goto done;
|
||||
|
||||
/* extended command */
|
||||
case 'v':
|
||||
if (strcmp(input_buffer, "vCont?") == 0) {
|
||||
output_buffer[0] = 0;
|
||||
break;
|
||||
}
|
||||
goto unsupported_cmd;
|
||||
|
||||
/* set baud rate (bBB) */
|
||||
case 'b':
|
||||
ptr = &input_buffer[1];
|
||||
|
|
@ -1923,8 +1979,19 @@ void gdbstub(int sigval)
|
|||
gdbstub_strcpy(output_buffer,"OK");
|
||||
break;
|
||||
|
||||
/* Thread-setting packet */
|
||||
case 'H':
|
||||
gdbstub_strcpy(output_buffer, "OK");
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
gdbstub_handle_query();
|
||||
break;
|
||||
|
||||
default:
|
||||
unsupported_cmd:
|
||||
gdbstub_proto("### GDB Unsupported Cmd '%s'\n",input_buffer);
|
||||
gdbstub_strcpy(output_buffer,"E01");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <linux/ioport.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/random.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
|
|
|
|||
|
|
@ -344,26 +344,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
0, sizeof(child->thread.user->f),
|
||||
(const void __user *)data);
|
||||
|
||||
case PTRACE_GETFDPIC:
|
||||
tmp = 0;
|
||||
switch (addr) {
|
||||
case PTRACE_GETFDPIC_EXEC:
|
||||
tmp = child->mm->context.exec_fdpic_loadmap;
|
||||
break;
|
||||
case PTRACE_GETFDPIC_INTERP:
|
||||
tmp = child->mm->context.interp_fdpic_loadmap;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
if (put_user(tmp, (unsigned long *) data)) {
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
ret = ptrace_request(child, request, addr, data);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -42,92 +42,3 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
|
|||
return sys_mmap_pgoff(addr, len, prot, flags, fd,
|
||||
pgoff >> (PAGE_SHIFT - 12));
|
||||
}
|
||||
|
||||
/*
|
||||
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
|
||||
*
|
||||
* This is really horribly ugly.
|
||||
*/
|
||||
asmlinkage long sys_ipc(unsigned long call,
|
||||
unsigned long first,
|
||||
unsigned long second,
|
||||
unsigned long third,
|
||||
void __user *ptr,
|
||||
unsigned long fifth)
|
||||
{
|
||||
int version, ret;
|
||||
|
||||
version = call >> 16; /* hack for backward compatibility */
|
||||
call &= 0xffff;
|
||||
|
||||
switch (call) {
|
||||
case SEMOP:
|
||||
return sys_semtimedop(first, (struct sembuf __user *)ptr, second, NULL);
|
||||
case SEMTIMEDOP:
|
||||
return sys_semtimedop(first, (struct sembuf __user *)ptr, second,
|
||||
(const struct timespec __user *)fifth);
|
||||
|
||||
case SEMGET:
|
||||
return sys_semget (first, second, third);
|
||||
case SEMCTL: {
|
||||
union semun fourth;
|
||||
if (!ptr)
|
||||
return -EINVAL;
|
||||
if (get_user(fourth.__pad, (void * __user *) ptr))
|
||||
return -EFAULT;
|
||||
return sys_semctl (first, second, third, fourth);
|
||||
}
|
||||
|
||||
case MSGSND:
|
||||
return sys_msgsnd (first, (struct msgbuf __user *) ptr,
|
||||
second, third);
|
||||
case MSGRCV:
|
||||
switch (version) {
|
||||
case 0: {
|
||||
struct ipc_kludge tmp;
|
||||
if (!ptr)
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(&tmp,
|
||||
(struct ipc_kludge __user *) ptr,
|
||||
sizeof (tmp)))
|
||||
return -EFAULT;
|
||||
return sys_msgrcv (first, tmp.msgp, second,
|
||||
tmp.msgtyp, third);
|
||||
}
|
||||
default:
|
||||
return sys_msgrcv (first,
|
||||
(struct msgbuf __user *) ptr,
|
||||
second, fifth, third);
|
||||
}
|
||||
case MSGGET:
|
||||
return sys_msgget ((key_t) first, second);
|
||||
case MSGCTL:
|
||||
return sys_msgctl (first, second, (struct msqid_ds __user *) ptr);
|
||||
|
||||
case SHMAT:
|
||||
switch (version) {
|
||||
default: {
|
||||
ulong raddr;
|
||||
ret = do_shmat (first, (char __user *) ptr, second, &raddr);
|
||||
if (ret)
|
||||
return ret;
|
||||
return put_user (raddr, (ulong __user *) third);
|
||||
}
|
||||
case 1: /* iBCS2 emulator entry point */
|
||||
if (!segment_eq(get_fs(), get_ds()))
|
||||
return -EINVAL;
|
||||
/* The "(ulong *) third" is valid _only_ because of the kernel segment thing */
|
||||
return do_shmat (first, (char __user *) ptr, second, (ulong *) third);
|
||||
}
|
||||
case SHMDT:
|
||||
return sys_shmdt ((char __user *)ptr);
|
||||
case SHMGET:
|
||||
return sys_shmget (first, second, third);
|
||||
case SHMCTL:
|
||||
return sys_shmctl (first, second,
|
||||
(struct shmid_ds __user *) ptr);
|
||||
default:
|
||||
return -ENOSYS;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/init.h>
|
||||
|
|
@ -47,8 +46,9 @@ static void frv_change_dcache_mode(unsigned long newmode)
|
|||
/*
|
||||
* handle requests to dynamically switch the write caching mode delivered by /proc
|
||||
*/
|
||||
static int procctl_frv_cachemode(ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
static int procctl_frv_cachemode(ctl_table *table, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
unsigned long hsr0;
|
||||
char buff[8];
|
||||
|
|
@ -85,7 +85,7 @@ static int procctl_frv_cachemode(ctl_table *table, int write, struct file *filp,
|
|||
}
|
||||
|
||||
/* read the state */
|
||||
if (filp->f_pos > 0) {
|
||||
if (*ppos > 0) {
|
||||
*lenp = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -111,7 +111,7 @@ static int procctl_frv_cachemode(ctl_table *table, int write, struct file *filp,
|
|||
return -EFAULT;
|
||||
|
||||
*lenp = len;
|
||||
filp->f_pos = len;
|
||||
*ppos = len;
|
||||
return 0;
|
||||
|
||||
} /* end procctl_frv_cachemode() */
|
||||
|
|
@ -121,8 +121,9 @@ static int procctl_frv_cachemode(ctl_table *table, int write, struct file *filp,
|
|||
* permit the mm_struct the nominated process is using have its MMU context ID pinned
|
||||
*/
|
||||
#ifdef CONFIG_MMU
|
||||
static int procctl_frv_pin_cxnr(ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos)
|
||||
static int procctl_frv_pin_cxnr(ctl_table *table, int write,
|
||||
void __user *buffer, size_t *lenp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
pid_t pid;
|
||||
char buff[16], *p;
|
||||
|
|
@ -151,7 +152,7 @@ static int procctl_frv_pin_cxnr(ctl_table *table, int write, struct file *filp,
|
|||
}
|
||||
|
||||
/* read the currently pinned CXN */
|
||||
if (filp->f_pos > 0) {
|
||||
if (*ppos > 0) {
|
||||
*lenp = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -164,7 +165,7 @@ static int procctl_frv_pin_cxnr(ctl_table *table, int write, struct file *filp,
|
|||
return -EFAULT;
|
||||
|
||||
*lenp = len;
|
||||
filp->f_pos = len;
|
||||
*ppos = len;
|
||||
return 0;
|
||||
|
||||
} /* end procctl_frv_pin_cxnr() */
|
||||
|
|
|
|||
|
|
@ -48,20 +48,12 @@ static struct irqaction timer_irq = {
|
|||
.name = "timer",
|
||||
};
|
||||
|
||||
static inline int set_rtc_mmss(unsigned long nowtime)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* timer_interrupt() needs to keep up the real-time clock,
|
||||
* as well as call the "do_timer()" routine every clocktick
|
||||
*/
|
||||
static irqreturn_t timer_interrupt(int irq, void *dummy)
|
||||
{
|
||||
/* last time the cmos clock got updated */
|
||||
static long last_rtc_update = 0;
|
||||
|
||||
profile_tick(CPU_PROFILING);
|
||||
/*
|
||||
* Here we are in the timer irq handler. We just have irqs locally
|
||||
|
|
@ -74,22 +66,6 @@ static irqreturn_t timer_interrupt(int irq, void *dummy)
|
|||
|
||||
do_timer(1);
|
||||
|
||||
/*
|
||||
* If we have an externally synchronized Linux clock, then update
|
||||
* CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
|
||||
* called as close as possible to 500 ms before the new second starts.
|
||||
*/
|
||||
if (ntp_synced() &&
|
||||
xtime.tv_sec > last_rtc_update + 660 &&
|
||||
(xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
|
||||
(xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2
|
||||
) {
|
||||
if (set_rtc_mmss(xtime.tv_sec) == 0)
|
||||
last_rtc_update = xtime.tv_sec;
|
||||
else
|
||||
last_rtc_update = xtime.tv_sec - 600; /* do it again in 60 s */
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static unsigned short n;
|
||||
n++;
|
||||
|
|
@ -119,7 +95,8 @@ void time_divisor_init(void)
|
|||
__set_TCSR_DATA(0, base >> 8);
|
||||
}
|
||||
|
||||
void time_init(void)
|
||||
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
{
|
||||
unsigned int year, mon, day, hour, min, sec;
|
||||
|
||||
|
|
@ -135,9 +112,12 @@ void time_init(void)
|
|||
|
||||
if ((year += 1900) < 1970)
|
||||
year += 100;
|
||||
xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
|
||||
xtime.tv_nsec = 0;
|
||||
ts->tv_sec = mktime(year, mon, day, hour, min, sec);
|
||||
ts->tv_nsec = 0;
|
||||
}
|
||||
|
||||
void time_init(void)
|
||||
{
|
||||
/* install scheduling interrupt handler */
|
||||
setup_irq(IRQ_CPU_TIMER0, &timer_irq);
|
||||
|
||||
|
|
|
|||
|
|
@ -106,13 +106,6 @@ void dma_free_coherent(struct device *hwdev, size_t size, void *vaddr, dma_addr_
|
|||
|
||||
EXPORT_SYMBOL(dma_free_coherent);
|
||||
|
||||
/*
|
||||
* Map a single buffer of the indicated size for DMA in streaming mode.
|
||||
* The 32-bit bus address to use is returned.
|
||||
*
|
||||
* Once the device is given the dma address, the device owns this memory
|
||||
* until either dma_unmap_single or pci_dma_sync_single is performed.
|
||||
*/
|
||||
dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
|
@ -125,22 +118,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
|||
|
||||
EXPORT_SYMBOL(dma_map_single);
|
||||
|
||||
/*
|
||||
* Map a set of buffers described by scatterlist in streaming
|
||||
* mode for DMA. This is the scather-gather version of the
|
||||
* above dma_map_single interface. Here the scatter gather list
|
||||
* elements are each tagged with the appropriate dma address
|
||||
* and length. They are obtained via sg_dma_{address,length}(SG).
|
||||
*
|
||||
* NOTE: An implementation may be able to use a smaller number of
|
||||
* DMA address/length pairs than there are SG table elements.
|
||||
* (for example via virtual mapping capabilities)
|
||||
* The routine returns the number of addr/length pairs actually
|
||||
* used, at most nents.
|
||||
*
|
||||
* Device ownership issues as mentioned above for dma_map_single are
|
||||
* the same here.
|
||||
*/
|
||||
int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
|
@ -157,13 +134,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
|||
|
||||
EXPORT_SYMBOL(dma_map_sg);
|
||||
|
||||
/*
|
||||
* Map a single page of the indicated size for DMA in streaming mode.
|
||||
* The 32-bit bus address to use is returned.
|
||||
*
|
||||
* Device ownership issues as mentioned above for dma_map_single are
|
||||
* the same here.
|
||||
*/
|
||||
dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/pci.h>
|
||||
|
|
@ -38,13 +37,6 @@ void dma_free_coherent(struct device *hwdev, size_t size, void *vaddr, dma_addr_
|
|||
|
||||
EXPORT_SYMBOL(dma_free_coherent);
|
||||
|
||||
/*
|
||||
* Map a single buffer of the indicated size for DMA in streaming mode.
|
||||
* The 32-bit bus address to use is returned.
|
||||
*
|
||||
* Once the device is given the dma address, the device owns this memory
|
||||
* until either pci_unmap_single or pci_dma_sync_single is performed.
|
||||
*/
|
||||
dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
|
@ -57,22 +49,6 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
|||
|
||||
EXPORT_SYMBOL(dma_map_single);
|
||||
|
||||
/*
|
||||
* Map a set of buffers described by scatterlist in streaming
|
||||
* mode for DMA. This is the scather-gather version of the
|
||||
* above dma_map_single interface. Here the scatter gather list
|
||||
* elements are each tagged with the appropriate dma address
|
||||
* and length. They are obtained via sg_dma_{address,length}(SG).
|
||||
*
|
||||
* NOTE: An implementation may be able to use a smaller number of
|
||||
* DMA address/length pairs than there are SG table elements.
|
||||
* (for example via virtual mapping capabilities)
|
||||
* The routine returns the number of addr/length pairs actually
|
||||
* used, at most nents.
|
||||
*
|
||||
* Device ownership issues as mentioned above for dma_map_single are
|
||||
* the same here.
|
||||
*/
|
||||
int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
||||
enum dma_data_direction direction)
|
||||
{
|
||||
|
|
@ -103,13 +79,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
|||
|
||||
EXPORT_SYMBOL(dma_map_sg);
|
||||
|
||||
/*
|
||||
* Map a single page of the indicated size for DMA in streaming mode.
|
||||
* The 32-bit bus address to use is returned.
|
||||
*
|
||||
* Device ownership issues as mentioned above for dma_map_single are
|
||||
* the same here.
|
||||
*/
|
||||
dma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset,
|
||||
size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -32,18 +32,16 @@
|
|||
* but we want to try to avoid allocating at 0x2900-0x2bff
|
||||
* which might have be mirrored at 0x0100-0x03ff..
|
||||
*/
|
||||
void
|
||||
pcibios_align_resource(void *data, struct resource *res,
|
||||
resource_size_t
|
||||
pcibios_align_resource(void *data, const struct resource *res,
|
||||
resource_size_t size, resource_size_t align)
|
||||
{
|
||||
if (res->flags & IORESOURCE_IO) {
|
||||
resource_size_t start = res->start;
|
||||
resource_size_t start = res->start;
|
||||
|
||||
if (start & 0x300) {
|
||||
start = (start + 0x3ff) & ~0x3ff;
|
||||
res->start = start;
|
||||
}
|
||||
}
|
||||
if ((res->flags & IORESOURCE_IO) && (start & 0x300))
|
||||
start = (start + 0x3ff) & ~0x3ff;
|
||||
|
||||
return start;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -96,8 +94,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
|
|||
r = &dev->resource[idx];
|
||||
if (!r->start)
|
||||
continue;
|
||||
if (pci_claim_resource(dev, idx) < 0)
|
||||
printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, pci_name(dev));
|
||||
pci_claim_resource(dev, idx);
|
||||
}
|
||||
}
|
||||
pcibios_allocate_bus_resources(&bus->children);
|
||||
|
|
@ -127,7 +124,6 @@ static void __init pcibios_allocate_resources(int pass)
|
|||
DBG("PCI: Resource %08lx-%08lx (f=%lx, d=%d, p=%d)\n",
|
||||
r->start, r->end, r->flags, disabled, pass);
|
||||
if (pci_claim_resource(dev, idx) < 0) {
|
||||
printk(KERN_ERR "PCI: Cannot allocate resource region %d of device %s\n", idx, pci_name(dev));
|
||||
/* We'll assign a new address later */
|
||||
r->end -= r->start;
|
||||
r->start = 0;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <asm/segment.h>
|
||||
#include <asm/io.h>
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/gfp.h>
|
||||
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/io.h>
|
||||
|
|
|
|||
|
|
@ -257,10 +257,10 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
|
|||
*/
|
||||
out_of_memory:
|
||||
up_read(&mm->mmap_sem);
|
||||
printk("VM: killing process %s\n", current->comm);
|
||||
if (user_mode(__frame))
|
||||
do_group_exit(SIGKILL);
|
||||
goto no_context;
|
||||
if (!user_mode(__frame))
|
||||
goto no_context;
|
||||
pagefault_out_of_memory();
|
||||
return;
|
||||
|
||||
do_sigbus:
|
||||
up_read(&mm->mmap_sem);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/signal.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/swap.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/kernel.h>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/quicklist.h>
|
||||
|
|
|
|||
Loading…
Reference in a new issue