Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
c8610c0
MIPS: Fix HOTPLUG_PARALLEL dependency
gclement Oct 27, 2025
eb6ac26
mips: configs: loongson1: Update defconfig
kelvincheung Nov 16, 2025
4f0b3cd
MIPS: dts: Always descend vendor subdirectories
robherring Nov 20, 2025
36dac9a
MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 …
gclement Nov 28, 2025
5850847
mips: Remove __GFP_HIGHMEM masking
VMoola Nov 7, 2025
4ebb6c9
MIPS: alchemy: mtx1: switch to static device properties
dtor Aug 11, 2025
263e954
mips: kvm: simplify kvm_mips_deliver_interrupts()
YuryNorov Jul 16, 2025
2b6d718
MIPS: Fix whitespace damage in r4k_wait from VS timer fix
maciej-w-rozycki Oct 19, 2025
1ef15fb
cifs: client: enforce consistent handling of multichannel and max_cha…
rajasi3010 Nov 18, 2025
9d85ac9
cifs: Fix handling of a beyond-EOF DIO/unbuffered read over SMB1
dhowells Dec 2, 2025
83bfbd0
cifs: Remove the RFC1002 header from smb_hdr
dhowells Sep 5, 2025
6be0958
cifs: Make smb1's SendReceive() wrap cifs_send_recv()
dhowells Aug 5, 2025
62432a3
cifs: Clean up some places where an extra kvec[] was required for rfc…
dhowells Aug 6, 2025
28405cb
cifs: Replace SendReceiveBlockingLock() with SendReceive() plus flags
dhowells Aug 5, 2025
6a86a4c
cifs: Fix specification of function pointers
dhowells Dec 1, 2025
87fba18
cifs: Remove the server pointer from smb_message
dhowells Oct 3, 2025
3a7b6d0
cifs: Don't need state locking in smb2_get_mid_entry()
dhowells Aug 4, 2025
f80ac7e
cifs: Add a tracepoint to log EIO errors
dhowells Oct 24, 2025
32a6086
cifs: Do some preparation prior to organising the function declarations
dhowells Dec 1, 2025
ef529f6
cifs: client: allow changing multichannel mount options on remount
rajasi3010 Dec 5, 2025
4ae4dde
cifs: Fix handling of a beyond-EOF DIO/unbuffered read over SMB2
dhowells Dec 3, 2025
855982a
smb: client: relax session and tcon reconnect attempts
pcacjr Dec 4, 2025
a8fce7c
smb: client: improve error message when creating SMB session
pcacjr Dec 4, 2025
7ad7859
smb: client: Add tracepoint for krb5 auth
pcacjr Dec 4, 2025
6c1eb31
smb/client: reduce loop count in map_smb2_to_linux_error() by half
Dec 5, 2025
bf80d15
smb/client: remove unused elements from smb2_error_map_table array
Dec 5, 2025
523ecd9
smb: rename to STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP
Dec 5, 2025
d159702
smb/client: add two elements to smb2_error_map_table array
Dec 5, 2025
9146c7e
cifs: Remove dead function prototypes
dhowells Dec 5, 2025
d8f5265
smb/client: update some SMB2 status strings
Dec 6, 2025
2fb6915
compiler_types.h: add "auto" as a macro for "__auto_type"
Jul 18, 2025
b3b8767
include/linux: change "__auto_type" to "auto"
Jul 20, 2025
75beb7e
fs/proc: replace "__auto_type" with "const auto"
Jul 20, 2025
add9b1b
arch/nios2: replace "__auto_type" and adjacent equivalent with "auto"
Jul 20, 2025
2a5b286
arch/x86: replace "__auto_type" with "auto"
Jul 20, 2025
c278d72
selftests/bpf: replace "__auto_type" with "auto"
Jul 20, 2025
4ecc26f
tools/virtio: replace "__auto_type" with "auto"
Jul 20, 2025
3d99347
Merge tag 'v6.19-rc-part1-smb3-client-fixes' of git://git.samba.org/s…
torvalds Dec 9, 2025
c752c21
Merge tag 'auto-type-conversion-for-v6.19-rc1' of git://git.kernel.or…
torvalds Dec 9, 2025
12eef14
lockref: add a __cond_lock annotation for lockref_put_or_lock
Dec 9, 2025
7a3984b
Merge tag 'mips_6.19' of git://git.kernel.org/pub/scm/linux/kernel/gi…
torvalds Dec 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@ config EYEQ
select USB_UHCI_BIG_ENDIAN_DESC if CPU_BIG_ENDIAN
select USB_UHCI_BIG_ENDIAN_MMIO if CPU_BIG_ENDIAN
select USE_OF
select HOTPLUG_PARALLEL if SMP
select HOTPLUG_PARALLEL if HOTPLUG_CPU
help
Select this to build a kernel supporting EyeQ SoC from Mobileye.

Expand Down
181 changes: 124 additions & 57 deletions arch/mips/alchemy/board-mtx1.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/gpio_keys.h>
#include <linux/gpio/property.h>
#include <linux/input.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h>
Expand Down Expand Up @@ -80,64 +78,134 @@ void __init board_setup(void)

/******************************************************************************/

static struct gpio_keys_button mtx1_gpio_button[] = {
{
.gpio = 207,
.code = BTN_0,
.desc = "System button",
}
static const struct software_node mtx1_gpiochip_node = {
.name = "alchemy-gpio2",
};

static struct gpio_keys_platform_data mtx1_buttons_data = {
.buttons = mtx1_gpio_button,
.nbuttons = ARRAY_SIZE(mtx1_gpio_button),
static const struct software_node mtx1_gpio_keys_node = {
.name = "mtx1-gpio-keys",
};

static struct platform_device mtx1_button = {
.name = "gpio-keys",
.id = -1,
.dev = {
.platform_data = &mtx1_buttons_data,
}
static const struct property_entry mtx1_button_props[] = {
PROPERTY_ENTRY_U32("linux,code", BTN_0),
PROPERTY_ENTRY_GPIO("gpios", &mtx1_gpiochip_node, 7, GPIO_ACTIVE_HIGH),
PROPERTY_ENTRY_STRING("label", "System button"),
{ }
};

static struct gpiod_lookup_table mtx1_wdt_gpio_table = {
.dev_id = "mtx1-wdt.0",
.table = {
/* Global number 215 is offset 15 on Alchemy GPIO 2 */
GPIO_LOOKUP("alchemy-gpio2", 15, NULL, GPIO_ACTIVE_HIGH),
{ },
},
static const struct software_node mtx1_button_node = {
.parent = &mtx1_gpio_keys_node,
.properties = mtx1_button_props,
};

static const struct software_node *mtx1_gpio_keys_swnodes[] __initconst = {
&mtx1_gpio_keys_node,
&mtx1_button_node,
NULL
};

static struct platform_device mtx1_wdt = {
static void __init mtx1_keys_init(void)
{
struct platform_device_info keys_info = {
.name = "gpio-keys",
.id = PLATFORM_DEVID_NONE,
};
struct platform_device *pd;
int err;

err = software_node_register_node_group(mtx1_gpio_keys_swnodes);
if (err) {
pr_err("failed to register gpio-keys software nodes: %d\n", err);
return;
}

keys_info.fwnode = software_node_fwnode(&mtx1_gpio_keys_node);

pd = platform_device_register_full(&keys_info);
err = PTR_ERR_OR_ZERO(pd);
if (err)
pr_err("failed to create gpio-keys device: %d\n", err);
}

/* Global number 215 is offset 15 on Alchemy GPIO 2 */
static const struct property_entry mtx1_wdt_props[] = {
PROPERTY_ENTRY_GPIO("gpios", &mtx1_gpiochip_node, 15, GPIO_ACTIVE_HIGH),
{ }
};

static struct platform_device_info mtx1_wdt_info __initconst = {
.name = "mtx1-wdt",
.id = 0,
.properties = mtx1_wdt_props,
};

static const struct gpio_led default_leds[] = {
{
.name = "mtx1:green",
.gpio = 211,
}, {
.name = "mtx1:red",
.gpio = 212,
},
static void __init mtx1_wdt_init(void)
{
struct platform_device *pd;
int err;

pd = platform_device_register_full(&mtx1_wdt_info);
err = PTR_ERR_OR_ZERO(pd);
if (err)
pr_err("failed to create gpio-keys device: %d\n", err);
}

static const struct software_node mtx1_gpio_leds_node = {
.name = "mtx1-leds",
};

static struct gpio_led_platform_data mtx1_led_data = {
.num_leds = ARRAY_SIZE(default_leds),
.leds = default_leds,
static const struct property_entry mtx1_green_led_props[] = {
PROPERTY_ENTRY_GPIO("gpios", &mtx1_gpiochip_node, 11, GPIO_ACTIVE_HIGH),
{ }
};

static struct platform_device mtx1_gpio_leds = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &mtx1_led_data,
}
static const struct software_node mtx1_green_led_node = {
.name = "mtx1:green",
.parent = &mtx1_gpio_leds_node,
.properties = mtx1_green_led_props,
};

static const struct property_entry mtx1_red_led_props[] = {
PROPERTY_ENTRY_GPIO("gpios", &mtx1_gpiochip_node, 12, GPIO_ACTIVE_HIGH),
{ }
};

static const struct software_node mtx1_red_led_node = {
.name = "mtx1:red",
.parent = &mtx1_gpio_leds_node,
.properties = mtx1_red_led_props,
};

static const struct software_node *mtx1_gpio_leds_swnodes[] = {
&mtx1_gpio_leds_node,
&mtx1_green_led_node,
&mtx1_red_led_node,
NULL
};

static void __init mtx1_leds_init(void)
{
struct platform_device_info led_info = {
.name = "leds-gpio",
.id = PLATFORM_DEVID_NONE,
};
struct platform_device *led_dev;
int err;

err = software_node_register_node_group(mtx1_gpio_leds_swnodes);
if (err) {
pr_err("failed to register LED software nodes: %d\n", err);
return;
}

led_info.fwnode = software_node_fwnode(&mtx1_gpio_leds_node);

led_dev = platform_device_register_full(&led_info);
err = PTR_ERR_OR_ZERO(led_dev);
if (err)
pr_err("failed to create LED device: %d\n", err);
}

static struct mtd_partition mtx1_mtd_partitions[] = {
{
.name = "filesystem",
Expand Down Expand Up @@ -247,9 +315,6 @@ static struct platform_device mtx1_pci_host = {

static struct platform_device *mtx1_devs[] __initdata = {
&mtx1_pci_host,
&mtx1_gpio_leds,
&mtx1_wdt,
&mtx1_button,
&mtx1_mtd,
};

Expand All @@ -270,16 +335,18 @@ static int __init mtx1_register_devices(void)

au1xxx_override_eth_cfg(0, &mtx1_au1000_eth0_pdata);

rc = gpio_request(mtx1_gpio_button[0].gpio,
mtx1_gpio_button[0].desc);
if (rc < 0) {
printk(KERN_INFO "mtx1: failed to request %d\n",
mtx1_gpio_button[0].gpio);
goto out;
}
gpio_direction_input(mtx1_gpio_button[0].gpio);
out:
gpiod_add_lookup_table(&mtx1_wdt_gpio_table);
return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
rc = software_node_register(&mtx1_gpiochip_node);
if (rc)
return rc;

rc = platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
if (rc)
return rc;

mtx1_leds_init();
mtx1_wdt_init();
mtx1_keys_init();

return 0;
}
arch_initcall(mtx1_register_devices);
35 changes: 16 additions & 19 deletions arch/mips/boot/dts/Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
# SPDX-License-Identifier: GPL-2.0
subdir-$(CONFIG_BMIPS_GENERIC) += brcm
subdir-$(CONFIG_CAVIUM_OCTEON_SOC) += cavium-octeon
subdir-$(CONFIG_ECONET) += econet
subdir-$(CONFIG_EYEQ) += mobileye
subdir-$(CONFIG_FIT_IMAGE_FDT_MARDUK) += img
subdir-$(CONFIG_FIT_IMAGE_FDT_BOSTON) += img
subdir-$(CONFIG_MACH_INGENIC) += ingenic
subdir-$(CONFIG_LANTIQ) += lantiq
subdir-$(CONFIG_MACH_LOONGSON64) += loongson
subdir-$(CONFIG_MACH_LOONGSON32) += loongson
subdir-$(CONFIG_SOC_VCOREIII) += mscc
subdir-$(CONFIG_MIPS_MALTA) += mti
subdir-$(CONFIG_LEGACY_BOARD_SEAD3) += mti
subdir-$(CONFIG_FIT_IMAGE_FDT_NI169445) += ni
subdir-$(CONFIG_MACH_PIC32) += pic32
subdir-$(CONFIG_ATH79) += qca
subdir-$(CONFIG_RALINK) += ralink
subdir-$(CONFIG_MACH_REALTEK_RTL) += realtek
subdir-$(CONFIG_FIT_IMAGE_FDT_XILFPGA) += xilfpga
subdir-y += brcm
subdir-y += cavium-octeon
subdir-y += econet
subdir-y += mobileye
subdir-y += img
subdir-y += ingenic
subdir-y += lantiq
subdir-y += loongson
subdir-y += mscc
subdir-y += mti
subdir-y += ni
subdir-y += pic32
subdir-y += qca
subdir-y += ralink
subdir-y += realtek
subdir-y += xilfpga
4 changes: 2 additions & 2 deletions arch/mips/boot/dts/realtek/Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
dtb-y += cisco_sg220-26.dtb
dtb-y += cameo-rtl9302c-2x-rtl8224-2xge.dtb
dtb-$(CONFIG_MACH_REALTEK_RTL) += cisco_sg220-26.dtb
dtb-$(CONFIG_MACH_REALTEK_RTL) += cameo-rtl9302c-2x-rtl8224-2xge.dtb
16 changes: 7 additions & 9 deletions arch/mips/configs/loongson1_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ CONFIG_EXPERT=y
CONFIG_PERF_EVENTS=y
CONFIG_MACH_LOONGSON32=y
# CONFIG_SUSPEND is not set
CONFIG_JUMP_LABEL=y
# CONFIG_SECCOMP is not set
# CONFIG_GCC_PLUGINS is not set
CONFIG_MODULES=y
Expand All @@ -30,16 +31,16 @@ CONFIG_IP_PNP_DHCP=y
CONFIG_SYN_COOKIES=y
# CONFIG_INET_DIAG is not set
# CONFIG_IPV6 is not set
# CONFIG_BQL is not set
# CONFIG_WIRELESS is not set
# CONFIG_ETHTOOL_NETLINK is not set
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_STANDALONE is not set
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_RAW_NAND=y
CONFIG_MTD_NAND_LOONGSON1=y
CONFIG_MTD_NAND_LOONGSON=y
CONFIG_MTD_UBI=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_SCSI=m
Expand Down Expand Up @@ -72,6 +73,7 @@ CONFIG_NETDEVICES=y
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
# CONFIG_NET_VENDOR_MICROSOFT is not set
# CONFIG_NET_VENDOR_MUCSE is not set
# CONFIG_NET_VENDOR_NI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
Expand Down Expand Up @@ -166,15 +168,11 @@ CONFIG_ROOT_NFS=y
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_ISO8859_1=m
# CONFIG_CRYPTO_HW is not set
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
# CONFIG_XZ_DEC_ARM is not set
# CONFIG_XZ_DEC_ARMTHUMB is not set
# CONFIG_XZ_DEC_ARM64 is not set
# CONFIG_XZ_DEC_SPARC is not set
# CONFIG_XZ_DEC_RISCV is not set
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_DEBUG_MISC is not set
CONFIG_MAGIC_SYSRQ=y
# CONFIG_SLUB_DEBUG is not set
# CONFIG_RCU_TRACE is not set
# CONFIG_FTRACE is not set
# CONFIG_EARLY_PRINTK is not set
CONFIG_TEST_DHRY=m
3 changes: 1 addition & 2 deletions arch/mips/include/asm/pgalloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
{
pud_t *pud;
struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL & ~__GFP_HIGHMEM,
PUD_TABLE_ORDER);
struct ptdesc *ptdesc = pagetable_alloc(GFP_KERNEL, PUD_TABLE_ORDER);

if (!ptdesc)
return NULL;
Expand Down
25 changes: 21 additions & 4 deletions arch/mips/kernel/ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,20 @@ static inline void ftrace_dyn_arch_init_insns(void)
u32 *buf;
unsigned int v1;

/* la v1, _mcount */
v1 = 3;
buf = (u32 *)&insn_la_mcount[0];
UASM_i_LA(&buf, v1, MCOUNT_ADDR);
/* If we are not in compat space, the number of generated
* instructions will exceed the maximum expected limit of 2.
* To prevent buffer overflow, we avoid generating them.
* insn_la_mcount will not be used later in ftrace_make_call.
*/
if (uasm_in_compat_space_p(MCOUNT_ADDR)) {
/* la v1, _mcount */
v1 = 3;
buf = (u32 *)&insn_la_mcount[0];
UASM_i_LA(&buf, v1, MCOUNT_ADDR);
} else {
pr_warn("ftrace: mcount address beyond 32 bits is not supported (%lX)\n",
MCOUNT_ADDR);
}

/* jal (ftrace_caller + 8), jump over the first two instruction */
buf = (u32 *)&insn_jal_ftrace_caller;
Expand Down Expand Up @@ -189,6 +199,13 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
unsigned int new;
unsigned long ip = rec->ip;

/* When the code to patch does not belong to the kernel code
* space, we must use insn_la_mcount. However, if MCOUNT_ADDR
* is not in compat space, insn_la_mcount is not usable.
*/
if (!core_kernel_text(ip) && !uasm_in_compat_space_p(MCOUNT_ADDR))
return -EFAULT;

new = core_kernel_text(ip) ? insn_jal_ftrace_caller : insn_la_mcount[0];

#ifdef CONFIG_64BIT
Expand Down
Loading