Commit 058e88d3 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'microblaze-4.13-rc1' of git://git.monstr.eu/linux-2.6-microblaze

Pull microblaze updates from Michal Simek:

 - timer fix

 - use simplified macro in dma.c

 - wire-up new syscall

 - remove asp-generic wrappers

 - fix MMU table handling

 - defconfig updates

 - low-level entry.S changes

* tag 'microblaze-4.13-rc1' of git://git.monstr.eu/linux-2.6-microblaze:
  microblaze: Fix MSR flags when returning from exception
  microblaze: Separate GP registers from MSR handling
  microblaze: Enabling CONFIG_BRIDGE in mmu_defconfig
  microblaze: Enabling CONFIGS related to MTD
  microblaze: Update defconfigs
  microblaze: mm: Flush TLB to ensure correct mapping when higmem ON
  microblaze: remove asm-generic wrapper headers
  microblaze: wire up statx syscall
  microblaze: Set ->min_delta_ticks and ->max_delta_ticks for timer
  microblaze: use sg_phys()
parents 241e5e6f 14ef905b
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
CONFIG_AUDIT=y CONFIG_AUDIT=y
CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_SYSFS_DEPRECATED=y CONFIG_SYSFS_DEPRECATED=y
...@@ -33,10 +31,12 @@ CONFIG_NET=y ...@@ -33,10 +31,12 @@ CONFIG_NET=y
CONFIG_PACKET=y CONFIG_PACKET=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_INET=y CONFIG_INET=y
# CONFIG_INET_LRO is not set
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
CONFIG_BRIDGE=m
CONFIG_MTD=y CONFIG_MTD=y
CONFIG_PROC_DEVICETREE=y CONFIG_MTD_CFI=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
...@@ -47,9 +47,9 @@ CONFIG_XILINX_LL_TEMAC=y ...@@ -47,9 +47,9 @@ CONFIG_XILINX_LL_TEMAC=y
# CONFIG_VT is not set # CONFIG_VT is not set
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
CONFIG_XILINX_HWICAP=y CONFIG_XILINX_HWICAP=y
CONFIG_I2C=y CONFIG_I2C=y
...@@ -66,7 +66,6 @@ CONFIG_FB=y ...@@ -66,7 +66,6 @@ CONFIG_FB=y
CONFIG_FB_XILINX=y CONFIG_FB_XILINX=y
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_UIO=y CONFIG_UIO=y
CONFIG_UIO_PDRV=y
CONFIG_UIO_PDRV_GENIRQ=y CONFIG_UIO_PDRV_GENIRQ=y
CONFIG_UIO_DMEM_GENIRQ=y CONFIG_UIO_DMEM_GENIRQ=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
...@@ -77,14 +76,13 @@ CONFIG_NFS_FS=y ...@@ -77,14 +76,13 @@ CONFIG_NFS_FS=y
CONFIG_CIFS=y CONFIG_CIFS=y
CONFIG_CIFS_STATS=y CONFIG_CIFS_STATS=y
CONFIG_CIFS_STATS2=y CONFIG_CIFS_STATS2=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_SLAB=y CONFIG_DEBUG_SLAB=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_INFO=y
CONFIG_KGDB=y CONFIG_KGDB=y
CONFIG_KGDB_TESTS=y CONFIG_KGDB_TESTS=y
CONFIG_KGDB_KDB=y CONFIG_KGDB_KDB=y
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_KEYS=y CONFIG_KEYS=y
CONFIG_ENCRYPTED_KEYS=y CONFIG_ENCRYPTED_KEYS=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
CONFIG_AUDIT=y CONFIG_AUDIT=y
CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
...@@ -34,18 +31,15 @@ CONFIG_NET=y ...@@ -34,18 +31,15 @@ CONFIG_NET=y
CONFIG_PACKET=y CONFIG_PACKET=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_INET=y CONFIG_INET=y
# CONFIG_INET_LRO is not set
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
CONFIG_MTD=y CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y CONFIG_MTD_CFI=y
CONFIG_MTD_CFI_INTELEXT=y CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_RAM=y CONFIG_MTD_RAM=y
CONFIG_MTD_UCLINUX=y CONFIG_MTD_UCLINUX=y
CONFIG_PROC_DEVICETREE=y
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_BLK_DEV_RAM_SIZE=8192
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
...@@ -56,9 +50,9 @@ CONFIG_XILINX_LL_TEMAC=y ...@@ -56,9 +50,9 @@ CONFIG_XILINX_LL_TEMAC=y
# CONFIG_VT is not set # CONFIG_VT is not set
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_UARTLITE=y CONFIG_SERIAL_UARTLITE=y
CONFIG_SERIAL_UARTLITE_CONSOLE=y CONFIG_SERIAL_UARTLITE_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_HW_RANDOM is not set # CONFIG_HW_RANDOM is not set
CONFIG_XILINX_HWICAP=y CONFIG_XILINX_HWICAP=y
CONFIG_I2C=y CONFIG_I2C=y
...@@ -74,10 +68,6 @@ CONFIG_XILINX_WATCHDOG=y ...@@ -74,10 +68,6 @@ CONFIG_XILINX_WATCHDOG=y
CONFIG_FB=y CONFIG_FB=y
CONFIG_FB_XILINX=y CONFIG_FB_XILINX=y
# CONFIG_USB_SUPPORT is not set # CONFIG_USB_SUPPORT is not set
CONFIG_UIO=y
CONFIG_UIO_PDRV=y
CONFIG_UIO_PDRV_GENIRQ=y
CONFIG_UIO_DMEM_GENIRQ=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_DNOTIFY is not set # CONFIG_DNOTIFY is not set
CONFIG_CRAMFS=y CONFIG_CRAMFS=y
...@@ -85,10 +75,10 @@ CONFIG_ROMFS_FS=y ...@@ -85,10 +75,10 @@ CONFIG_ROMFS_FS=y
CONFIG_NFS_FS=y CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y CONFIG_NFS_V3_ACL=y
CONFIG_NLS=y CONFIG_NLS=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_SLAB=y CONFIG_DEBUG_SLAB=y
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_INFO=y
CONFIG_EARLY_PRINTK=y CONFIG_EARLY_PRINTK=y
CONFIG_KEYS=y CONFIG_KEYS=y
CONFIG_ENCRYPTED_KEYS=y CONFIG_ENCRYPTED_KEYS=y
...@@ -97,4 +87,3 @@ CONFIG_CRYPTO_MD4=y ...@@ -97,4 +87,3 @@ CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_ARC4=y CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set
generic-y += barrier.h generic-y += barrier.h
generic-y += bitops.h
generic-y += bitsperlong.h
generic-y += bug.h
generic-y += bugs.h
generic-y += clkdev.h generic-y += clkdev.h
generic-y += device.h generic-y += device.h
generic-y += div64.h
generic-y += emergency-restart.h
generic-y += errno.h
generic-y += exec.h generic-y += exec.h
generic-y += extable.h generic-y += extable.h
generic-y += fb.h
generic-y += fcntl.h
generic-y += hardirq.h
generic-y += ioctl.h
generic-y += ioctls.h
generic-y += ipcbuf.h
generic-y += irq_regs.h
generic-y += irq_work.h generic-y += irq_work.h
generic-y += kdebug.h
generic-y += kmap_types.h
generic-y += kprobes.h
generic-y += linkage.h
generic-y += local.h
generic-y += local64.h
generic-y += mcs_spinlock.h generic-y += mcs_spinlock.h
generic-y += mm-arch-hooks.h generic-y += mm-arch-hooks.h
generic-y += mman.h
generic-y += msgbuf.h
generic-y += param.h
generic-y += parport.h
generic-y += percpu.h
generic-y += poll.h
generic-y += preempt.h generic-y += preempt.h
generic-y += resource.h
generic-y += sembuf.h
generic-y += serial.h
generic-y += shmbuf.h
generic-y += shmparam.h
generic-y += siginfo.h
generic-y += signal.h
generic-y += socket.h
generic-y += sockios.h
generic-y += stat.h
generic-y += statfs.h
generic-y += swab.h
generic-y += syscalls.h generic-y += syscalls.h
generic-y += termbits.h
generic-y += termios.h
generic-y += topology.h
generic-y += trace_clock.h generic-y += trace_clock.h
generic-y += ucontext.h
generic-y += vga.h
generic-y += word-at-a-time.h generic-y += word-at-a-time.h
generic-y += kprobes.h generic-y += xor.h
#include <asm-generic/bitops.h>
#include <asm-generic/div64.h>
#include <asm-generic/emergency-restart.h>
#include <asm-generic/hardirq.h>
#include <asm-generic/irq_regs.h>
#include <asm-generic/kdebug.h>
#ifndef _ASM_MICROBLAZE_KMAP_TYPES_H
#define _ASM_MICROBLAZE_KMAP_TYPES_H
#include <asm-generic/kmap_types.h>
#endif /* _ASM_MICROBLAZE_KMAP_TYPES_H */
#include <asm-generic/linkage.h>
#include <asm-generic/local.h>
#include <asm-generic/local64.h>
#include <asm-generic/parport.h>
#include <asm-generic/percpu.h>
#include <asm-generic/serial.h>
#include <asm-generic/shmparam.h>
#include <asm-generic/topology.h>
#include <asm-generic/ucontext.h>
...@@ -38,6 +38,6 @@ ...@@ -38,6 +38,6 @@
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#define __NR_syscalls 398 #define __NR_syscalls 399
#endif /* _ASM_MICROBLAZE_UNISTD_H */ #endif /* _ASM_MICROBLAZE_UNISTD_H */
...@@ -413,5 +413,6 @@ ...@@ -413,5 +413,6 @@
#define __NR_pkey_mprotect 395 #define __NR_pkey_mprotect 395
#define __NR_pkey_alloc 396 #define __NR_pkey_alloc 396
#define __NR_pkey_free 397 #define __NR_pkey_free 397
#define __NR_statx 398
#endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */ #endif /* _UAPI_ASM_MICROBLAZE_UNISTD_H */
...@@ -65,8 +65,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, ...@@ -65,8 +65,7 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
if (attrs & DMA_ATTR_SKIP_CPU_SYNC) if (attrs & DMA_ATTR_SKIP_CPU_SYNC)
continue; continue;
__dma_sync(page_to_phys(sg_page(sg)) + sg->offset, __dma_sync(sg_phys(sg), sg->length, direction);
sg->length, direction);
} }
return nents; return nents;
......
...@@ -208,9 +208,7 @@ syscall_debug_table: ...@@ -208,9 +208,7 @@ syscall_debug_table:
mfs r11, rmsr; /* save MSR */ \ mfs r11, rmsr; /* save MSR */ \
swi r11, r1, PT_MSR; swi r11, r1, PT_MSR;
#define RESTORE_REGS \ #define RESTORE_REGS_GP \
lwi r11, r1, PT_MSR; \
mts rmsr , r11; \
lwi r2, r1, PT_R2; /* restore SDA */ \ lwi r2, r1, PT_R2; /* restore SDA */ \
lwi r3, r1, PT_R3; \ lwi r3, r1, PT_R3; \
lwi r4, r1, PT_R4; \ lwi r4, r1, PT_R4; \
...@@ -242,6 +240,18 @@ syscall_debug_table: ...@@ -242,6 +240,18 @@ syscall_debug_table:
lwi r30, r1, PT_R30; \ lwi r30, r1, PT_R30; \
lwi r31, r1, PT_R31; /* Restore cur task reg */ lwi r31, r1, PT_R31; /* Restore cur task reg */
#define RESTORE_REGS \
lwi r11, r1, PT_MSR; \
mts rmsr , r11; \
RESTORE_REGS_GP
#define RESTORE_REGS_RTBD \
lwi r11, r1, PT_MSR; \
andni r11, r11, MSR_EIP; /* clear EIP */ \
ori r11, r11, MSR_EE | MSR_BIP; /* set EE and BIP */ \
mts rmsr , r11; \
RESTORE_REGS_GP
#define SAVE_STATE \ #define SAVE_STATE \
swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* save stack */ \ swi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* save stack */ \
/* See if already in kernel mode.*/ \ /* See if already in kernel mode.*/ \
...@@ -427,7 +437,7 @@ C_ENTRY(ret_from_trap): ...@@ -427,7 +437,7 @@ C_ENTRY(ret_from_trap):
swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */
VM_OFF; VM_OFF;
tophys(r1,r1); tophys(r1,r1);
RESTORE_REGS; RESTORE_REGS_RTBD;
addik r1, r1, PT_SIZE /* Clean up stack space. */ addik r1, r1, PT_SIZE /* Clean up stack space. */
lwi r1, r1, PT_R1 - PT_SIZE;/* Restore user stack pointer. */ lwi r1, r1, PT_R1 - PT_SIZE;/* Restore user stack pointer. */
bri 6f; bri 6f;
...@@ -436,7 +446,7 @@ C_ENTRY(ret_from_trap): ...@@ -436,7 +446,7 @@ C_ENTRY(ret_from_trap):
2: set_bip; /* Ints masked for state restore */ 2: set_bip; /* Ints masked for state restore */
VM_OFF; VM_OFF;
tophys(r1,r1); tophys(r1,r1);
RESTORE_REGS; RESTORE_REGS_RTBD;
addik r1, r1, PT_SIZE /* Clean up stack space. */ addik r1, r1, PT_SIZE /* Clean up stack space. */
tovirt(r1,r1); tovirt(r1,r1);
6: 6:
...@@ -612,7 +622,7 @@ C_ENTRY(ret_from_exc): ...@@ -612,7 +622,7 @@ C_ENTRY(ret_from_exc):
VM_OFF; VM_OFF;
tophys(r1,r1); tophys(r1,r1);
RESTORE_REGS; RESTORE_REGS_RTBD;
addik r1, r1, PT_SIZE /* Clean up stack space. */ addik r1, r1, PT_SIZE /* Clean up stack space. */
lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer. */ lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer. */
...@@ -621,7 +631,7 @@ C_ENTRY(ret_from_exc): ...@@ -621,7 +631,7 @@ C_ENTRY(ret_from_exc):
2: set_bip; /* Ints masked for state restore */ 2: set_bip; /* Ints masked for state restore */
VM_OFF; VM_OFF;
tophys(r1,r1); tophys(r1,r1);
RESTORE_REGS; RESTORE_REGS_RTBD;
addik r1, r1, PT_SIZE /* Clean up stack space. */ addik r1, r1, PT_SIZE /* Clean up stack space. */
tovirt(r1,r1); tovirt(r1,r1);
...@@ -847,7 +857,7 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ ...@@ -847,7 +857,7 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */
VM_OFF; VM_OFF;
tophys(r1,r1); tophys(r1,r1);
/* MS: Restore all regs */ /* MS: Restore all regs */
RESTORE_REGS RESTORE_REGS_RTBD
addik r1, r1, PT_SIZE /* Clean up stack space */ addik r1, r1, PT_SIZE /* Clean up stack space */
lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */ lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */
DBTRAP_return_user: /* MS: Make global symbol for debugging */ DBTRAP_return_user: /* MS: Make global symbol for debugging */
...@@ -858,7 +868,7 @@ DBTRAP_return_user: /* MS: Make global symbol for debugging */ ...@@ -858,7 +868,7 @@ DBTRAP_return_user: /* MS: Make global symbol for debugging */
2: VM_OFF; 2: VM_OFF;
tophys(r1,r1); tophys(r1,r1);
/* MS: Restore all regs */ /* MS: Restore all regs */
RESTORE_REGS RESTORE_REGS_RTBD
lwi r14, r1, PT_R14; lwi r14, r1, PT_R14;
lwi r16, r1, PT_PC; lwi r16, r1, PT_PC;
addik r1, r1, PT_SIZE; /* MS: Clean up stack space */ addik r1, r1, PT_SIZE; /* MS: Clean up stack space */
......
...@@ -398,3 +398,4 @@ ENTRY(sys_call_table) ...@@ -398,3 +398,4 @@ ENTRY(sys_call_table)
.long sys_pkey_mprotect /* 395 */ .long sys_pkey_mprotect /* 395 */
.long sys_pkey_alloc .long sys_pkey_alloc
.long sys_pkey_free .long sys_pkey_free
.long sys_statx
...@@ -178,8 +178,10 @@ static __init int xilinx_clockevent_init(void) ...@@ -178,8 +178,10 @@ static __init int xilinx_clockevent_init(void)
clockevent_xilinx_timer.shift); clockevent_xilinx_timer.shift);
clockevent_xilinx_timer.max_delta_ns = clockevent_xilinx_timer.max_delta_ns =
clockevent_delta2ns((u32)~0, &clockevent_xilinx_timer); clockevent_delta2ns((u32)~0, &clockevent_xilinx_timer);
clockevent_xilinx_timer.max_delta_ticks = (u32)~0;
clockevent_xilinx_timer.min_delta_ns = clockevent_xilinx_timer.min_delta_ns =
clockevent_delta2ns(1, &clockevent_xilinx_timer); clockevent_delta2ns(1, &clockevent_xilinx_timer);
clockevent_xilinx_timer.min_delta_ticks = 1;
clockevent_xilinx_timer.cpumask = cpumask_of(0); clockevent_xilinx_timer.cpumask = cpumask_of(0);
clockevents_register_device(&clockevent_xilinx_timer); clockevents_register_device(&clockevent_xilinx_timer);
......
...@@ -60,6 +60,7 @@ void __kunmap_atomic(void *kvaddr) ...@@ -60,6 +60,7 @@ void __kunmap_atomic(void *kvaddr)
{ {
unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
int type; int type;
unsigned int idx;
if (vaddr < __fix_to_virt(FIX_KMAP_END)) { if (vaddr < __fix_to_virt(FIX_KMAP_END)) {
pagefault_enable(); pagefault_enable();
...@@ -68,21 +69,18 @@ void __kunmap_atomic(void *kvaddr) ...@@ -68,21 +69,18 @@ void __kunmap_atomic(void *kvaddr)
} }
type = kmap_atomic_idx(); type = kmap_atomic_idx();
#ifdef CONFIG_DEBUG_HIGHMEM
{
unsigned int idx;
idx = type + KM_TYPE_NR * smp_processor_id(); idx = type + KM_TYPE_NR * smp_processor_id();
#ifdef CONFIG_DEBUG_HIGHMEM
BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx)); BUG_ON(vaddr != __fix_to_virt(FIX_KMAP_BEGIN + idx));
#endif
/* /*
* force other mappings to Oops if they'll try to access * force other mappings to Oops if they'll try to access
* this pte without first remap it * this pte without first remap it
*/ */
pte_clear(&init_mm, vaddr, kmap_pte-idx); pte_clear(&init_mm, vaddr, kmap_pte-idx);
local_flush_tlb_page(NULL, vaddr); local_flush_tlb_page(NULL, vaddr);
}
#endif
kmap_atomic_idx_pop(); kmap_atomic_idx_pop();
pagefault_enable(); pagefault_enable();
preempt_enable(); preempt_enable();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment