Skip to content

Commit 823846c

Browse files
committed
Merge tag 'riscv-for-linus-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux
Pull RISC-V fixes from Palmer Dabbelt: "Sorry for the last minute patches, but a few things fell through the cracks recently. I was on the fence about sending a late pull request just for the M-mode fixes, as we don't really have any users, but the last patch fixes the build for Fedora which I consider pretty important. Given that the M-mode fixes should be very low risk, I figured it's worth sending them along as well. Thhis passes my standard 'boot in QEMU' test" * tag 'riscv-for-linus-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: RISC-V: Move all address space definition macros to one place RISC-V: Only select essential drivers for SOC_VIRT config riscv: fix the IPI missing issue in nommu mode riscv: uaccess should be used in nommu mode
2 parents bb36d37 + 2191b4f commit 823846c

File tree

9 files changed

+95
-78
lines changed

9 files changed

+95
-78
lines changed

arch/riscv/Kconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ config RISCV
5050
select PCI_DOMAINS_GENERIC if PCI
5151
select PCI_MSI if PCI
5252
select RISCV_TIMER
53-
select UACCESS_MEMCPY if !MMU
5453
select GENERIC_IRQ_MULTI_HANDLER
5554
select GENERIC_ARCH_TOPOLOGY if SMP
5655
select ARCH_HAS_PTE_SPECIAL

arch/riscv/Kconfig.socs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,6 @@ config SOC_SIFIVE
1212

1313
config SOC_VIRT
1414
bool "QEMU Virt Machine"
15-
select VIRTIO_PCI
16-
select VIRTIO_BALLOON
17-
select VIRTIO_MMIO
18-
select VIRTIO_CONSOLE
19-
select VIRTIO_NET
20-
select NET_9P_VIRTIO
21-
select VIRTIO_BLK
22-
select SCSI_VIRTIO
23-
select DRM_VIRTIO_GPU
24-
select HW_RANDOM_VIRTIO
25-
select RPMSG_CHAR
26-
select RPMSG_VIRTIO
27-
select CRYPTO_DEV_VIRTIO
28-
select VIRTIO_INPUT
2915
select POWER_RESET_SYSCON
3016
select POWER_RESET_SYSCON_POWEROFF
3117
select GOLDFISH

arch/riscv/configs/defconfig

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,23 @@ CONFIG_IP_PNP_BOOTP=y
3131
CONFIG_IP_PNP_RARP=y
3232
CONFIG_NETLINK_DIAG=y
3333
CONFIG_NET_9P=y
34+
CONFIG_NET_9P_VIRTIO=y
3435
CONFIG_PCI=y
3536
CONFIG_PCIEPORTBUS=y
3637
CONFIG_PCI_HOST_GENERIC=y
3738
CONFIG_PCIE_XILINX=y
3839
CONFIG_DEVTMPFS=y
3940
CONFIG_DEVTMPFS_MOUNT=y
4041
CONFIG_BLK_DEV_LOOP=y
42+
CONFIG_VIRTIO_BLK=y
4143
CONFIG_BLK_DEV_SD=y
4244
CONFIG_BLK_DEV_SR=y
45+
CONFIG_SCSI_VIRTIO=y
4346
CONFIG_ATA=y
4447
CONFIG_SATA_AHCI=y
4548
CONFIG_SATA_AHCI_PLATFORM=y
4649
CONFIG_NETDEVICES=y
50+
CONFIG_VIRTIO_NET=y
4751
CONFIG_MACB=y
4852
CONFIG_E1000E=y
4953
CONFIG_R8169=y
@@ -54,13 +58,16 @@ CONFIG_SERIAL_8250_CONSOLE=y
5458
CONFIG_SERIAL_OF_PLATFORM=y
5559
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
5660
CONFIG_HVC_RISCV_SBI=y
61+
CONFIG_VIRTIO_CONSOLE=y
5762
CONFIG_HW_RANDOM=y
63+
CONFIG_HW_RANDOM_VIRTIO=y
5864
CONFIG_SPI=y
5965
CONFIG_SPI_SIFIVE=y
6066
# CONFIG_PTP_1588_CLOCK is not set
6167
CONFIG_POWER_RESET=y
6268
CONFIG_DRM=y
6369
CONFIG_DRM_RADEON=y
70+
CONFIG_DRM_VIRTIO_GPU=y
6471
CONFIG_FRAMEBUFFER_CONSOLE=y
6572
CONFIG_USB=y
6673
CONFIG_USB_XHCI_HCD=y
@@ -74,6 +81,12 @@ CONFIG_USB_UAS=y
7481
CONFIG_MMC=y
7582
CONFIG_MMC_SPI=y
7683
CONFIG_RTC_CLASS=y
84+
CONFIG_VIRTIO_PCI=y
85+
CONFIG_VIRTIO_BALLOON=y
86+
CONFIG_VIRTIO_INPUT=y
87+
CONFIG_VIRTIO_MMIO=y
88+
CONFIG_RPMSG_CHAR=y
89+
CONFIG_RPMSG_VIRTIO=y
7790
CONFIG_EXT4_FS=y
7891
CONFIG_EXT4_FS_POSIX_ACL=y
7992
CONFIG_AUTOFS4_FS=y
@@ -88,16 +101,17 @@ CONFIG_NFS_V4_2=y
88101
CONFIG_ROOT_NFS=y
89102
CONFIG_9P_FS=y
90103
CONFIG_CRYPTO_USER_API_HASH=y
104+
CONFIG_CRYPTO_DEV_VIRTIO=y
91105
CONFIG_PRINTK_TIME=y
92106
CONFIG_DEBUG_FS=y
93107
CONFIG_DEBUG_PAGEALLOC=y
108+
CONFIG_SCHED_STACK_END_CHECK=y
94109
CONFIG_DEBUG_VM=y
95110
CONFIG_DEBUG_VM_PGFLAGS=y
96111
CONFIG_DEBUG_MEMORY_INIT=y
97112
CONFIG_DEBUG_PER_CPU_MAPS=y
98113
CONFIG_SOFTLOCKUP_DETECTOR=y
99114
CONFIG_WQ_WATCHDOG=y
100-
CONFIG_SCHED_STACK_END_CHECK=y
101115
CONFIG_DEBUG_TIMEKEEPING=y
102116
CONFIG_DEBUG_RT_MUTEXES=y
103117
CONFIG_DEBUG_SPINLOCK=y

arch/riscv/configs/rv32_defconfig

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,23 @@ CONFIG_IP_PNP_BOOTP=y
3131
CONFIG_IP_PNP_RARP=y
3232
CONFIG_NETLINK_DIAG=y
3333
CONFIG_NET_9P=y
34+
CONFIG_NET_9P_VIRTIO=y
3435
CONFIG_PCI=y
3536
CONFIG_PCIEPORTBUS=y
3637
CONFIG_PCI_HOST_GENERIC=y
3738
CONFIG_PCIE_XILINX=y
3839
CONFIG_DEVTMPFS=y
3940
CONFIG_DEVTMPFS_MOUNT=y
4041
CONFIG_BLK_DEV_LOOP=y
42+
CONFIG_VIRTIO_BLK=y
4143
CONFIG_BLK_DEV_SD=y
4244
CONFIG_BLK_DEV_SR=y
45+
CONFIG_SCSI_VIRTIO=y
4346
CONFIG_ATA=y
4447
CONFIG_SATA_AHCI=y
4548
CONFIG_SATA_AHCI_PLATFORM=y
4649
CONFIG_NETDEVICES=y
50+
CONFIG_VIRTIO_NET=y
4751
CONFIG_MACB=y
4852
CONFIG_E1000E=y
4953
CONFIG_R8169=y
@@ -54,11 +58,14 @@ CONFIG_SERIAL_8250_CONSOLE=y
5458
CONFIG_SERIAL_OF_PLATFORM=y
5559
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
5660
CONFIG_HVC_RISCV_SBI=y
61+
CONFIG_VIRTIO_CONSOLE=y
5762
CONFIG_HW_RANDOM=y
63+
CONFIG_HW_RANDOM_VIRTIO=y
5864
# CONFIG_PTP_1588_CLOCK is not set
5965
CONFIG_POWER_RESET=y
6066
CONFIG_DRM=y
6167
CONFIG_DRM_RADEON=y
68+
CONFIG_DRM_VIRTIO_GPU=y
6269
CONFIG_FRAMEBUFFER_CONSOLE=y
6370
CONFIG_USB=y
6471
CONFIG_USB_XHCI_HCD=y
@@ -70,6 +77,12 @@ CONFIG_USB_OHCI_HCD_PLATFORM=y
7077
CONFIG_USB_STORAGE=y
7178
CONFIG_USB_UAS=y
7279
CONFIG_RTC_CLASS=y
80+
CONFIG_VIRTIO_PCI=y
81+
CONFIG_VIRTIO_BALLOON=y
82+
CONFIG_VIRTIO_INPUT=y
83+
CONFIG_VIRTIO_MMIO=y
84+
CONFIG_RPMSG_CHAR=y
85+
CONFIG_RPMSG_VIRTIO=y
7386
CONFIG_EXT4_FS=y
7487
CONFIG_EXT4_FS_POSIX_ACL=y
7588
CONFIG_AUTOFS4_FS=y
@@ -84,16 +97,17 @@ CONFIG_NFS_V4_2=y
8497
CONFIG_ROOT_NFS=y
8598
CONFIG_9P_FS=y
8699
CONFIG_CRYPTO_USER_API_HASH=y
100+
CONFIG_CRYPTO_DEV_VIRTIO=y
87101
CONFIG_PRINTK_TIME=y
88102
CONFIG_DEBUG_FS=y
89103
CONFIG_DEBUG_PAGEALLOC=y
104+
CONFIG_SCHED_STACK_END_CHECK=y
90105
CONFIG_DEBUG_VM=y
91106
CONFIG_DEBUG_VM_PGFLAGS=y
92107
CONFIG_DEBUG_MEMORY_INIT=y
93108
CONFIG_DEBUG_PER_CPU_MAPS=y
94109
CONFIG_SOFTLOCKUP_DETECTOR=y
95110
CONFIG_WQ_WATCHDOG=y
96-
CONFIG_SCHED_STACK_END_CHECK=y
97111
CONFIG_DEBUG_TIMEKEEPING=y
98112
CONFIG_DEBUG_RT_MUTEXES=y
99113
CONFIG_DEBUG_SPINLOCK=y

arch/riscv/include/asm/clint.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ static inline void clint_send_ipi_single(unsigned long hartid)
1515
writel(1, clint_ipi_base + hartid);
1616
}
1717

18-
static inline void clint_send_ipi_mask(const struct cpumask *hartid_mask)
18+
static inline void clint_send_ipi_mask(const struct cpumask *mask)
1919
{
20-
int hartid;
20+
int cpu;
2121

22-
for_each_cpu(hartid, hartid_mask)
23-
clint_send_ipi_single(hartid);
22+
for_each_cpu(cpu, mask)
23+
clint_send_ipi_single(cpuid_to_hartid_map(cpu));
2424
}
2525

2626
static inline void clint_clear_ipi(unsigned long hartid)

arch/riscv/include/asm/pgtable.h

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,47 @@
1919
#include <asm/tlbflush.h>
2020
#include <linux/mm_types.h>
2121

22+
#ifdef CONFIG_MMU
23+
24+
#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
25+
#define VMALLOC_END (PAGE_OFFSET - 1)
26+
#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
27+
28+
#define BPF_JIT_REGION_SIZE (SZ_128M)
29+
#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
30+
#define BPF_JIT_REGION_END (VMALLOC_END)
31+
32+
/*
33+
* Roughly size the vmemmap space to be large enough to fit enough
34+
* struct pages to map half the virtual address space. Then
35+
* position vmemmap directly below the VMALLOC region.
36+
*/
37+
#define VMEMMAP_SHIFT \
38+
(CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
39+
#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
40+
#define VMEMMAP_END (VMALLOC_START - 1)
41+
#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
42+
43+
/*
44+
* Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
45+
* is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
46+
*/
47+
#define vmemmap ((struct page *)VMEMMAP_START)
48+
49+
#define PCI_IO_SIZE SZ_16M
50+
#define PCI_IO_END VMEMMAP_START
51+
#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
52+
53+
#define FIXADDR_TOP PCI_IO_START
54+
#ifdef CONFIG_64BIT
55+
#define FIXADDR_SIZE PMD_SIZE
56+
#else
57+
#define FIXADDR_SIZE PGDIR_SIZE
58+
#endif
59+
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
60+
61+
#endif
62+
2263
#ifdef CONFIG_64BIT
2364
#include <asm/pgtable-64.h>
2465
#else
@@ -90,31 +131,6 @@ extern pgd_t swapper_pg_dir[];
90131
#define __S110 PAGE_SHARED_EXEC
91132
#define __S111 PAGE_SHARED_EXEC
92133

93-
#define VMALLOC_SIZE (KERN_VIRT_SIZE >> 1)
94-
#define VMALLOC_END (PAGE_OFFSET - 1)
95-
#define VMALLOC_START (PAGE_OFFSET - VMALLOC_SIZE)
96-
97-
#define BPF_JIT_REGION_SIZE (SZ_128M)
98-
#define BPF_JIT_REGION_START (PAGE_OFFSET - BPF_JIT_REGION_SIZE)
99-
#define BPF_JIT_REGION_END (VMALLOC_END)
100-
101-
/*
102-
* Roughly size the vmemmap space to be large enough to fit enough
103-
* struct pages to map half the virtual address space. Then
104-
* position vmemmap directly below the VMALLOC region.
105-
*/
106-
#define VMEMMAP_SHIFT \
107-
(CONFIG_VA_BITS - PAGE_SHIFT - 1 + STRUCT_PAGE_MAX_SHIFT)
108-
#define VMEMMAP_SIZE BIT(VMEMMAP_SHIFT)
109-
#define VMEMMAP_END (VMALLOC_START - 1)
110-
#define VMEMMAP_START (VMALLOC_START - VMEMMAP_SIZE)
111-
112-
/*
113-
* Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
114-
* is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
115-
*/
116-
#define vmemmap ((struct page *)VMEMMAP_START)
117-
118134
static inline int pmd_present(pmd_t pmd)
119135
{
120136
return (pmd_val(pmd) & (_PAGE_PRESENT | _PAGE_PROT_NONE));
@@ -432,18 +448,6 @@ static inline int ptep_clear_flush_young(struct vm_area_struct *vma,
432448
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
433449
#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
434450

435-
#define PCI_IO_SIZE SZ_16M
436-
#define PCI_IO_END VMEMMAP_START
437-
#define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE)
438-
439-
#define FIXADDR_TOP PCI_IO_START
440-
#ifdef CONFIG_64BIT
441-
#define FIXADDR_SIZE PMD_SIZE
442-
#else
443-
#define FIXADDR_SIZE PGDIR_SIZE
444-
#endif
445-
#define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
446-
447451
/*
448452
* Task size is 0x4000000000 for RV64 or 0x9fc00000 for RV32.
449453
* Note that PGDIR_SIZE must evenly divide TASK_SIZE.

arch/riscv/include/asm/uaccess.h

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,24 @@
1111
/*
1212
* User space memory access functions
1313
*/
14+
15+
extern unsigned long __must_check __asm_copy_to_user(void __user *to,
16+
const void *from, unsigned long n);
17+
extern unsigned long __must_check __asm_copy_from_user(void *to,
18+
const void __user *from, unsigned long n);
19+
20+
static inline unsigned long
21+
raw_copy_from_user(void *to, const void __user *from, unsigned long n)
22+
{
23+
return __asm_copy_from_user(to, from, n);
24+
}
25+
26+
static inline unsigned long
27+
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
28+
{
29+
return __asm_copy_to_user(to, from, n);
30+
}
31+
1432
#ifdef CONFIG_MMU
1533
#include <linux/errno.h>
1634
#include <linux/compiler.h>
@@ -367,24 +385,6 @@ do { \
367385
-EFAULT; \
368386
})
369387

370-
371-
extern unsigned long __must_check __asm_copy_to_user(void __user *to,
372-
const void *from, unsigned long n);
373-
extern unsigned long __must_check __asm_copy_from_user(void *to,
374-
const void __user *from, unsigned long n);
375-
376-
static inline unsigned long
377-
raw_copy_from_user(void *to, const void __user *from, unsigned long n)
378-
{
379-
return __asm_copy_from_user(to, from, n);
380-
}
381-
382-
static inline unsigned long
383-
raw_copy_to_user(void __user *to, const void *from, unsigned long n)
384-
{
385-
return __asm_copy_to_user(to, from, n);
386-
}
387-
388388
extern long strncpy_from_user(char *dest, const char __user *src, long count);
389389

390390
extern long __must_check strlen_user(const char __user *str);

arch/riscv/kernel/smp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ static void send_ipi_mask(const struct cpumask *mask, enum ipi_message_type op)
9696
if (IS_ENABLED(CONFIG_RISCV_SBI))
9797
sbi_send_ipi(cpumask_bits(&hartid_mask));
9898
else
99-
clint_send_ipi_mask(&hartid_mask);
99+
clint_send_ipi_mask(mask);
100100
}
101101

102102
static void send_ipi_single(int cpu, enum ipi_message_type op)

arch/riscv/lib/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
lib-y += delay.o
33
lib-y += memcpy.o
44
lib-y += memset.o
5-
lib-$(CONFIG_MMU) += uaccess.o
5+
lib-y += uaccess.o
66
lib-$(CONFIG_64BIT) += tishift.o

0 commit comments

Comments
 (0)