patch-2.2.8 linux/arch/m68k/kernel/entry.S

Next file: linux/arch/m68k/kernel/head.S
Previous file: linux/arch/m68k/config.in
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.2.7/linux/arch/m68k/kernel/entry.S linux/arch/m68k/kernel/entry.S
@@ -164,8 +164,17 @@
 
 	movel	%sp,%sp@-
 	movel	%d0,%sp@- 		|  put vector # on stack
+#if defined(MACH_Q40_ONLY) && defined(CONFIG_BLK_DEV_FD)
+	btstb	#4,0xff000000	| Q40 floppy needs very special treatment ...
+	jbeq	1f
+	btstb	#3,0xff000004		
+	jbeq	1f
+	jbsr	SYMBOL_NAME(floppy_hardint)
+	jbra	3f
+1:		
+#endif		
 	jbsr	SYMBOL_NAME(process_int)|  process the IRQ
-	addql	#8,%sp			|  pop parameters off stack
+3:     	addql	#8,%sp			|  pop parameters off stack
 
 SYMBOL_NAME_LABEL(ret_from_interrupt)
 	subql	#1,SYMBOL_NAME(local_irq_count)
@@ -295,6 +304,8 @@
 2:	fmovemx	%fp0-%fp7,%a0@(TASK_TSS+TSS_FPREG)
 	fmoveml	%fpcr/%fpsr/%fpiar,%a0@(TASK_TSS+TSS_FPCNTL)
 3:
+	/* Return previous task in %d1 */
+	movel	%curptr,%d1
 
 	/* switch to new task (a1 contains new task) */
 	movel	%a1,%curptr
@@ -320,7 +331,14 @@
 	movec	%d0,%cacr
 
 	/* switch the root pointer */
+#ifdef CPU_M68030_ONLY
+	.chip	68030
+	pmovefd	%a1@(TASK_TSS+TSS_CRP),%crp
+	.chip	68k
+	pflush	#0,#4
+#else
 	pmove	%a1@(TASK_TSS+TSS_CRP),%crp
+#endif
 #endif
 
 #if defined(CPU_M68020_OR_M68030) && defined(CPU_M68040_OR_M68060)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)