Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.25

* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.25:
sh: Fix up uImage compression type
remove include/asm-sh/floppy.h
sh: Fix TIF_USEDFPU clearing under FPU emulation.
sh: Fix occasional FPU register corruption under preempt.

+32 -287
-3
arch/sh/Kconfig
··· 72 72 config SYS_SUPPORTS_PCI 73 73 bool 74 74 75 - config ARCH_MAY_HAVE_PC_FDC 76 - bool 77 - 78 75 config STACKTRACE_SUPPORT 79 76 def_bool y 80 77
+1 -1
arch/sh/boot/Makefile
··· 44 44 45 45 quiet_cmd_uimage = UIMAGE $@ 46 46 cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A sh -O linux -T kernel \ 47 - -C none -a $(KERNEL_LOAD) -e $(KERNEL_ENTRY) \ 47 + -C gzip -a $(KERNEL_LOAD) -e $(KERNEL_ENTRY) \ 48 48 -n 'Linux-$(KERNELRELEASE)' -d $< $@ 49 49 50 50 $(obj)/uImage: $(obj)/vmlinux.bin.gz FORCE
+1
arch/sh/kernel/cpu/sh2a/fpu.c
··· 13 13 #include <linux/signal.h> 14 14 #include <asm/processor.h> 15 15 #include <asm/io.h> 16 + #include <asm/fpu.h> 16 17 17 18 /* The PR (precision) bit in the FP Status Register must be clear when 18 19 * an frchg instruction is executed, otherwise the instruction is undefined.
+1
arch/sh/kernel/cpu/sh4/fpu.c
··· 16 16 #include <asm/cpu/fpu.h> 17 17 #include <asm/processor.h> 18 18 #include <asm/system.h> 19 + #include <asm/fpu.h> 19 20 20 21 /* The PR (precision) bit in the FP Status Register must be clear when 21 22 * an frchg instruction is executed, otherwise the instruction is undefined.
+1
arch/sh/kernel/cpu/sh5/fpu.c
··· 17 17 #include <asm/processor.h> 18 18 #include <asm/user.h> 19 19 #include <asm/io.h> 20 + #include <asm/fpu.h> 20 21 21 22 /* 22 23 * Initially load the FPU with signalling NANS. This bit pattern
+1
arch/sh/kernel/dump_task.c
··· 1 1 #include <linux/elfcore.h> 2 2 #include <linux/sched.h> 3 + #include <asm/fpu.h> 3 4 4 5 /* 5 6 * Capture the user space registers if the task is not running (in user space)
+1
arch/sh/kernel/process_32.c
··· 25 25 #include <asm/pgalloc.h> 26 26 #include <asm/system.h> 27 27 #include <asm/ubc.h> 28 + #include <asm/fpu.h> 28 29 29 30 static int hlt_counter; 30 31 int ubc_usercnt = 0;
+1
arch/sh/kernel/signal_32.c
··· 29 29 #include <asm/uaccess.h> 30 30 #include <asm/pgtable.h> 31 31 #include <asm/cacheflush.h> 32 + #include <asm/fpu.h> 32 33 33 34 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 34 35
-268
include/asm-sh/floppy.h
··· 1 - /* 2 - * Architecture specific parts of the Floppy driver 3 - * include/asm-i386/floppy.h 4 - * 5 - * This file is subject to the terms and conditions of the GNU General Public 6 - * License. See the file "COPYING" in the main directory of this archive 7 - * for more details. 8 - * 9 - * Copyright (C) 1995 10 - */ 11 - #ifndef __ASM_SH_FLOPPY_H 12 - #define __ASM_SH_FLOPPY_H 13 - 14 - #include <linux/vmalloc.h> 15 - 16 - 17 - /* 18 - * The DMA channel used by the floppy controller cannot access data at 19 - * addresses >= 16MB 20 - * 21 - * Went back to the 1MB limit, as some people had problems with the floppy 22 - * driver otherwise. It doesn't matter much for performance anyway, as most 23 - * floppy accesses go through the track buffer. 24 - */ 25 - #define _CROSS_64KB(a,s,vdma) \ 26 - (!vdma && ((unsigned long)(a)/K_64 != ((unsigned long)(a) + (s) - 1) / K_64)) 27 - 28 - #define CROSS_64KB(a,s) _CROSS_64KB(a,s,use_virtual_dma & 1) 29 - 30 - 31 - #define SW fd_routine[use_virtual_dma&1] 32 - #define CSW fd_routine[can_use_virtual_dma & 1] 33 - 34 - 35 - #define fd_inb(port) inb_p(port) 36 - #define fd_outb(value,port) outb_p(value,port) 37 - 38 - #define fd_request_dma() CSW._request_dma(FLOPPY_DMA,"floppy") 39 - #define fd_free_dma() CSW._free_dma(FLOPPY_DMA) 40 - #define fd_enable_irq() enable_irq(FLOPPY_IRQ) 41 - #define fd_disable_irq() disable_irq(FLOPPY_IRQ) 42 - #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL) 43 - #define fd_get_dma_residue() SW._get_dma_residue(FLOPPY_DMA) 44 - #define fd_dma_mem_alloc(size) SW._dma_mem_alloc(size) 45 - #define fd_dma_setup(addr, size, mode, io) SW._dma_setup(addr, size, mode, io) 46 - 47 - #define FLOPPY_CAN_FALLBACK_ON_NODMA 48 - 49 - static int virtual_dma_count; 50 - static int virtual_dma_residue; 51 - static char *virtual_dma_addr; 52 - static int virtual_dma_mode; 53 - static int doing_pdma; 54 - 55 - static void floppy_hardint(int irq, void *dev_id, struct pt_regs * regs) 56 - { 57 - register unsigned char st; 58 - 59 - #undef TRACE_FLPY_INT 60 - 61 - #ifdef TRACE_FLPY_INT 62 - static int calls=0; 63 - static int bytes=0; 64 - static int dma_wait=0; 65 - #endif 66 - if(!doing_pdma) { 67 - floppy_interrupt(irq, dev_id, regs); 68 - return; 69 - } 70 - 71 - #ifdef TRACE_FLPY_INT 72 - if(!calls) 73 - bytes = virtual_dma_count; 74 - #endif 75 - 76 - { 77 - register int lcount; 78 - register char *lptr; 79 - 80 - st = 1; 81 - for(lcount=virtual_dma_count, lptr=virtual_dma_addr; 82 - lcount; lcount--, lptr++) { 83 - st=inb(virtual_dma_port+4) & 0xa0 ; 84 - if(st != 0xa0) 85 - break; 86 - if(virtual_dma_mode) 87 - outb_p(*lptr, virtual_dma_port+5); 88 - else 89 - *lptr = inb_p(virtual_dma_port+5); 90 - } 91 - virtual_dma_count = lcount; 92 - virtual_dma_addr = lptr; 93 - st = inb(virtual_dma_port+4); 94 - } 95 - 96 - #ifdef TRACE_FLPY_INT 97 - calls++; 98 - #endif 99 - if(st == 0x20) 100 - return; 101 - if(!(st & 0x20)) { 102 - virtual_dma_residue += virtual_dma_count; 103 - virtual_dma_count=0; 104 - #ifdef TRACE_FLPY_INT 105 - printk("count=%x, residue=%x calls=%d bytes=%d dma_wait=%d\n", 106 - virtual_dma_count, virtual_dma_residue, calls, bytes, 107 - dma_wait); 108 - calls = 0; 109 - dma_wait=0; 110 - #endif 111 - doing_pdma = 0; 112 - floppy_interrupt(irq, dev_id, regs); 113 - return; 114 - } 115 - #ifdef TRACE_FLPY_INT 116 - if(!virtual_dma_count) 117 - dma_wait++; 118 - #endif 119 - } 120 - 121 - static void fd_disable_dma(void) 122 - { 123 - if(! (can_use_virtual_dma & 1)) 124 - disable_dma(FLOPPY_DMA); 125 - doing_pdma = 0; 126 - virtual_dma_residue += virtual_dma_count; 127 - virtual_dma_count=0; 128 - } 129 - 130 - static int vdma_request_dma(unsigned int dmanr, const char * device_id) 131 - { 132 - return 0; 133 - } 134 - 135 - static void vdma_nop(unsigned int dummy) 136 - { 137 - } 138 - 139 - 140 - static int vdma_get_dma_residue(unsigned int dummy) 141 - { 142 - return virtual_dma_count + virtual_dma_residue; 143 - } 144 - 145 - 146 - static int fd_request_irq(void) 147 - { 148 - if(can_use_virtual_dma) 149 - return request_irq(FLOPPY_IRQ, floppy_hardint, 150 - IRQF_DISABLED, "floppy", NULL); 151 - else 152 - return request_irq(FLOPPY_IRQ, floppy_interrupt, 153 - IRQF_DISABLED, "floppy", NULL); 154 - } 155 - 156 - static unsigned long dma_mem_alloc(unsigned long size) 157 - { 158 - return __get_dma_pages(GFP_KERNEL,get_order(size)); 159 - } 160 - 161 - 162 - static unsigned long vdma_mem_alloc(unsigned long size) 163 - { 164 - return (unsigned long) vmalloc(size); 165 - 166 - } 167 - 168 - #define nodma_mem_alloc(size) vdma_mem_alloc(size) 169 - 170 - static void _fd_dma_mem_free(unsigned long addr, unsigned long size) 171 - { 172 - if((unsigned int) addr >= (unsigned int) high_memory) 173 - return vfree((void *)addr); 174 - else 175 - free_pages(addr, get_order(size)); 176 - } 177 - 178 - #define fd_dma_mem_free(addr, size) _fd_dma_mem_free(addr, size) 179 - 180 - static void _fd_chose_dma_mode(char *addr, unsigned long size) 181 - { 182 - if(can_use_virtual_dma == 2) { 183 - if((unsigned int) addr >= (unsigned int) high_memory || 184 - virt_to_phys(addr) >= 0x10000000) 185 - use_virtual_dma = 1; 186 - else 187 - use_virtual_dma = 0; 188 - } else { 189 - use_virtual_dma = can_use_virtual_dma & 1; 190 - } 191 - } 192 - 193 - #define fd_chose_dma_mode(addr, size) _fd_chose_dma_mode(addr, size) 194 - 195 - 196 - static int vdma_dma_setup(char *addr, unsigned long size, int mode, int io) 197 - { 198 - doing_pdma = 1; 199 - virtual_dma_port = io; 200 - virtual_dma_mode = (mode == DMA_MODE_WRITE); 201 - virtual_dma_addr = addr; 202 - virtual_dma_count = size; 203 - virtual_dma_residue = 0; 204 - return 0; 205 - } 206 - 207 - static int hard_dma_setup(char *addr, unsigned long size, int mode, int io) 208 - { 209 - #ifdef FLOPPY_SANITY_CHECK 210 - if (CROSS_64KB(addr, size)) { 211 - printk("DMA crossing 64-K boundary %p-%p\n", addr, addr+size); 212 - return -1; 213 - } 214 - #endif 215 - 216 - __flush_purge_region(addr, size); 217 - 218 - /* actual, physical DMA */ 219 - doing_pdma = 0; 220 - clear_dma_ff(FLOPPY_DMA); 221 - set_dma_mode(FLOPPY_DMA,mode); 222 - set_dma_addr(FLOPPY_DMA,virt_to_phys(addr)); 223 - set_dma_count(FLOPPY_DMA,size); 224 - enable_dma(FLOPPY_DMA); 225 - return 0; 226 - } 227 - 228 - static struct fd_routine_l { 229 - int (*_request_dma)(unsigned int dmanr, const char * device_id); 230 - void (*_free_dma)(unsigned int dmanr); 231 - int (*_get_dma_residue)(unsigned int dummy); 232 - unsigned long (*_dma_mem_alloc) (unsigned long size); 233 - int (*_dma_setup)(char *addr, unsigned long size, int mode, int io); 234 - } fd_routine[] = { 235 - { 236 - request_dma, 237 - free_dma, 238 - get_dma_residue, 239 - dma_mem_alloc, 240 - hard_dma_setup 241 - }, 242 - { 243 - vdma_request_dma, 244 - vdma_nop, 245 - vdma_get_dma_residue, 246 - vdma_mem_alloc, 247 - vdma_dma_setup 248 - } 249 - }; 250 - 251 - 252 - static int FDC1 = 0x3f0; 253 - static int FDC2 = -1; 254 - 255 - /* 256 - * Floppy types are stored in the rtc's CMOS RAM and so rtc_lock 257 - * is needed to prevent corrupted CMOS RAM in case "insmod floppy" 258 - * coincides with another rtc CMOS user. Paul G. 259 - */ 260 - #define FLOPPY0_TYPE (4) 261 - #define FLOPPY1_TYPE (0) 262 - 263 - #define N_FDC 2 264 - #define N_DRIVE 8 265 - 266 - #define EXTRA_FLOPPY_PARAMS 267 - 268 - #endif /* __ASM_SH_FLOPPY_H */
+23 -14
include/asm-sh/fpu.h
··· 1 1 #ifndef __ASM_SH_FPU_H 2 2 #define __ASM_SH_FPU_H 3 3 4 - #define SR_FD 0x00008000 5 - 6 4 #ifndef __ASSEMBLY__ 5 + #include <linux/preempt.h> 7 6 #include <asm/ptrace.h> 8 7 9 8 #ifdef CONFIG_SH_FPU ··· 20 21 21 22 extern void save_fpu(struct task_struct *__tsk, struct pt_regs *regs); 22 23 #else 24 + 23 25 #define release_fpu(regs) do { } while (0) 24 26 #define grab_fpu(regs) do { } while (0) 25 - #define save_fpu(tsk, regs) do { } while (0) 27 + 28 + static inline void save_fpu(struct task_struct *tsk, struct pt_regs *regs) 29 + { 30 + clear_tsk_thread_flag(tsk, TIF_USEDFPU); 31 + } 26 32 #endif 27 33 28 34 extern int do_fpu_inst(unsigned short, struct pt_regs *); 29 35 30 - #define unlazy_fpu(tsk, regs) do { \ 31 - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ 32 - save_fpu(tsk, regs); \ 33 - } \ 34 - } while (0) 36 + static inline void unlazy_fpu(struct task_struct *tsk, struct pt_regs *regs) 37 + { 38 + preempt_disable(); 39 + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) 40 + save_fpu(tsk, regs); 41 + preempt_enable(); 42 + } 35 43 36 - #define clear_fpu(tsk, regs) do { \ 37 - if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { \ 38 - clear_tsk_thread_flag(tsk, TIF_USEDFPU); \ 39 - release_fpu(regs); \ 40 - } \ 41 - } while (0) 44 + static inline void clear_fpu(struct task_struct *tsk, struct pt_regs *regs) 45 + { 46 + preempt_disable(); 47 + if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) { 48 + clear_tsk_thread_flag(tsk, TIF_USEDFPU); 49 + release_fpu(regs); 50 + } 51 + preempt_enable(); 52 + } 42 53 43 54 #endif /* __ASSEMBLY__ */ 44 55
-1
include/asm-sh/processor.h
··· 2 2 #define __ASM_SH_PROCESSOR_H 3 3 4 4 #include <asm/cpu-features.h> 5 - #include <asm/fpu.h> 6 5 7 6 #ifndef __ASSEMBLY__ 8 7 /*
+1
include/asm-sh/processor_32.h
··· 70 70 */ 71 71 #define SR_DSP 0x00001000 72 72 #define SR_IMASK 0x000000f0 73 + #define SR_FD 0x00008000 73 74 74 75 /* 75 76 * FPU structure and data
+1
include/asm-sh/processor_64.h
··· 112 112 #endif 113 113 114 114 #define SR_IMASK 0x000000f0 115 + #define SR_FD 0x00008000 115 116 #define SR_SSTEP 0x08000000 116 117 117 118 #ifndef __ASSEMBLY__