kernel update to 4.9.128 and 4.14.71

This commit is contained in:
coolsnowwolf 2018-09-22 16:57:24 +08:00
parent 926700a291
commit 523655caf3
72 changed files with 1784 additions and 351 deletions

View File

@ -2,13 +2,13 @@
LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .119
LINUX_VERSION-4.9 = .124
LINUX_VERSION-4.14 = .67
LINUX_VERSION-3.18 = .122
LINUX_VERSION-4.9 = .128
LINUX_VERSION-4.14 = .71
LINUX_KERNEL_HASH-3.18.119 = 2bab623ed868b679eac224f62212cc285264061bedf1e32897f72e35aa26160d
LINUX_KERNEL_HASH-4.9.124 = 5ca6b0d48c8dd1265005169f1b97149a4e893668c0d8aa566a73c7663c8e4311
LINUX_KERNEL_HASH-4.14.67 = 3f4b056dc27233a78f7a4a35ed6fdcfd0a9680ec40b611a898bb6c8b905070ba
LINUX_KERNEL_HASH-3.18.122 = 675b1ce36af23caa500cb1d4f0ec2976791fb0a97ebb6486a5e2ebcb5527ade5
LINUX_KERNEL_HASH-4.9.128 = bdb76f48491a6aadc89c0f0f7fdc240d77cee54da5aac59da0b5d98e226b6f12
LINUX_KERNEL_HASH-4.14.71 = 76a4473dbcbd922c23a16130414829a36eb7e2f4e5859bd1b742fffdff907489
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
sanitize_uri=$(call qstrip,$(subst @,_,$(subst :,_,$(subst .,_,$(subst -,_,$(subst /,_,$(1)))))))

View File

@ -621,7 +621,7 @@
#define IP6_MF 0x0001
#define IP6_OFFSET 0xFFF8
@@ -444,8 +444,8 @@ static inline void __ipv6_addr_set_half(
@@ -437,8 +437,8 @@ static inline void __ipv6_addr_set_half(
}
#endif
#endif
@ -632,7 +632,7 @@
}
static inline void ipv6_addr_set(struct in6_addr *addr,
@@ -504,6 +504,8 @@ static inline bool ipv6_prefix_equal(con
@@ -497,6 +497,8 @@ static inline bool ipv6_prefix_equal(con
const __be32 *a1 = addr1->s6_addr32;
const __be32 *a2 = addr2->s6_addr32;
unsigned int pdw, pbi;
@ -641,7 +641,7 @@
/* check complete u32 in prefix */
pdw = prefixlen >> 5;
@@ -512,7 +514,9 @@ static inline bool ipv6_prefix_equal(con
@@ -505,7 +507,9 @@ static inline bool ipv6_prefix_equal(con
/* check incomplete u32 in prefix */
pbi = prefixlen & 0x1f;
@ -652,7 +652,7 @@
return false;
return true;
@@ -656,13 +660,13 @@ static inline void ipv6_addr_set_v4mappe
@@ -634,13 +638,13 @@ static inline void ipv6_addr_set_v4mappe
*/
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
{
@ -668,7 +668,7 @@
if (xb)
return i * 32 + 31 - __fls(ntohl(xb));
}
@@ -831,17 +835,18 @@ static inline int ip6_default_np_autolab
@@ -809,17 +813,18 @@ static inline int ip6_default_np_autolab
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
__be32 flowlabel)
{

View File

@ -95,10 +95,19 @@ tplink,tl-wr841-v11)
ubnt,bullet-m|\
ubnt,nano-m|\
ubnt,rocket-m)
ucidef_set_rssimon "wlan0" "200000" "1"
ucidef_set_led_rssi "rssilow" "RSSILOW" "ubnt:red:link1" "wlan0" "1" "100"
ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "ubnt:orange:link2" "wlan0" "26" "100"
ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "ubnt:green:link3" "wlan0" "51" "100"
ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "ubnt:green:link4" "wlan0" "76" "100"
;;
wd,mynet-wifi-rangeextender)
ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth0"
ucidef_set_rssimon "wlan0" "200000" "1"
ucidef_set_led_rssi "rssilow" "RSSILOW" "$boardname:rssi-low" "wlan0" "1" "100"
ucidef_set_led_rssi "rssimedium" "RSSIMED" "$boardname:blue:rssi-med" "wlan0" "33" "100"
ucidef_set_led_rssi "rssihigh" "RSSIMAX" "$boardname:blue:rssi-max" "wlan0" "66" "100"
;;
esac
board_config_flush

View File

@ -23,9 +23,15 @@ ath79_setup_interfaces()
ubnt,rocket-m|\
ubnt,unifiac-lite|\
ubnt,unifiac-mesh|\
ubnt,unifi)
ubnt,unifi|\
wd,mynet-wifi-rangeextender)
ucidef_set_interface_lan "eth0"
;;
buffalo,wzr-hp-ag300h)
ucidef_set_interface_wan "eth1"
ucidef_add_switch "switch0" \
"0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1"
;;
buffalo,wzr-hp-g450h)
ucidef_add_switch "switch0" \
"0@eth0" "2:lan" "3:lan" "4:lan" "5:lan" "1:wan"
@ -39,6 +45,10 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \
"0:lan" "1:lan" "2:lan" "3:lan" "5@eth0"
;;
elecom,wrc-300ghbk2-i)
ucidef_add_switch "switch0" \
"0@eth0" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1" "1:wan"
;;
embeddedwireless,dorin)
ucidef_add_switch "switch0" \
"0@eth0" "1:wan" "2:lan:3" "3:lan:2"
@ -176,6 +186,9 @@ ath79_setup_macs()
lan_mac=$(mtd_get_mac_text "caldata" 65440)
wan_mac=$(mtd_get_mac_text "caldata" 65460)
;;
elecom,wrc-300ghbk2-i)
wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
;;
iodata,etg3-r)
lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
wan_mac=$(macaddr_add "$lan_mac" -1)
@ -207,6 +220,9 @@ ath79_setup_macs()
wan_mac=$(fconfig -s -r -d $(find_mtd_part "RedBoot config") -n ar7100_esa)
lan_mac=$(macaddr_add "$wan_mac" 1)
;;
wd,mynet-wifi-rangeextender)
lan_mac=$(nvram get et0macaddr)
;;
esac
[ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac

View File

@ -145,6 +145,10 @@ case "$FIRMWARE" in
ubnt,unifi)
ath9k_eeprom_extract "art" 4096 2048
;;
wd,mynet-wifi-rangeextender)
ath9k_eeprom_extract "art" 4096 4096
ath9k_patch_fw_mac_crc $(nvram get wl0_hwaddr) "$mac" 2
;;
*)
ath9k_eeprom_die "board $board is not supported yet"
;;
@ -152,15 +156,16 @@ case "$FIRMWARE" in
;;
"ath9k-eeprom-pci-0000:00:11.0.bin")
case $board in
dlink,dir-825-b1)
ath9k_eeprom_extract "caldata" 4096 3768
ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 65440) 524
;;
buffalo,wzr-hp-ag300h|\
netgear,wndr3700|\
netgear,wndr3700v2|\
netgear,wndr3800)
ath9k_eeprom_extract "art" 4096 3768
;;
dlink,dir-825-b1)
ath9k_eeprom_extract "caldata" 4096 3768
ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 65440) 524
;;
*)
ath9k_eeprom_die "board $board is not supported yet"
;;
@ -168,15 +173,16 @@ case "$FIRMWARE" in
;;
"ath9k-eeprom-pci-0000:00:12.0.bin")
case $board in
dlink,dir-825-b1)
ath9k_eeprom_extract "caldata" 20480 3768
ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 65460) 1) 524
;;
buffalo,wzr-hp-ag300h|\
netgear,wndr3700|\
netgear,wndr3700v2|\
netgear,wndr3800)
ath9k_eeprom_extract "art" 20480 3768
;;
dlink,dir-825-b1)
ath9k_eeprom_extract "caldata" 20480 3768
ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 65460) 1) 524
;;
*)
ath9k_eeprom_die "board $board is not supported yet"
;;

View File

@ -163,6 +163,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_M25P80=y
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
CONFIG_MTD_PARSER_CYBERTAN=y
CONFIG_MTD_PHYSMAP=y
CONFIG_MTD_SPI_NOR=y
CONFIG_MTD_SPLIT_FIRMWARE=y
@ -172,6 +173,7 @@ CONFIG_MTD_SPLIT_TPLINK_FW=y
CONFIG_MTD_SPLIT_UIMAGE_FW=y
CONFIG_MTD_SPLIT_WRGG_FW=y
CONFIG_MTD_TPLINK_PARTS=y
CONFIG_MTD_VIRT_CONCAT=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_NEED_PER_CPU_KM=y
CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y
@ -230,4 +232,3 @@ CONFIG_TICK_CPU_ACCOUNTING=y
CONFIG_TINY_SRCU=y
CONFIG_USB_SUPPORT=y
CONFIG_USE_OF=y
CONFIG_MIPS_FPU_EMULATOR=y

View File

@ -0,0 +1,284 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "ar7100.dtsi"
/ {
compatible = "buffalo,wzr-hp-ag300h", "qca,ar7161";
model = "Buffalo WZR-HP-AG300H/WZR-600DHP";
aliases {
led-boot = &diag;
led-failsafe = &diag;
led-upgrade = &diag;
};
chosen {
bootargs = "console=ttyS0,115200";
};
extosc: ref {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-output-names = "ref";
clock-frequency = <40000000>;
};
gpio-leds {
compatible = "gpio-leds";
diag: diag {
label = "buffalo:red:diag";
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
default-state = "off";
};
};
ath9k-leds {
// those leds are indeed attached to the wifi chips
compatible = "gpio-leds";
band2g_a {
label = "buffalo:amber:band2g";
gpios = <&ath9k0 1 GPIO_ACTIVE_LOW>;
default-state = "off";
};
usb {
label = "buffalo:green:usb";
gpios = <&ath9k0 3 GPIO_ACTIVE_LOW>;
default-state = "off";
trigger-sources = <&usb_ochi_port>, <&usb_echi_port>;
linux,default-trigger = "usbport";
};
band2g_g {
label = "buffalo:green:band2g";
gpios = <&ath9k0 5 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "phy0tpt";
};
band5g_g {
label = "buffalo:green:band5g";
gpios = <&ath9k1 1 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "phy1tpt";
};
router {
label = "buffalo:green:router";
gpios = <&ath9k1 3 GPIO_ACTIVE_LOW>;
default-state = "off";
};
movie_engine {
label = "buffalo:blue:movie_engine";
gpios = <&ath9k1 4 GPIO_ACTIVE_LOW>;
default-state = "off";
};
band5g_a {
label = "buffalo:amber:band5g";
gpios = <&ath9k1 5 GPIO_ACTIVE_LOW>;
default-state = "off";
};
};
gpio-keys-polled {
compatible = "gpio-keys-polled";
poll-interval = <20>;
reset {
linux,code = <KEY_RESTART>;
gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
usb {
linux,code = <BTN_2>;
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
aoss {
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
router_auto {
linux,code = <BTN_6>;
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
router_off {
linux,code = <BTN_5>;
gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
movie_engine {
linux,code = <BTN_7>;
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
gpio-export {
compatible = "gpio-export";
gpio_usb_power {
gpio-export,name = "buffalo:power:usb";
gpio-export,output = <1>;
gpios = <&gpio 2 GPIO_ACTIVE_HIGH>;
};
};
flash {
compatible = "mtd-concat";
devices = <&flash0 &flash1>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x0000000 0x0040000>;
read-only;
};
partition@40000 {
label = "u-boot-env";
reg = <0x0040000 0x0010000>;
read-only;
};
art: partition@50000 {
label = "art";
reg = <0x0050000 0x0010000>;
read-only;
};
partition@60000 {
label = "firmware";
reg = <0x0060000 0x1f90000>;
};
partition@1ff0000 {
label = "user_property";
reg = <0x1ff0000 0x0010000>;
read-only;
};
};
};
};
&usb_phy {
status = "okay";
};
&usb1 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
usb_ochi_port: port@1 {
reg = <1>;
#trigger-source-cells = <0>;
};
};
&usb2 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
usb_echi_port: port@1 {
reg = <1>;
#trigger-source-cells = <0>;
};
};
&pcie0 {
status = "okay";
ath9k0: wifi@0,11 {
compatible = "pci168c,0029";
reg = <0x8800 0 0 0 0>;
qca,no-eeprom;
#gpio-cells = <2>;
gpio-controller;
};
ath9k1: wifi@0,12 {
compatible = "pci168c,0029";
reg = <0x9000 0 0 0 0>;
qca,no-eeprom;
#gpio-cells = <2>;
gpio-controller;
};
};
&uart {
status = "okay";
};
&pll {
clocks = <&extosc>;
};
&spi {
status = "okay";
num-cs = <2>;
cs-gpios = <0>, <0>;
flash0: flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <104000000>;
m25p,fast-read;
};
flash1: flash@1 {
compatible = "jedec,spi-nor";
reg = <1>;
spi-max-frequency = <104000000>;
m25p,fast-read;
};
};
&mdio0 {
status = "okay";
phy4: ethernet-phy@4 {
reg = <4>;
phy-mode = "rgmii";
};
};
&eth0 {
status = "okay";
mtd-mac-address = <&art 0x120c>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
&eth1 {
status = "okay";
mtd-mac-address = <&art 0x520c>;
mtd-mac-address-increment = <1>;
phy-handle = <&phy4>;
};

View File

@ -0,0 +1,174 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "ar9344.dtsi"
/ {
model = "Western Digital My Net Wi-Fi Range Extender";
compatible = "wd,mynet-wifi-rangeextender", "qca,ar9344";
chosen {
bootargs = "console=ttyS0,115200n8";
};
aliases {
led-boot = &power;
led-failsafe = &power;
led-running = &power;
led-upgrade = &power;
};
leds {
compatible = "gpio-leds";
power: power {
label = "mynet-wifi-rangeextender:blue:power";
gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
/* LED has no off state. It's either on or it blinks */
};
lan {
label = "mynet-wifi-rangeextender:green:lan";
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
};
wifi {
label = "mynet-wifi-rangeextender:blue:wifi";
gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};
wifi-rssi-low {
label = "mynet-wifi-rangeextender:blue:rssi-low";
gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
};
wifi-rssi-med {
label = "mynet-wifi-rangeextender:blue:rssi-med";
gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
};
wifi-rssi-max {
label = "mynet-wifi-rangeextender:blue:rssi-max";
gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
};
};
keys {
compatible = "gpio-keys-polled";
poll-interval = <50>;
reset {
linux,code = <KEY_RESTART>;
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
band-switch {
linux,code = <BTN_1>;
gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
linux,input-type = <EV_SW>;
debounce-interval = <60>;
};
wps {
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
};
&ref {
clock-frequency = <25000000>;
};
&uart {
status = "okay";
};
&spi {
num-cs = <1>;
status = "okay";
flash@0 {
compatible = /* "s25fl064k", */ "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
uboot: partition@0 {
label = "u-boot";
reg = <0x0 0x040000>;
read-only;
};
partition@40000 {
label = "firmware";
reg = <0x40000 0x7a0000>;
compatible = "cybertan,trx";
};
nvram: partition@7e0000 {
label = "nvram";
reg = <0x7e0000 0x10000>;
};
art: partition@7f0000 {
label = "art";
reg = <0x7f0000 0x10000>;
read-only;
};
};
};
};
&pcie {
status = "okay";
ath9k: wifi@0,0 {
compatible = "pci168c,0030";
reg = <0x0000 0 0 0 0>;
qca,no-eeprom;
/* wifi MAC is stored in nvram */
};
};
&mdio0 {
status = "okay";
phy-mask = <0x10>;
phy4: ethernet-phy@4 {
reg = <4>;
};
};
&eth0 {
status = "okay";
pll-data = <0x0e000000 0x3c000101 0x3c001313>;
/* ethernet MAC is stored in nvram */
phy-mode = "rgmii";
phy-handle = <&phy4>;
gmac-config {
device = <&gmac>;
rgmii-gmac0 = <1>;
rxd-delay = <3>;
rxdv-delay = <3>;
};
};
&mdio1 {
status = "disabled";
};

View File

@ -0,0 +1,160 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "qca956x.dtsi"
/ {
model = "ELECOM WRC-300GHBK2-I";
compatible = "elecom,wrc-300ghbk2-i", "qca,qca9563";
chosen {
bootargs = "console=ttyS0,115200n8";
};
aliases {
led-boot = &power;
led-failsafe = &power;
led-running = &power;
led-upgrade = &power;
};
leds {
compatible = "gpio-leds";
power: power {
label = "wrc-300ghbk2-i:white:power";
gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
wlan2g {
label = "wrc-300ghbk2-i:white:wlan2g";
gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "phy0tpt";
};
wps {
label = "wrc-300ghbk2-i:red:wps";
gpios = <&gpio 9 GPIO_ACTIVE_HIGH>;
default-state = "off";
};
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
debounce-interval = <60>;
};
button_wps {
label = "wps";
gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
debounce-interval = <60>;
};
ap {
label = "ap";
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
linux,code = <BTN_0>;
linux,input-type = <EV_SW>;
debounce-interval = <60>;
};
};
};
&spi {
status = "okay";
num-cs = <1>;
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x000000 0x040000>;
read-only;
};
partition@40000 {
label = "u-boot-env";
reg = <0x040000 0x010000>;
read-only;
};
partition@50000 {
label = "nvram";
reg = <0x050000 0x020000>;
read-only;
};
partition@70000 {
label = "firmware";
reg = <0x070000 0x770000>;
};
partition@7e0000 {
label = "hwconfig";
reg = <0x7e0000 0x010000>;
read-only;
};
ART: partition@7f0000 {
label = "ART";
reg = <0x7f0000 0x010000>;
read-only;
};
};
};
};
&mdio0 {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
phy-mode = "sgmii";
qca,ar8327-initvals = <
0x04 0x00000080 /* PORT0 PAD MODE CTRL */
0x50 0xcf37cf37 /* LED_CTRL0 */
0x54 0x00000000 /* LED_CTRL1 */
0x58 0x00000000 /* LED_CTRL2 */
0x5c 0x03ffff00 /* LED_CTRL3 */
0x7c 0x0000007e /* PORT0_STATUS */
>;
};
};
&eth0 {
status = "okay";
mtd-mac-address = <&ART 0x1002>;
mtd-mac-address-increment = <(-1)>;
phy-mode = "sgmii";
phy-handle = <&phy0>;
};
&uart {
status = "okay";
};
&wmac {
status = "okay";
mtd-cal-data = <&ART 0x1000>;
};

View File

@ -0,0 +1,163 @@
/*
* Copyright (C) 2009 Christian Daniel <cd@maintech.de>
* Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* TRX flash partition table.
* Based on ar7 map by Felix Fietkau <nbd@nbd.name>
*
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/version.h>
struct cybertan_header {
char magic[4];
u8 res1[4];
char fw_date[3];
char fw_ver[3];
char id[4];
char hw_ver;
char unused;
u8 flags[2];
u8 res2[10];
} __packed;
#define TRX_PARTS 3
#define TRX_MAGIC 0x30524448
#define TRX_MAX_OFFSET 3
struct trx_header {
__le32 magic; /* "HDR0" */
__le32 len; /* Length of file including header */
__le32 crc32; /* 32-bit CRC from flag_version to end of file */
__le32 flag_version; /* 0:15 flags, 16:31 version */
__le32 offsets[TRX_MAX_OFFSET]; /* Offsets of partitions from start of header */
} __packed;
#define IH_MAGIC 0x27051956 /* Image Magic Number */
#define IH_NMLEN 32 /* Image Name Length */
struct uimage_header {
__be32 ih_magic; /* Image Header Magic Number */
__be32 ih_hcrc; /* Image Header CRC Checksum */
__be32 ih_time; /* Image Creation Timestamp */
__be32 ih_size; /* Image Data Size */
__be32 ih_load; /* Data» Load Address */
__be32 ih_ep; /* Entry Point Address */
__be32 ih_dcrc; /* Image Data CRC Checksum */
uint8_t ih_os; /* Operating System */
uint8_t ih_arch; /* CPU architecture */
uint8_t ih_type; /* Image Type */
uint8_t ih_comp; /* Compression Type */
uint8_t ih_name[IH_NMLEN]; /* Image Name */
} __packed;
struct firmware_header {
struct cybertan_header cybertan;
struct trx_header trx;
struct uimage_header uimage;
} __packed;
static int cybertan_parse_partitions(struct mtd_info *master,
const struct mtd_partition **pparts,
struct mtd_part_parser_data *data)
{
struct firmware_header header;
struct trx_header *theader;
struct uimage_header *uheader;
struct mtd_partition *trx_parts;
size_t retlen;
unsigned int kernel_len;
int ret;
trx_parts = kcalloc(TRX_PARTS, sizeof(struct mtd_partition),
GFP_KERNEL);
if (!trx_parts) {
ret = -ENOMEM;
goto out;
}
ret = mtd_read(master, 0, sizeof(header),
&retlen, (uint8_t *)&header);
if (ret)
goto free_parts;
if (retlen != sizeof(header)) {
ret = -EIO;
goto free_parts;
}
theader = &header.trx;
if (theader->magic != cpu_to_le32(TRX_MAGIC)) {
printk(KERN_NOTICE "%s: no TRX header found\n", master->name);
goto free_parts;
}
uheader = &header.uimage;
if (uheader->ih_magic != cpu_to_be32(IH_MAGIC)) {
printk(KERN_NOTICE "%s: no uImage found\n", master->name);
goto free_parts;
}
kernel_len = le32_to_cpu(theader->offsets[1]) +
sizeof(struct cybertan_header);
trx_parts[0].name = "header";
trx_parts[0].offset = 0;
trx_parts[0].size = offsetof(struct firmware_header, uimage);
trx_parts[0].mask_flags = 0;
trx_parts[1].name = "kernel";
trx_parts[1].offset = trx_parts[0].offset + trx_parts[0].size;
trx_parts[1].size = kernel_len - trx_parts[0].size;
trx_parts[1].mask_flags = 0;
trx_parts[2].name = "rootfs";
trx_parts[2].offset = trx_parts[1].offset + trx_parts[1].size;
trx_parts[2].size = master->size - trx_parts[1].size - trx_parts[0].size;
trx_parts[2].mask_flags = 0;
*pparts = trx_parts;
return TRX_PARTS;
free_parts:
kfree(trx_parts);
out:
return ret;
}
static const struct of_device_id mtd_parser_cybertan_of_match_table[] = {
{ .compatible = "cybertan,trx" },
{},
};
MODULE_DEVICE_TABLE(of, mtd_parser_cybertan_of_match_table);
static struct mtd_part_parser mtd_parser_cybertan = {
.parse_fn = cybertan_parse_partitions,
.name = "cybertan-trx",
.of_match_table = mtd_parser_cybertan_of_match_table,
};
module_mtd_part_parser(mtd_parser_cybertan);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Christian Daniel <cd@maintech.de>");

View File

@ -0,0 +1,20 @@
define Build/buffalo-tftp-header
( \
echo -n -e "# Airstation Public Fmt1" | dd bs=32 count=1 conv=sync; \
dd if=$@; \
) > $@.new
mv $@.new $@
endef
define Build/buffalo-tag
$(eval product=$(word 1,$(1)))
$(STAGING_DIR_HOST)/bin/buffalo-tag \
-c 0x80041000 -d 0x801e8000 -w 3 \
-a ath -v 1.99 -m 1.01 -f 1 \
-b $(product) -p $(product) \
-r M_ -l mlang8 \
-i $@ -o $@.new
mv $@.new $@
endef

View File

@ -38,7 +38,7 @@ endef
define Device/ubnt-xm
$(Device/ubnt)
DEVICE_PACKAGES += kmod-usb-ohci
DEVICE_PACKAGES += kmod-usb-ohci rssileds
UBNT_TYPE := XM
UBNT_CHIP := ar7240
ATH_SOC := ar7241

View File

@ -1,5 +1,48 @@
include ./common-buffalo.mk
include ./common-netgear.mk
DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION
define Build/cybertan-trx
@echo -n '' > $@-empty.bin
-$(STAGING_DIR_HOST)/bin/trx -o $@.new \
-f $(IMAGE_KERNEL) -F $@-empty.bin \
-x 32 -a 0x10000 -x -32 -f $@
-mv "$@.new" "$@"
-rm $@-empty.bin
endef
define Build/addpattern
-$(STAGING_DIR_HOST)/bin/addpattern -B $(ADDPATTERN_ID) \
-v v$(ADDPATTERN_VERSION) -i $@ -o $@.new
-mv "$@.new" "$@"
endef
define Build/elecom-header
$(eval fw_size=$(word 1,$(1)))
$(eval edimax_model=$(word 2,$(1)))
$(eval product=$(word 3,$(1)))
$(eval factory_bin=$(word 4,$(1)))
if [ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) -a "$$(stat -c%s $@)" -lt "$(fw_size)" ]; then \
$(CP) $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) $(factory_bin); \
$(STAGING_DIR_HOST)/bin/mkedimaximg \
-b -s CSYS -m $(edimax_model) \
-f 0x70000 -S 0x01100000 \
-i $(factory_bin) -o $(factory_bin).new; \
mv $(factory_bin).new $(factory_bin); \
( \
echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \
echo -n "0.00" | dd bs=16 count=1 conv=sync; \
dd if=$(factory_bin); \
) > $(factory_bin).new; \
mv $(factory_bin).new $(factory_bin); \
$(CP) $(factory_bin) $(BIN_DIR)/; \
else \
echo "WARNING: initramfs kernel image too big, cannot generate factory image" >&2; \
fi
endef
define Device/avm_fritz300e
ATH_SOC := ar7242
DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E
@ -26,6 +69,19 @@ define Device/avm_fritz4020
endef
TARGET_DEVICES += avm_fritz4020
define Device/buffalo_wzr-hp-ag300h
ATH_SOC := ar7161
DEVICE_TITLE := Buffalo WZR-HP-AG300H
IMAGE_SIZE := 32256k
IMAGES += factory.bin tftp.bin
IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
IMAGE/factory.bin := $$(IMAGE/default) | buffalo-enc WZR-HP-AG300H 1.99 | buffalo-tag WZR-HP-AG300H
IMAGE/tftp.bin := $$(IMAGE/default) | buffalo-tftp-header
DEVICE_PACKAGES := kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport kmod-leds-reset kmod-owl-loader
SUPPORTED_DEVICES += wzr-hp-ag300h
endef
TARGET_DEVICES += buffalo_wzr-hp-ag300h
define Device/buffalo_wzr-hp-g450h
ATH_SOC := ar7242
DEVICE_TITLE := Buffalo WZR-HP-G450H
@ -45,6 +101,16 @@ define Device/dlink_dir-825-b1
endef
TARGET_DEVICES += dlink_dir-825-b1
define Device/elecom_wrc-300ghbk2-i
ATH_SOC := qca9563
DEVICE_TITLE := ELECOM WRC-300GHBK2-I
IMAGE_SIZE := 7616k
KERNEL_INITRAMFS := $$(KERNEL) | pad-to 2 | \
elecom-header 7798706 RN51 WRC-300GHBK2-I \
$(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.bin
endef
TARGET_DEVICES += elecom_wrc-300ghbk2-i
define Device/embeddedwireless_dorin
ATH_SOC := ar9331
DEVICE_TITLE := Embedded Wireless Dorin
@ -232,3 +298,16 @@ define Device/phicomm_k2t
DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k ath10k-firmware-qca9888
endef
TARGET_DEVICES += phicomm_k2t
define Device/wd_mynet-wifi-rangeextender
ATH_SOC := ar9344
DEVICE_TITLE := Western Digital My Net Wi-Fi Range Extender
DEVICE_PACKAGES := rssileds nvram -swconfig
IMAGE_SIZE := 7808k
ADDPATTERN_ID := mynet-rext
ADDPATTERN_VERSION := 1.00.01
IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | cybertan-trx | \
addpattern | append-metadata
SUPPORTED_DEVICES += mynet-rext
endef
TARGET_DEVICES += wd_mynet-wifi-rangeextender

View File

@ -1,24 +1,7 @@
include ./common-buffalo.mk
DEVICE_VARS += ROOTFS_SIZE
define Build/buffalo-tftp-header
( \
echo -n -e "# Airstation Public Fmt1" | dd bs=32 count=1 conv=sync; \
dd if=$@; \
) > $@.new
mv $@.new $@
endef
define Build/buffalo-tag
$(eval product=$(word 1,$(1)))
$(STAGING_DIR_HOST)/bin/buffalo-tag \
-c 0x80041000 -d 0x801e8000 -w 3 \
-a ath -v 1.99 -m 1.01 -f 1 \
-b $(product) -p $(product) \
-r M_ -l mlang8 \
-i $@ -o $@.new
mv $@.new $@
endef
define Device/buffalo_bhr-4grv2
ATH_SOC := qca9558
DEVICE_TITLE := Buffalo BHR-4GRV2

View File

@ -0,0 +1,19 @@
--- a/drivers/mtd/parsers/Makefile
+++ b/drivers/mtd/parsers/Makefile
@@ -1 +1,2 @@
+obj-$(CONFIG_MTD_PARSER_CYBERTAN) += parser_cybertan.o
obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o
--- a/drivers/mtd/parsers/Kconfig
+++ b/drivers/mtd/parsers/Kconfig
@@ -1,3 +1,11 @@
+config MTD_PARSER_CYBERTAN
+ tristate "Parser for Cybertan format partitions"
+ depends on MTD && (ATH79 || COMPILE_TEST)
+ help
+ Cybertan has a proprietory header than encompasses a Broadcom trx
+ header. This driver will parse the header and take care of the
+ special offsets that result in the extra headers.
+
config MTD_PARSER_TRX
tristate "Parser for TRX format partitions"
depends on MTD && (BCM47XX || ARCH_BCM_5301X || COMPILE_TEST)

View File

@ -610,7 +610,7 @@
#define IP6_MF 0x0001
#define IP6_OFFSET 0xFFF8
@@ -444,8 +444,8 @@ static inline void __ipv6_addr_set_half(
@@ -437,8 +437,8 @@ static inline void __ipv6_addr_set_half(
}
#endif
#endif
@ -621,7 +621,7 @@
}
static inline void ipv6_addr_set(struct in6_addr *addr,
@@ -504,6 +504,8 @@ static inline bool ipv6_prefix_equal(con
@@ -497,6 +497,8 @@ static inline bool ipv6_prefix_equal(con
const __be32 *a1 = addr1->s6_addr32;
const __be32 *a2 = addr2->s6_addr32;
unsigned int pdw, pbi;
@ -630,7 +630,7 @@
/* check complete u32 in prefix */
pdw = prefixlen >> 5;
@@ -512,7 +514,9 @@ static inline bool ipv6_prefix_equal(con
@@ -505,7 +507,9 @@ static inline bool ipv6_prefix_equal(con
/* check incomplete u32 in prefix */
pbi = prefixlen & 0x1f;
@ -641,7 +641,7 @@
return false;
return true;
@@ -656,13 +660,13 @@ static inline void ipv6_addr_set_v4mappe
@@ -634,13 +638,13 @@ static inline void ipv6_addr_set_v4mappe
*/
static inline int __ipv6_addr_diff32(const void *token1, const void *token2, int addrlen)
{
@ -657,7 +657,7 @@
if (xb)
return i * 32 + 31 - __fls(ntohl(xb));
}
@@ -831,17 +835,18 @@ static inline int ip6_default_np_autolab
@@ -809,17 +813,18 @@ static inline int ip6_default_np_autolab
static inline void ip6_flow_hdr(struct ipv6hdr *hdr, unsigned int tclass,
__be32 flowlabel)
{

View File

@ -10,7 +10,7 @@ Signed-off-by: Ryan Coe <bluemrp9@gmail.com>
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -1675,6 +1675,14 @@ static int ds1307_remove(struct i2c_clie
@@ -1682,6 +1682,14 @@ static int ds1307_remove(struct i2c_clie
return 0;
}

View File

@ -396,7 +396,7 @@
if (dc_lsize == 0)
r4k_blast_dcache = (void *)cache_noop;
else if (dc_lsize == 16)
@@ -955,6 +967,8 @@ static void local_r4k_flush_cache_sigtra
@@ -957,6 +969,8 @@ static void local_r4k_flush_cache_sigtra
}
R4600_HIT_CACHEOP_WAR_IMPL;
@ -405,7 +405,7 @@
if (!cpu_has_ic_fills_f_dc) {
if (dc_lsize)
vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
@@ -1849,6 +1863,17 @@ static void coherency_setup(void)
@@ -1851,6 +1865,17 @@ static void coherency_setup(void)
* silly idea of putting something else there ...
*/
switch (current_cpu_type()) {
@ -423,7 +423,7 @@
case CPU_R4000PC:
case CPU_R4000SC:
case CPU_R4000MC:
@@ -1895,6 +1920,15 @@ void r4k_cache_init(void)
@@ -1897,6 +1922,15 @@ void r4k_cache_init(void)
extern void build_copy_page(void);
struct cpuinfo_mips *c = &current_cpu_data;
@ -439,7 +439,7 @@
probe_pcache();
probe_vcache();
setup_scache();
@@ -1972,7 +2006,15 @@ void r4k_cache_init(void)
@@ -1974,7 +2008,15 @@ void r4k_cache_init(void)
*/
local_r4k___flush_cache_all(NULL);

View File

@ -1,76 +0,0 @@
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
Date: Fri, 27 Jul 2018 12:39:01 +0200
Subject: [PATCH] Revert "MIPS: BCM47XX: Enable 74K Core ExternalSync for PCIe
erratum"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 2a027b47dba6b77ab8c8e47b589ae9bbc5ac6175.
Enabling ExternalSync caused a regression for BCM4718A1 (used e.g. in
Netgear E3000 and ASUS RT-N16): it simply hangs during PCIe
initialization. It's likely that BCM4717A1 is also affected.
I didn't notice that earlier as the only BCM47XX devices with PCIe I
own are:
1) BCM4706 with 2 x 14e4:4331
2) BCM4706 with 14e4:4360 and 14e4:4331
it appears that BCM4706 is unaffected.
While BCM5300X-ES300-RDS.pdf seems to document that erratum and its
workarounds (according to quotes provided by Tokunori) it seems not even
Broadcom follows them.
According to the provided info Broadcom should define CONF7_ES in their
SDK's mipsinc.h and implement workaround in the si_mips_init(). Checking
both didn't reveal such code. It *could* mean Broadcom also had some
problems with the given workaround.
Reported-by: Michael Marley <michael@michaelmarley.com>
Cc: Tokunori Ikegami <ikegami@allied-telesis.co.jp>
Cc: Paul Burton <paul.burton@mips.com>
Cc: Hauke Mehrtens <hauke@hauke-m.de>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: stable@vger.kernel.org
Cc: James Hogan <jhogan@kernel.org>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
arch/mips/bcm47xx/setup.c | 6 ------
arch/mips/include/asm/mipsregs.h | 3 ---
2 files changed, 9 deletions(-)
--- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c
@@ -212,12 +212,6 @@ static int __init bcm47xx_cpu_fixes(void
*/
if (bcm47xx_bus.bcma.bus.chipinfo.id == BCMA_CHIP_ID_BCM4706)
cpu_wait = NULL;
-
- /*
- * BCM47XX Erratum "R10: PCIe Transactions Periodically Fail"
- * Enable ExternalSync for sync instruction to take effect
- */
- set_c0_config7(MIPS_CONF7_ES);
break;
#endif
}
--- a/arch/mips/include/asm/mipsregs.h
+++ b/arch/mips/include/asm/mipsregs.h
@@ -680,8 +680,6 @@
#define MIPS_CONF7_WII (_ULCAST_(1) << 31)
#define MIPS_CONF7_RPS (_ULCAST_(1) << 2)
-/* ExternalSync */
-#define MIPS_CONF7_ES (_ULCAST_(1) << 8)
#define MIPS_CONF7_IAR (_ULCAST_(1) << 10)
#define MIPS_CONF7_AR (_ULCAST_(1) << 16)
@@ -2747,7 +2745,6 @@ __BUILD_SET_C0(status)
__BUILD_SET_C0(cause)
__BUILD_SET_C0(config)
__BUILD_SET_C0(config5)
-__BUILD_SET_C0(config7)
__BUILD_SET_C0(intcontrol)
__BUILD_SET_C0(intctl)
__BUILD_SET_C0(srsmap)

View File

@ -396,7 +396,7 @@
if (dc_lsize == 0)
r4k_blast_dcache = (void *)cache_noop;
else if (dc_lsize == 16)
@@ -955,6 +967,8 @@ static void local_r4k_flush_cache_sigtra
@@ -957,6 +969,8 @@ static void local_r4k_flush_cache_sigtra
}
R4600_HIT_CACHEOP_WAR_IMPL;
@ -405,7 +405,7 @@
if (!cpu_has_ic_fills_f_dc) {
if (dc_lsize)
vaddr ? flush_dcache_line(addr & ~(dc_lsize - 1))
@@ -1843,6 +1857,17 @@ static void coherency_setup(void)
@@ -1845,6 +1859,17 @@ static void coherency_setup(void)
* silly idea of putting something else there ...
*/
switch (current_cpu_type()) {
@ -423,7 +423,7 @@
case CPU_R4000PC:
case CPU_R4000SC:
case CPU_R4000MC:
@@ -1889,6 +1914,15 @@ void r4k_cache_init(void)
@@ -1891,6 +1916,15 @@ void r4k_cache_init(void)
extern void build_copy_page(void);
struct cpuinfo_mips *c = &current_cpu_data;
@ -439,7 +439,7 @@
probe_pcache();
probe_vcache();
setup_scache();
@@ -1966,7 +2000,15 @@ void r4k_cache_init(void)
@@ -1968,7 +2002,15 @@ void r4k_cache_init(void)
*/
local_r4k___flush_cache_all(NULL);

View File

@ -8,7 +8,7 @@
#include <asm/bootinfo.h>
#include <asm/idle.h>
#include <asm/prom.h>
@@ -231,6 +232,33 @@ static struct fixed_phy_status bcm47xx_f
@@ -225,6 +226,33 @@ static struct fixed_phy_status bcm47xx_f
.duplex = DUPLEX_FULL,
};
@ -42,7 +42,7 @@
static int __init bcm47xx_register_bus_complete(void)
{
switch (bcm47xx_bus_type) {
@@ -250,6 +278,7 @@ static int __init bcm47xx_register_bus_c
@@ -244,6 +272,7 @@ static int __init bcm47xx_register_bus_c
bcm47xx_workarounds();
fixed_phy_add(PHY_POLL, 0, &bcm47xx_fixed_phy_status, -1);

View File

@ -228,7 +228,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
err1:
nf_tables_chain_destroy(chain);
@@ -1478,14 +1469,13 @@ static int nf_tables_updchain(struct nft
@@ -1478,13 +1469,12 @@ static int nf_tables_updchain(struct nft
const struct nlattr * const *nla = ctx->nla;
struct nft_table *table = ctx->table;
struct nft_chain *chain = ctx->chain;
@ -236,7 +236,6 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_base_chain *basechain;
struct nft_stats *stats = NULL;
struct nft_chain_hook hook;
const struct nlattr *name;
struct nf_hook_ops *ops;
struct nft_trans *trans;
- int err, i;
@ -244,7 +243,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (nla[NFTA_CHAIN_HOOK]) {
if (!nft_is_base_chain(chain))
@@ -1502,14 +1492,12 @@ static int nf_tables_updchain(struct nft
@@ -1501,14 +1491,12 @@ static int nf_tables_updchain(struct nft
return -EBUSY;
}
@ -265,7 +264,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
nft_chain_release_hook(&hook);
}
@@ -5113,10 +5101,9 @@ static int nf_tables_commit(struct net *
@@ -5134,10 +5122,9 @@ static int nf_tables_commit(struct net *
case NFT_MSG_DELCHAIN:
list_del_rcu(&trans->ctx.chain->list);
nf_tables_chain_notify(&trans->ctx, NFT_MSG_DELCHAIN);
@ -279,7 +278,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
break;
case NFT_MSG_NEWRULE:
nft_clear(trans->ctx.net, nft_trans_rule(trans));
@@ -5253,10 +5240,9 @@ static int nf_tables_abort(struct net *n
@@ -5274,10 +5261,9 @@ static int nf_tables_abort(struct net *n
} else {
trans->ctx.table->use--;
list_del_rcu(&trans->ctx.chain->list);
@ -293,7 +292,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
break;
case NFT_MSG_DELCHAIN:
@@ -5359,7 +5345,7 @@ int nft_chain_validate_hooks(const struc
@@ -5380,7 +5366,7 @@ int nft_chain_validate_hooks(const struc
if (nft_is_base_chain(chain)) {
basechain = nft_base_chain(chain);
@ -302,7 +301,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return 0;
return -EOPNOTSUPP;
@@ -5841,8 +5827,7 @@ int __nft_release_basechain(struct nft_c
@@ -5862,8 +5848,7 @@ int __nft_release_basechain(struct nft_c
BUG_ON(!nft_is_base_chain(ctx->chain));
@ -312,7 +311,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry_safe(rule, nr, &ctx->chain->rules, list) {
list_del(&rule->list);
ctx->chain->use--;
@@ -5871,8 +5856,7 @@ static void __nft_release_afinfo(struct
@@ -5892,8 +5877,7 @@ static void __nft_release_afinfo(struct
list_for_each_entry_safe(table, nt, &afi->tables, list) {
list_for_each_entry(chain, &table->chains, list)

View File

@ -90,7 +90,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
expired_count++;
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -1105,6 +1105,14 @@ static const struct nla_policy ct_nla_po
@@ -1120,6 +1120,14 @@ static const struct nla_policy ct_nla_po
.len = NF_CT_LABELS_MAX_SIZE },
};
@ -105,7 +105,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static int ctnetlink_flush_conntrack(struct net *net,
const struct nlattr * const cda[],
u32 portid, int report)
@@ -1117,7 +1125,7 @@ static int ctnetlink_flush_conntrack(str
@@ -1132,7 +1140,7 @@ static int ctnetlink_flush_conntrack(str
return PTR_ERR(filter);
}
@ -114,7 +114,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
portid, report);
kfree(filter);
@@ -1163,6 +1171,11 @@ static int ctnetlink_del_conntrack(struc
@@ -1178,6 +1186,11 @@ static int ctnetlink_del_conntrack(struc
ct = nf_ct_tuplehash_to_ctrack(h);

View File

@ -292,7 +292,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry_safe(obj, ne, &ctx->table->objects, list) {
err = nft_delobj(ctx, obj);
if (err < 0)
@@ -4818,6 +4862,605 @@ static void nf_tables_obj_notify(const s
@@ -4834,6 +4878,605 @@ static void nf_tables_obj_notify(const s
ctx->afi->family, ctx->report, GFP_KERNEL);
}
@ -898,7 +898,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static int nf_tables_fill_gen_info(struct sk_buff *skb, struct net *net,
u32 portid, u32 seq)
{
@@ -4848,6 +5491,49 @@ nla_put_failure:
@@ -4864,6 +5507,49 @@ nla_put_failure:
return -EMSGSIZE;
}
@ -948,7 +948,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static void nf_tables_gen_notify(struct net *net, struct sk_buff *skb,
int event)
{
@@ -5000,6 +5686,21 @@ static const struct nfnl_callback nf_tab
@@ -5016,6 +5702,21 @@ static const struct nfnl_callback nf_tab
.attr_count = NFTA_OBJ_MAX,
.policy = nft_obj_policy,
},
@ -970,7 +970,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
static void nft_chain_commit_update(struct nft_trans *trans)
@@ -5045,6 +5746,9 @@ static void nf_tables_commit_release(str
@@ -5064,6 +5765,9 @@ static void nf_tables_commit_release(str
case NFT_MSG_DELOBJ:
nft_obj_destroy(nft_trans_obj(trans));
break;
@ -980,7 +980,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
kfree(trans);
}
@@ -5162,6 +5866,21 @@ static int nf_tables_commit(struct net *
@@ -5183,6 +5887,21 @@ static int nf_tables_commit(struct net *
nf_tables_obj_notify(&trans->ctx, nft_trans_obj(trans),
NFT_MSG_DELOBJ);
break;
@ -1002,7 +1002,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
@@ -5199,6 +5918,9 @@ static void nf_tables_abort_release(stru
@@ -5220,6 +5939,9 @@ static void nf_tables_abort_release(stru
case NFT_MSG_NEWOBJ:
nft_obj_destroy(nft_trans_obj(trans));
break;
@ -1012,7 +1012,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
kfree(trans);
}
@@ -5290,6 +6012,17 @@ static int nf_tables_abort(struct net *n
@@ -5311,6 +6033,17 @@ static int nf_tables_abort(struct net *n
nft_clear(trans->ctx.net, nft_trans_obj(trans));
nft_trans_destroy(trans);
break;
@ -1030,7 +1030,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
@@ -5840,6 +6573,7 @@ EXPORT_SYMBOL_GPL(__nft_release_basechai
@@ -5861,6 +6594,7 @@ EXPORT_SYMBOL_GPL(__nft_release_basechai
/* Called by nft_unregister_afinfo() from __net_exit path, nfnl_lock is held. */
static void __nft_release_afinfo(struct net *net, struct nft_af_info *afi)
{
@ -1038,7 +1038,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table, *nt;
struct nft_chain *chain, *nc;
struct nft_object *obj, *ne;
@@ -5853,6 +6587,9 @@ static void __nft_release_afinfo(struct
@@ -5874,6 +6608,9 @@ static void __nft_release_afinfo(struct
list_for_each_entry_safe(table, nt, &afi->tables, list) {
list_for_each_entry(chain, &table->chains, list)
nf_tables_unregister_hook(net, table, chain);
@ -1048,7 +1048,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
/* No packets are walking on these chains anymore. */
ctx.table = table;
list_for_each_entry(chain, &table->chains, list) {
@@ -5863,6 +6600,11 @@ static void __nft_release_afinfo(struct
@@ -5884,6 +6621,11 @@ static void __nft_release_afinfo(struct
nf_tables_rule_release(&ctx, rule);
}
}
@ -1060,7 +1060,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry_safe(set, ns, &table->sets, list) {
list_del(&set->list);
table->use--;
@@ -5906,6 +6648,8 @@ static int __init nf_tables_module_init(
@@ -5927,6 +6669,8 @@ static int __init nf_tables_module_init(
if (err < 0)
goto err3;
@ -1069,7 +1069,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
pr_info("nf_tables: (c) 2007-2009 Patrick McHardy <kaber@trash.net>\n");
return register_pernet_subsys(&nf_tables_net_ops);
err3:
@@ -5920,6 +6664,7 @@ static void __exit nf_tables_module_exit
@@ -5941,6 +6685,7 @@ static void __exit nf_tables_module_exit
{
unregister_pernet_subsys(&nf_tables_net_ops);
nfnetlink_subsys_unregister(&nf_tables_subsys);

View File

@ -15,7 +15,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -911,6 +911,8 @@ static inline struct sk_buff *ip6_finish
@@ -889,6 +889,8 @@ static inline struct sk_buff *ip6_finish
&inet6_sk(sk)->cork);
}

View File

@ -82,7 +82,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
hook->priority = ntohl(nla_get_be32(ha[NFTA_HOOK_PRIORITY]));
type = chain_type[afi->family][NFT_CHAIN_T_DEFAULT];
@@ -4970,7 +4967,7 @@ static int nf_tables_flowtable_parse_hoo
@@ -4986,7 +4983,7 @@ static int nf_tables_flowtable_parse_hoo
return -EINVAL;
hooknum = ntohl(nla_get_be32(tb[NFTA_FLOWTABLE_HOOK_NUM]));

View File

@ -11,7 +11,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5394,7 +5394,7 @@ static int nf_tables_getflowtable(struct
@@ -5410,7 +5410,7 @@ static int nf_tables_getflowtable(struct
flowtable = nf_tables_flowtable_lookup(table, nla[NFTA_FLOWTABLE_NAME],
genmask);

View File

@ -62,7 +62,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (ret >= 0) {
ctx->table->flags &= ~NFT_TABLE_F_DORMANT;
nft_trans_table_enable(trans) = true;
@@ -5772,7 +5765,6 @@ static int nf_tables_commit(struct net *
@@ -5791,7 +5784,6 @@ static int nf_tables_commit(struct net *
if (nft_trans_table_update(trans)) {
if (!nft_trans_table_enable(trans)) {
nf_tables_table_disable(net,
@ -70,7 +70,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
trans->ctx.table);
trans->ctx.table->flags |= NFT_TABLE_F_DORMANT;
}
@@ -5934,7 +5926,6 @@ static int nf_tables_abort(struct net *n
@@ -5955,7 +5947,6 @@ static int nf_tables_abort(struct net *n
if (nft_trans_table_update(trans)) {
if (nft_trans_table_enable(trans)) {
nf_tables_table_disable(net,

View File

@ -15,7 +15,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5313,8 +5313,10 @@ static int nf_tables_dump_flowtable_done
@@ -5329,8 +5329,10 @@ static int nf_tables_dump_flowtable_done
if (!filter)
return 0;

View File

@ -467,7 +467,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (err < 0)
return err;
@@ -1509,7 +1504,7 @@ static int nf_tables_updchain(struct nft
@@ -1508,7 +1503,7 @@ static int nf_tables_updchain(struct nft
if (!nft_is_base_chain(chain))
return -EBUSY;
@ -476,7 +476,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
create);
if (err < 0)
return err;
@@ -1602,7 +1597,8 @@ static int nf_tables_newchain(struct net
@@ -1618,7 +1613,8 @@ static int nf_tables_newchain(struct net
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -486,7 +486,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1642,7 +1638,7 @@ static int nf_tables_newchain(struct net
@@ -1658,7 +1654,7 @@ static int nf_tables_newchain(struct net
}
}
@ -495,7 +495,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (chain != NULL) {
if (nlh->nlmsg_flags & NLM_F_EXCL)
@@ -1676,7 +1672,8 @@ static int nf_tables_delchain(struct net
@@ -1692,7 +1688,8 @@ static int nf_tables_delchain(struct net
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -505,7 +505,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1688,7 +1685,7 @@ static int nf_tables_delchain(struct net
@@ -1704,7 +1701,7 @@ static int nf_tables_delchain(struct net
chain->use > 0)
return -EBUSY;
@ -514,7 +514,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
use = chain->use;
list_for_each_entry(rule, &chain->rules, list) {
@@ -1853,7 +1850,7 @@ static int nf_tables_expr_parse(const st
@@ -1869,7 +1866,7 @@ static int nf_tables_expr_parse(const st
if (err < 0)
return err;
@ -523,7 +523,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(type))
return PTR_ERR(type);
@@ -2077,7 +2074,7 @@ static void nf_tables_rule_notify(const
@@ -2093,7 +2090,7 @@ static void nf_tables_rule_notify(const
goto err;
err = nf_tables_fill_rule_info(skb, ctx->net, ctx->portid, ctx->seq,
@ -532,7 +532,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
ctx->chain, rule);
if (err < 0) {
kfree_skb(skb);
@@ -2101,7 +2098,6 @@ static int nf_tables_dump_rules(struct s
@@ -2117,7 +2114,6 @@ static int nf_tables_dump_rules(struct s
{
const struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh);
const struct nft_rule_dump_ctx *ctx = cb->data;
@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
const struct nft_table *table;
const struct nft_chain *chain;
const struct nft_rule *rule;
@@ -2112,39 +2108,37 @@ static int nf_tables_dump_rules(struct s
@@ -2128,39 +2124,37 @@ static int nf_tables_dump_rules(struct s
rcu_read_lock();
cb->seq = net->nft.base_seq;
@ -605,7 +605,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
}
@@ -2222,7 +2216,8 @@ static int nf_tables_getrule(struct net
@@ -2238,7 +2232,8 @@ static int nf_tables_getrule(struct net
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -615,7 +615,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2306,7 +2301,8 @@ static int nf_tables_newrule(struct net
@@ -2322,7 +2317,8 @@ static int nf_tables_newrule(struct net
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -625,7 +625,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2345,7 +2341,7 @@ static int nf_tables_newrule(struct net
@@ -2361,7 +2357,7 @@ static int nf_tables_newrule(struct net
return PTR_ERR(old_rule);
}
@ -634,7 +634,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
n = 0;
size = 0;
@@ -2485,7 +2481,8 @@ static int nf_tables_delrule(struct net
@@ -2501,7 +2497,8 @@ static int nf_tables_delrule(struct net
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -644,7 +644,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2496,7 +2493,7 @@ static int nf_tables_delrule(struct net
@@ -2512,7 +2509,7 @@ static int nf_tables_delrule(struct net
return PTR_ERR(chain);
}
@ -653,7 +653,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (chain) {
if (nla[NFTA_RULE_HANDLE]) {
@@ -2694,13 +2691,13 @@ static int nft_ctx_init_from_setattr(str
@@ -2710,13 +2707,13 @@ static int nft_ctx_init_from_setattr(str
if (afi == NULL)
return -EAFNOSUPPORT;
@ -670,7 +670,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return 0;
}
@@ -2828,7 +2825,7 @@ static int nf_tables_fill_set(struct sk_
@@ -2844,7 +2841,7 @@ static int nf_tables_fill_set(struct sk_
goto nla_put_failure;
nfmsg = nlmsg_data(nlh);
@ -679,7 +679,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(ctx->net->nft.base_seq & 0xffff);
@@ -2920,10 +2917,8 @@ static int nf_tables_dump_sets(struct sk
@@ -2936,10 +2933,8 @@ static int nf_tables_dump_sets(struct sk
{
const struct nft_set *set;
unsigned int idx, s_idx = cb->args[0];
@ -690,7 +690,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_ctx *ctx = cb->data, ctx_set;
if (cb->args[1])
@@ -2932,51 +2927,44 @@ static int nf_tables_dump_sets(struct sk
@@ -2948,51 +2943,44 @@ static int nf_tables_dump_sets(struct sk
rcu_read_lock();
cb->seq = net->nft.base_seq;
@ -771,7 +771,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
cb->args[1] = 1;
done:
@@ -3186,11 +3174,12 @@ static int nf_tables_newset(struct net *
@@ -3202,11 +3190,12 @@ static int nf_tables_newset(struct net *
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -786,7 +786,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
set = nf_tables_set_lookup(table, nla[NFTA_SET_NAME], genmask);
if (IS_ERR(set)) {
@@ -3459,12 +3448,12 @@ static int nft_ctx_init_from_elemattr(st
@@ -3475,12 +3464,12 @@ static int nft_ctx_init_from_elemattr(st
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -802,7 +802,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return 0;
}
@@ -3569,7 +3558,6 @@ static int nf_tables_dump_set(struct sk_
@@ -3585,7 +3574,6 @@ static int nf_tables_dump_set(struct sk_
{
struct nft_set_dump_ctx *dump_ctx = cb->data;
struct net *net = sock_net(skb->sk);
@ -810,7 +810,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_set *set;
struct nft_set_dump_args args;
@@ -3581,21 +3569,19 @@ static int nf_tables_dump_set(struct sk_
@@ -3597,21 +3585,19 @@ static int nf_tables_dump_set(struct sk_
int event;
rcu_read_lock();
@ -841,7 +841,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
break;
}
@@ -3615,7 +3601,7 @@ static int nf_tables_dump_set(struct sk_
@@ -3631,7 +3617,7 @@ static int nf_tables_dump_set(struct sk_
goto nla_put_failure;
nfmsg = nlmsg_data(nlh);
@ -850,7 +850,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(net->nft.base_seq & 0xffff);
@@ -3717,7 +3703,7 @@ static int nf_tables_fill_setelem_info(s
@@ -3733,7 +3719,7 @@ static int nf_tables_fill_setelem_info(s
goto nla_put_failure;
nfmsg = nlmsg_data(nlh);
@ -859,7 +859,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(ctx->net->nft.base_seq & 0xffff);
@@ -3961,7 +3947,7 @@ static int nft_add_set_elem(struct nft_c
@@ -3977,7 +3963,7 @@ static int nft_add_set_elem(struct nft_c
list_for_each_entry(binding, &set->bindings, list) {
struct nft_ctx bind_ctx = {
.net = ctx->net,
@ -868,7 +868,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
.table = ctx->table,
.chain = (struct nft_chain *)binding->chain,
};
@@ -4510,7 +4496,8 @@ static int nf_tables_newobj(struct net *
@@ -4526,7 +4512,8 @@ static int nf_tables_newobj(struct net *
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -878,7 +878,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4528,7 +4515,7 @@ static int nf_tables_newobj(struct net *
@@ -4544,7 +4531,7 @@ static int nf_tables_newobj(struct net *
return 0;
}
@ -887,7 +887,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
type = nft_obj_type_get(objtype);
if (IS_ERR(type))
@@ -4605,7 +4592,6 @@ struct nft_obj_filter {
@@ -4621,7 +4608,6 @@ struct nft_obj_filter {
static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
{
const struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh);
@ -895,7 +895,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
const struct nft_table *table;
unsigned int idx = 0, s_idx = cb->args[0];
struct nft_obj_filter *filter = cb->data;
@@ -4620,38 +4606,37 @@ static int nf_tables_dump_obj(struct sk_
@@ -4636,38 +4622,37 @@ static int nf_tables_dump_obj(struct sk_
rcu_read_lock();
cb->seq = net->nft.base_seq;
@ -960,7 +960,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
done:
@@ -4738,7 +4723,8 @@ static int nf_tables_getobj(struct net *
@@ -4754,7 +4739,8 @@ static int nf_tables_getobj(struct net *
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -970,7 +970,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4798,7 +4784,8 @@ static int nf_tables_delobj(struct net *
@@ -4814,7 +4800,8 @@ static int nf_tables_delobj(struct net *
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -980,7 +980,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4809,7 +4796,7 @@ static int nf_tables_delobj(struct net *
@@ -4825,7 +4812,7 @@ static int nf_tables_delobj(struct net *
if (obj->use > 0)
return -EBUSY;
@ -989,7 +989,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return nft_delobj(&ctx, obj);
}
@@ -4847,7 +4834,7 @@ static void nf_tables_obj_notify(const s
@@ -4863,7 +4850,7 @@ static void nf_tables_obj_notify(const s
struct nft_object *obj, int event)
{
nft_obj_notify(ctx->net, ctx->table, obj, ctx->portid, ctx->seq, event,
@ -998,7 +998,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
/*
@@ -5037,7 +5024,7 @@ void nft_flow_table_iterate(struct net *
@@ -5053,7 +5040,7 @@ void nft_flow_table_iterate(struct net *
rcu_read_lock();
list_for_each_entry_rcu(afi, &net->nft.af_info, list) {
@ -1007,7 +1007,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry_rcu(flowtable, &table->flowtables, list) {
iter(&flowtable->data, data);
}
@@ -5085,7 +5072,8 @@ static int nf_tables_newflowtable(struct
@@ -5101,7 +5088,8 @@ static int nf_tables_newflowtable(struct
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -1017,7 +1017,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -5102,7 +5090,7 @@ static int nf_tables_newflowtable(struct
@@ -5118,7 +5106,7 @@ static int nf_tables_newflowtable(struct
return 0;
}
@ -1026,7 +1026,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL);
if (!flowtable)
@@ -5183,7 +5171,8 @@ static int nf_tables_delflowtable(struct
@@ -5199,7 +5187,8 @@ static int nf_tables_delflowtable(struct
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -1036,7 +1036,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -5194,7 +5183,7 @@ static int nf_tables_delflowtable(struct
@@ -5210,7 +5199,7 @@ static int nf_tables_delflowtable(struct
if (flowtable->use > 0)
return -EBUSY;
@ -1045,7 +1045,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return nft_delflowtable(&ctx, flowtable);
}
@@ -5263,40 +5252,37 @@ static int nf_tables_dump_flowtable(stru
@@ -5279,40 +5268,37 @@ static int nf_tables_dump_flowtable(stru
struct net *net = sock_net(skb->sk);
int family = nfmsg->nfgen_family;
struct nft_flowtable *flowtable;
@ -1107,7 +1107,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
done:
@@ -5381,7 +5367,8 @@ static int nf_tables_getflowtable(struct
@@ -5397,7 +5383,8 @@ static int nf_tables_getflowtable(struct
if (IS_ERR(afi))
return PTR_ERR(afi);
@ -1117,7 +1117,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -5424,7 +5411,7 @@ static void nf_tables_flowtable_notify(s
@@ -5440,7 +5427,7 @@ static void nf_tables_flowtable_notify(s
err = nf_tables_fill_flowtable_info(skb, ctx->net, ctx->portid,
ctx->seq, event, 0,
@ -1126,7 +1126,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (err < 0) {
kfree_skb(skb);
goto err;
@@ -5502,17 +5489,14 @@ static int nf_tables_flowtable_event(str
@@ -5518,17 +5505,14 @@ static int nf_tables_flowtable_event(str
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
struct nft_flowtable *flowtable;
struct nft_table *table;
@ -1147,7 +1147,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
nfnl_unlock(NFNL_SUBSYS_NFTABLES);
@@ -6533,6 +6517,7 @@ EXPORT_SYMBOL_GPL(nft_data_dump);
@@ -6554,6 +6538,7 @@ EXPORT_SYMBOL_GPL(nft_data_dump);
static int __net_init nf_tables_init_net(struct net *net)
{
INIT_LIST_HEAD(&net->nft.af_info);
@ -1155,7 +1155,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
INIT_LIST_HEAD(&net->nft.commit_list);
net->nft.base_seq = 1;
return 0;
@@ -6569,10 +6554,10 @@ static void __nft_release_afinfo(struct
@@ -6590,10 +6575,10 @@ static void __nft_release_afinfo(struct
struct nft_set *set, *ns;
struct nft_ctx ctx = {
.net = net,

View File

@ -21,7 +21,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static struct pernet_operations clusterip_net_ops = {
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -6523,6 +6523,12 @@ static int __net_init nf_tables_init_net
@@ -6544,6 +6544,12 @@ static int __net_init nf_tables_init_net
return 0;
}
@ -34,7 +34,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
int __nft_release_basechain(struct nft_ctx *ctx)
{
struct nft_rule *rule, *nr;
@@ -6600,6 +6606,7 @@ static void __nft_release_afinfo(struct
@@ -6621,6 +6627,7 @@ static void __nft_release_afinfo(struct
static struct pernet_operations nf_tables_net_ops = {
.init = nf_tables_init_net,

View File

@ -364,7 +364,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (afi->family == family)
return afi;
}
@@ -5019,15 +5017,12 @@ void nft_flow_table_iterate(struct net *
@@ -5035,15 +5033,12 @@ void nft_flow_table_iterate(struct net *
void *data)
{
struct nft_flowtable *flowtable;
@ -383,7 +383,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
}
}
rcu_read_unlock();
@@ -6514,21 +6509,6 @@ int nft_data_dump(struct sk_buff *skb, i
@@ -6535,21 +6530,6 @@ int nft_data_dump(struct sk_buff *skb, i
}
EXPORT_SYMBOL_GPL(nft_data_dump);
@ -405,7 +405,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
int __nft_release_basechain(struct nft_ctx *ctx)
{
struct nft_rule *rule, *nr;
@@ -6549,8 +6529,7 @@ int __nft_release_basechain(struct nft_c
@@ -6570,8 +6550,7 @@ int __nft_release_basechain(struct nft_c
}
EXPORT_SYMBOL_GPL(__nft_release_basechain);
@ -415,7 +415,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
{
struct nft_flowtable *flowtable, *nf;
struct nft_table *table, *nt;
@@ -6560,10 +6539,11 @@ static void __nft_release_afinfo(struct
@@ -6581,10 +6560,11 @@ static void __nft_release_afinfo(struct
struct nft_set *set, *ns;
struct nft_ctx ctx = {
.net = net,
@ -428,7 +428,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry(chain, &table->chains, list)
nf_tables_unregister_hook(net, table, chain);
list_for_each_entry(flowtable, &table->flowtables, list)
@@ -6604,6 +6584,21 @@ static void __nft_release_afinfo(struct
@@ -6625,6 +6605,21 @@ static void __nft_release_afinfo(struct
}
}

View File

@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1581,7 +1489,6 @@ static int nf_tables_newchain(struct net
@@ -1597,7 +1505,6 @@ static int nf_tables_newchain(struct net
const struct nlattr * uninitialized_var(name);
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
@ -548,7 +548,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_chain *chain;
u8 policy = NF_ACCEPT;
@@ -1591,11 +1498,7 @@ static int nf_tables_newchain(struct net
@@ -1607,11 +1514,7 @@ static int nf_tables_newchain(struct net
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false;
@ -561,7 +561,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1636,7 +1539,7 @@ static int nf_tables_newchain(struct net
@@ -1652,7 +1555,7 @@ static int nf_tables_newchain(struct net
}
}
@ -570,7 +570,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (chain != NULL) {
if (nlh->nlmsg_flags & NLM_F_EXCL)
@@ -1657,7 +1560,6 @@ static int nf_tables_delchain(struct net
@@ -1673,7 +1576,6 @@ static int nf_tables_delchain(struct net
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_next(net);
@ -578,7 +578,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_chain *chain;
struct nft_rule *rule;
@@ -1666,11 +1568,7 @@ static int nf_tables_delchain(struct net
@@ -1682,11 +1584,7 @@ static int nf_tables_delchain(struct net
u32 use;
int err;
@ -591,7 +591,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1683,7 +1581,7 @@ static int nf_tables_delchain(struct net
@@ -1699,7 +1597,7 @@ static int nf_tables_delchain(struct net
chain->use > 0)
return -EBUSY;
@ -600,7 +600,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
use = chain->use;
list_for_each_entry(rule, &chain->rules, list) {
@@ -2107,7 +2005,7 @@ static int nf_tables_dump_rules(struct s
@@ -2123,7 +2021,7 @@ static int nf_tables_dump_rules(struct s
cb->seq = net->nft.base_seq;
list_for_each_entry_rcu(table, &net->nft.tables, list) {
@ -609,7 +609,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
continue;
if (ctx && ctx->table && strcmp(ctx->table, table->name) != 0)
@@ -2130,7 +2028,7 @@ static int nf_tables_dump_rules(struct s
@@ -2146,7 +2044,7 @@ static int nf_tables_dump_rules(struct s
cb->nlh->nlmsg_seq,
NFT_MSG_NEWRULE,
NLM_F_MULTI | NLM_F_APPEND,
@ -618,7 +618,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
table, chain, rule) < 0)
goto done;
@@ -2166,7 +2064,6 @@ static int nf_tables_getrule(struct net
@@ -2182,7 +2080,6 @@ static int nf_tables_getrule(struct net
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_cur(net);
@ -626,7 +626,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
const struct nft_table *table;
const struct nft_chain *chain;
const struct nft_rule *rule;
@@ -2210,11 +2107,7 @@ static int nf_tables_getrule(struct net
@@ -2226,11 +2123,7 @@ static int nf_tables_getrule(struct net
return netlink_dump_start(nlsk, skb, nlh, &c);
}
@ -639,7 +639,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2279,7 +2172,7 @@ static int nf_tables_newrule(struct net
@@ -2295,7 +2188,7 @@ static int nf_tables_newrule(struct net
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_next(net);
@ -648,7 +648,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_chain *chain;
struct nft_rule *rule, *old_rule = NULL;
@@ -2295,11 +2188,7 @@ static int nf_tables_newrule(struct net
@@ -2311,11 +2204,7 @@ static int nf_tables_newrule(struct net
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false;
@ -661,7 +661,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2339,7 +2228,7 @@ static int nf_tables_newrule(struct net
@@ -2355,7 +2244,7 @@ static int nf_tables_newrule(struct net
return PTR_ERR(old_rule);
}
@ -670,7 +670,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
n = 0;
size = 0;
@@ -2468,18 +2357,13 @@ static int nf_tables_delrule(struct net
@@ -2484,18 +2373,13 @@ static int nf_tables_delrule(struct net
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_next(net);
@ -690,7 +690,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -2491,7 +2375,7 @@ static int nf_tables_delrule(struct net
@@ -2507,7 +2391,7 @@ static int nf_tables_delrule(struct net
return PTR_ERR(chain);
}
@ -699,7 +699,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (chain) {
if (nla[NFTA_RULE_HANDLE]) {
@@ -2676,26 +2560,17 @@ static int nft_ctx_init_from_setattr(str
@@ -2692,26 +2576,17 @@ static int nft_ctx_init_from_setattr(str
u8 genmask)
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
@ -729,7 +729,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return 0;
}
@@ -2927,7 +2802,7 @@ static int nf_tables_dump_sets(struct sk
@@ -2943,7 +2818,7 @@ static int nf_tables_dump_sets(struct sk
list_for_each_entry_rcu(table, &net->nft.tables, list) {
if (ctx->family != NFPROTO_UNSPEC &&
@ -738,7 +738,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
continue;
if (ctx->table && ctx->table != table)
@@ -2948,7 +2823,7 @@ static int nf_tables_dump_sets(struct sk
@@ -2964,7 +2839,7 @@ static int nf_tables_dump_sets(struct sk
ctx_set = *ctx;
ctx_set.table = table;
@ -747,7 +747,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (nf_tables_fill_set(skb, &ctx_set, set,
NFT_MSG_NEWSET,
@@ -3060,8 +2935,8 @@ static int nf_tables_newset(struct net *
@@ -3076,8 +2951,8 @@ static int nf_tables_newset(struct net *
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_next(net);
@ -757,7 +757,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_set *set;
struct nft_ctx ctx;
@@ -3168,16 +3043,12 @@ static int nf_tables_newset(struct net *
@@ -3184,16 +3059,12 @@ static int nf_tables_newset(struct net *
create = nlh->nlmsg_flags & NLM_F_CREATE ? true : false;
@ -776,7 +776,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
set = nf_tables_set_lookup(table, nla[NFTA_SET_NAME], genmask);
if (IS_ERR(set)) {
@@ -3439,19 +3310,15 @@ static int nft_ctx_init_from_elemattr(st
@@ -3455,19 +3326,15 @@ static int nft_ctx_init_from_elemattr(st
u8 genmask)
{
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
@ -799,7 +799,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return 0;
}
@@ -3569,7 +3436,7 @@ static int nf_tables_dump_set(struct sk_
@@ -3585,7 +3452,7 @@ static int nf_tables_dump_set(struct sk_
rcu_read_lock();
list_for_each_entry_rcu(table, &net->nft.tables, list) {
if (dump_ctx->ctx.family != NFPROTO_UNSPEC &&
@ -808,7 +808,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
continue;
if (table != dump_ctx->ctx.table)
@@ -3599,7 +3466,7 @@ static int nf_tables_dump_set(struct sk_
@@ -3615,7 +3482,7 @@ static int nf_tables_dump_set(struct sk_
goto nla_put_failure;
nfmsg = nlmsg_data(nlh);
@ -817,7 +817,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(net->nft.base_seq & 0xffff);
@@ -4478,7 +4345,6 @@ static int nf_tables_newobj(struct net *
@@ -4494,7 +4361,6 @@ static int nf_tables_newobj(struct net *
const struct nft_object_type *type;
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
@ -825,7 +825,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_object *obj;
struct nft_ctx ctx;
@@ -4490,11 +4356,7 @@ static int nf_tables_newobj(struct net *
@@ -4506,11 +4372,7 @@ static int nf_tables_newobj(struct net *
!nla[NFTA_OBJ_DATA])
return -EINVAL;
@ -838,7 +838,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4513,7 +4375,7 @@ static int nf_tables_newobj(struct net *
@@ -4529,7 +4391,7 @@ static int nf_tables_newobj(struct net *
return 0;
}
@ -847,7 +847,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
type = nft_obj_type_get(objtype);
if (IS_ERR(type))
@@ -4605,7 +4467,7 @@ static int nf_tables_dump_obj(struct sk_
@@ -4621,7 +4483,7 @@ static int nf_tables_dump_obj(struct sk_
cb->seq = net->nft.base_seq;
list_for_each_entry_rcu(table, &net->nft.tables, list) {
@ -856,7 +856,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
continue;
list_for_each_entry_rcu(obj, &table->objects, list) {
@@ -4628,7 +4490,7 @@ static int nf_tables_dump_obj(struct sk_
@@ -4644,7 +4506,7 @@ static int nf_tables_dump_obj(struct sk_
cb->nlh->nlmsg_seq,
NFT_MSG_NEWOBJ,
NLM_F_MULTI | NLM_F_APPEND,
@ -865,7 +865,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
obj, reset) < 0)
goto done;
@@ -4686,7 +4548,6 @@ static int nf_tables_getobj(struct net *
@@ -4702,7 +4564,6 @@ static int nf_tables_getobj(struct net *
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_cur(net);
int family = nfmsg->nfgen_family;
@ -873,7 +873,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
const struct nft_table *table;
struct nft_object *obj;
struct sk_buff *skb2;
@@ -4717,11 +4578,7 @@ static int nf_tables_getobj(struct net *
@@ -4733,11 +4594,7 @@ static int nf_tables_getobj(struct net *
!nla[NFTA_OBJ_TYPE])
return -EINVAL;
@ -886,7 +886,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4768,7 +4625,6 @@ static int nf_tables_delobj(struct net *
@@ -4784,7 +4641,6 @@ static int nf_tables_delobj(struct net *
const struct nfgenmsg *nfmsg = nlmsg_data(nlh);
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
@ -894,7 +894,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_object *obj;
struct nft_ctx ctx;
@@ -4778,11 +4634,7 @@ static int nf_tables_delobj(struct net *
@@ -4794,11 +4650,7 @@ static int nf_tables_delobj(struct net *
!nla[NFTA_OBJ_NAME])
return -EINVAL;
@ -907,7 +907,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
genmask);
if (IS_ERR(table))
return PTR_ERR(table);
@@ -4794,7 +4646,7 @@ static int nf_tables_delobj(struct net *
@@ -4810,7 +4662,7 @@ static int nf_tables_delobj(struct net *
if (obj->use > 0)
return -EBUSY;
@ -916,7 +916,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return nft_delobj(&ctx, obj);
}
@@ -4979,33 +4831,31 @@ err1:
@@ -4995,33 +4847,31 @@ err1:
return err;
}
@ -956,7 +956,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return ERR_PTR(-EAGAIN);
}
#endif
@@ -5053,7 +4903,6 @@ static int nf_tables_newflowtable(struct
@@ -5069,7 +4919,6 @@ static int nf_tables_newflowtable(struct
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
struct nft_flowtable *flowtable;
@ -964,7 +964,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
struct nft_table *table;
struct nft_ctx ctx;
int err, i, k;
@@ -5063,12 +4912,8 @@ static int nf_tables_newflowtable(struct
@@ -5079,12 +4928,8 @@ static int nf_tables_newflowtable(struct
!nla[NFTA_FLOWTABLE_HOOK])
return -EINVAL;
@ -978,7 +978,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -5085,7 +4930,7 @@ static int nf_tables_newflowtable(struct
@@ -5101,7 +4946,7 @@ static int nf_tables_newflowtable(struct
return 0;
}
@ -987,7 +987,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
flowtable = kzalloc(sizeof(*flowtable), GFP_KERNEL);
if (!flowtable)
@@ -5098,7 +4943,7 @@ static int nf_tables_newflowtable(struct
@@ -5114,7 +4959,7 @@ static int nf_tables_newflowtable(struct
goto err1;
}
@ -996,7 +996,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(type)) {
err = PTR_ERR(type);
goto err2;
@@ -5158,16 +5003,11 @@ static int nf_tables_delflowtable(struct
@@ -5174,16 +5019,11 @@ static int nf_tables_delflowtable(struct
u8 genmask = nft_genmask_next(net);
int family = nfmsg->nfgen_family;
struct nft_flowtable *flowtable;
@ -1014,7 +1014,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -5178,7 +5018,7 @@ static int nf_tables_delflowtable(struct
@@ -5194,7 +5034,7 @@ static int nf_tables_delflowtable(struct
if (flowtable->use > 0)
return -EBUSY;
@ -1023,7 +1023,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return nft_delflowtable(&ctx, flowtable);
}
@@ -5253,7 +5093,7 @@ static int nf_tables_dump_flowtable(stru
@@ -5269,7 +5109,7 @@ static int nf_tables_dump_flowtable(stru
cb->seq = net->nft.base_seq;
list_for_each_entry_rcu(table, &net->nft.tables, list) {
@ -1032,7 +1032,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
continue;
list_for_each_entry_rcu(flowtable, &table->flowtables, list) {
@@ -5272,7 +5112,7 @@ static int nf_tables_dump_flowtable(stru
@@ -5288,7 +5128,7 @@ static int nf_tables_dump_flowtable(stru
cb->nlh->nlmsg_seq,
NFT_MSG_NEWFLOWTABLE,
NLM_F_MULTI | NLM_F_APPEND,
@ -1041,7 +1041,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
goto done;
nl_dump_check_consistent(cb, nlmsg_hdr(skb));
@@ -5332,7 +5172,6 @@ static int nf_tables_getflowtable(struct
@@ -5348,7 +5188,6 @@ static int nf_tables_getflowtable(struct
u8 genmask = nft_genmask_cur(net);
int family = nfmsg->nfgen_family;
struct nft_flowtable *flowtable;
@ -1049,7 +1049,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
const struct nft_table *table;
struct sk_buff *skb2;
int err;
@@ -5358,12 +5197,8 @@ static int nf_tables_getflowtable(struct
@@ -5374,12 +5213,8 @@ static int nf_tables_getflowtable(struct
if (!nla[NFTA_FLOWTABLE_NAME])
return -EINVAL;
@ -1063,7 +1063,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -6529,7 +6364,7 @@ int __nft_release_basechain(struct nft_c
@@ -6550,7 +6385,7 @@ int __nft_release_basechain(struct nft_c
}
EXPORT_SYMBOL_GPL(__nft_release_basechain);
@ -1072,7 +1072,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
{
struct nft_flowtable *flowtable, *nf;
struct nft_table *table, *nt;
@@ -6542,7 +6377,7 @@ static void __nft_release_afinfo(struct
@@ -6563,7 +6398,7 @@ static void __nft_release_afinfo(struct
};
list_for_each_entry_safe(table, nt, &net->nft.tables, list) {
@ -1081,7 +1081,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
list_for_each_entry(chain, &table->chains, list)
nf_tables_unregister_hook(net, table, chain);
@@ -6594,7 +6429,7 @@ static int __net_init nf_tables_init_net
@@ -6615,7 +6450,7 @@ static int __net_init nf_tables_init_net
static void __net_exit nf_tables_exit_net(struct net *net)
{

View File

@ -17,7 +17,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -4869,13 +4869,13 @@ void nft_flow_table_iterate(struct net *
@@ -4885,13 +4885,13 @@ void nft_flow_table_iterate(struct net *
struct nft_flowtable *flowtable;
const struct nft_table *table;

View File

@ -118,7 +118,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5254,17 +5254,12 @@ err:
@@ -5270,17 +5270,12 @@ err:
nfnetlink_set_err(ctx->net, ctx->portid, NFNLGRP_NFTABLES, -ENOBUFS);
}

View File

@ -244,7 +244,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(table))
return PTR_ERR(table);
@@ -1565,6 +1607,7 @@ static int nf_tables_delchain(struct net
@@ -1581,6 +1623,7 @@ static int nf_tables_delchain(struct net
struct nft_rule *rule;
int family = nfmsg->nfgen_family;
struct nft_ctx ctx;
@ -252,7 +252,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
u32 use;
int err;
@@ -1573,7 +1616,12 @@ static int nf_tables_delchain(struct net
@@ -1589,7 +1632,12 @@ static int nf_tables_delchain(struct net
if (IS_ERR(table))
return PTR_ERR(table);
@ -266,7 +266,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(chain))
return PTR_ERR(chain);
@@ -2547,6 +2595,7 @@ static const struct nla_policy nft_set_p
@@ -2563,6 +2611,7 @@ static const struct nla_policy nft_set_p
[NFTA_SET_USERDATA] = { .type = NLA_BINARY,
.len = NFT_USERDATA_MAXLEN },
[NFTA_SET_OBJ_TYPE] = { .type = NLA_U32 },
@ -274,7 +274,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
static const struct nla_policy nft_set_desc_policy[NFTA_SET_DESC_MAX + 1] = {
@@ -2590,6 +2639,22 @@ static struct nft_set *nf_tables_set_loo
@@ -2606,6 +2655,22 @@ static struct nft_set *nf_tables_set_loo
return ERR_PTR(-ENOENT);
}
@ -297,7 +297,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static struct nft_set *nf_tables_set_lookup_byid(const struct net *net,
const struct nlattr *nla,
u8 genmask)
@@ -2706,6 +2771,9 @@ static int nf_tables_fill_set(struct sk_
@@ -2722,6 +2787,9 @@ static int nf_tables_fill_set(struct sk_
goto nla_put_failure;
if (nla_put_string(skb, NFTA_SET_NAME, set->name))
goto nla_put_failure;
@ -307,7 +307,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (set->flags != 0)
if (nla_put_be32(skb, NFTA_SET_FLAGS, htonl(set->flags)))
goto nla_put_failure;
@@ -3114,6 +3182,7 @@ static int nf_tables_newset(struct net *
@@ -3130,6 +3198,7 @@ static int nf_tables_newset(struct net *
set->udata = udata;
set->timeout = timeout;
set->gc_int = gc_int;
@ -315,7 +315,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
err = ops->init(set, &desc, nla);
if (err < 0)
@@ -3173,7 +3242,10 @@ static int nf_tables_delset(struct net *
@@ -3189,7 +3258,10 @@ static int nf_tables_delset(struct net *
if (err < 0)
return err;
@ -327,7 +327,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(set))
return PTR_ERR(set);
@@ -4233,6 +4305,21 @@ struct nft_object *nf_tables_obj_lookup(
@@ -4249,6 +4321,21 @@ struct nft_object *nf_tables_obj_lookup(
}
EXPORT_SYMBOL_GPL(nf_tables_obj_lookup);
@ -349,7 +349,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
static const struct nla_policy nft_obj_policy[NFTA_OBJ_MAX + 1] = {
[NFTA_OBJ_TABLE] = { .type = NLA_STRING,
.len = NFT_TABLE_MAXNAMELEN - 1 },
@@ -4240,6 +4327,7 @@ static const struct nla_policy nft_obj_p
@@ -4256,6 +4343,7 @@ static const struct nla_policy nft_obj_p
.len = NFT_OBJ_MAXNAMELEN - 1 },
[NFTA_OBJ_TYPE] = { .type = NLA_U32 },
[NFTA_OBJ_DATA] = { .type = NLA_NESTED },
@ -357,7 +357,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
static struct nft_object *nft_obj_init(const struct nft_ctx *ctx,
@@ -4387,6 +4475,8 @@ static int nf_tables_newobj(struct net *
@@ -4403,6 +4491,8 @@ static int nf_tables_newobj(struct net *
goto err1;
}
obj->table = table;
@ -366,7 +366,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
obj->name = nla_strdup(nla[NFTA_OBJ_NAME], GFP_KERNEL);
if (!obj->name) {
err = -ENOMEM;
@@ -4433,7 +4523,9 @@ static int nf_tables_fill_obj_info(struc
@@ -4449,7 +4539,9 @@ static int nf_tables_fill_obj_info(struc
nla_put_string(skb, NFTA_OBJ_NAME, obj->name) ||
nla_put_be32(skb, NFTA_OBJ_TYPE, htonl(obj->ops->type->type)) ||
nla_put_be32(skb, NFTA_OBJ_USE, htonl(obj->use)) ||
@ -377,7 +377,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
goto nla_put_failure;
nlmsg_end(skb, nlh);
@@ -4631,7 +4723,7 @@ static int nf_tables_delobj(struct net *
@@ -4647,7 +4739,7 @@ static int nf_tables_delobj(struct net *
u32 objtype;
if (!nla[NFTA_OBJ_TYPE] ||
@ -386,7 +386,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
return -EINVAL;
table = nf_tables_table_lookup(net, nla[NFTA_OBJ_TABLE], family,
@@ -4640,7 +4732,12 @@ static int nf_tables_delobj(struct net *
@@ -4656,7 +4748,12 @@ static int nf_tables_delobj(struct net *
return PTR_ERR(table);
objtype = ntohl(nla_get_be32(nla[NFTA_OBJ_TYPE]));
@ -400,7 +400,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(obj))
return PTR_ERR(obj);
if (obj->use > 0)
@@ -4712,6 +4809,7 @@ static const struct nla_policy nft_flowt
@@ -4728,6 +4825,7 @@ static const struct nla_policy nft_flowt
[NFTA_FLOWTABLE_NAME] = { .type = NLA_STRING,
.len = NFT_NAME_MAXLEN - 1 },
[NFTA_FLOWTABLE_HOOK] = { .type = NLA_NESTED },
@ -408,7 +408,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
};
struct nft_flowtable *nf_tables_flowtable_lookup(const struct nft_table *table,
@@ -4729,6 +4827,20 @@ struct nft_flowtable *nf_tables_flowtabl
@@ -4745,6 +4843,20 @@ struct nft_flowtable *nf_tables_flowtabl
}
EXPORT_SYMBOL_GPL(nf_tables_flowtable_lookup);
@ -429,7 +429,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
#define NFT_FLOWTABLE_DEVICE_MAX 8
static int nf_tables_parse_devices(const struct nft_ctx *ctx,
@@ -4937,6 +5049,8 @@ static int nf_tables_newflowtable(struct
@@ -4953,6 +5065,8 @@ static int nf_tables_newflowtable(struct
return -ENOMEM;
flowtable->table = table;
@ -438,7 +438,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
flowtable->name = nla_strdup(nla[NFTA_FLOWTABLE_NAME], GFP_KERNEL);
if (!flowtable->name) {
err = -ENOMEM;
@@ -5011,8 +5125,14 @@ static int nf_tables_delflowtable(struct
@@ -5027,8 +5141,14 @@ static int nf_tables_delflowtable(struct
if (IS_ERR(table))
return PTR_ERR(table);
@ -455,7 +455,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
if (IS_ERR(flowtable))
return PTR_ERR(flowtable);
if (flowtable->use > 0)
@@ -5045,7 +5165,9 @@ static int nf_tables_fill_flowtable_info
@@ -5061,7 +5181,9 @@ static int nf_tables_fill_flowtable_info
if (nla_put_string(skb, NFTA_FLOWTABLE_TABLE, flowtable->table->name) ||
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||

View File

@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -911,8 +911,6 @@ static inline struct sk_buff *ip6_finish
@@ -889,8 +889,6 @@ static inline struct sk_buff *ip6_finish
&inet6_sk(sk)->cork);
}

View File

@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
.owner = THIS_MODULE,
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -5064,40 +5064,38 @@ static int nf_tables_newflowtable(struct
@@ -5080,40 +5080,38 @@ static int nf_tables_newflowtable(struct
}
flowtable->data.type = type;
@ -285,7 +285,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
err3:
module_put(type->owner);
err2:
@@ -5378,10 +5376,8 @@ err:
@@ -5394,10 +5392,8 @@ err:
static void nf_tables_flowtable_destroy(struct nft_flowtable *flowtable)
{

View File

@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -4930,7 +4930,7 @@ static int nf_tables_flowtable_parse_hoo
@@ -4946,7 +4946,7 @@ static int nf_tables_flowtable_parse_hoo
flowtable->ops[i].pf = NFPROTO_NETDEV;
flowtable->ops[i].hooknum = hooknum;
flowtable->ops[i].priority = priority;

View File

@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
WARN_ON(!nf_flow_offload_gc_step(flow_table));
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -4974,23 +4974,6 @@ static const struct nf_flowtable_type *n
@@ -4990,23 +4990,6 @@ static const struct nf_flowtable_type *n
return ERR_PTR(-ENOENT);
}

View File

@ -302,7 +302,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
if (alx->flags & ALX_FLAG_USING_MSIX) {
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -1885,7 +1885,7 @@ static int atl1c_clean(struct napi_struc
@@ -1886,7 +1886,7 @@ static int atl1c_clean(struct napi_struc
if (work_done < budget) {
quit_polling:
@ -1040,7 +1040,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
writel(irq->mask, adpt->base + EMAC_INT_MASK);
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -7577,7 +7577,7 @@ static int rtl8169_poll(struct napi_stru
@@ -7578,7 +7578,7 @@ static int rtl8169_poll(struct napi_stru
}
if (work_done < budget) {

View File

@ -15,7 +15,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/Makefile
+++ b/Makefile
@@ -1228,7 +1228,6 @@ all: modules
@@ -1232,7 +1232,6 @@ all: modules
PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
@$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
@@ -1257,7 +1256,6 @@ _modinst_:
@@ -1261,7 +1260,6 @@ _modinst_:
rm -f $(MODLIB)/build ; \
ln -s $(CURDIR) $(MODLIB)/build ; \
fi

View File

@ -33,7 +33,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
@@ -782,11 +787,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
@@ -786,11 +791,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
endif

View File

@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
*/
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2491,6 +2491,10 @@ static inline int pskb_trim(struct sk_bu
@@ -2496,6 +2496,10 @@ static inline int pskb_trim(struct sk_bu
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
}
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/**
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
* @skb: buffer to alter
@@ -2621,16 +2625,6 @@ static inline struct sk_buff *dev_alloc_
@@ -2626,16 +2630,6 @@ static inline struct sk_buff *dev_alloc_
}

View File

@ -381,7 +381,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -557,6 +557,9 @@ static __net_initdata struct pernet_oper
@@ -558,6 +558,9 @@ static __net_initdata struct pernet_oper
int __init ip_misc_proc_init(void)
{

View File

@ -223,7 +223,7 @@
MODULE_LICENSE("GPL");
--- a/drivers/net/phy/ar8327.c
+++ b/drivers/net/phy/ar8327.c
@@ -627,11 +627,11 @@ ar8327_hw_init(struct ar8xxx_priv *priv)
@@ -619,11 +619,11 @@ ar8327_hw_init(struct ar8xxx_priv *priv)
if (!priv->chip_data)
return -ENOMEM;

View File

@ -0,0 +1,96 @@
From a99708737f566c70651015332e89d0d3b1eb5529 Mon Sep 17 00:00:00 2001
From: Koen Vandeputte <koen.vandeputte@ncentric.com>
Date: Mon, 17 Sep 2018 10:13:09 +0200
Subject: [PATCH] Revert "ubifs: xattr: Don't operate on deleted inodes"
This reverts commit 8a23348d76a1e7716da6e76383281ac82fc071cf.
UBIFS wants to assert that xattr operations are only issued on files
with positive link count. The said patch made this operations return
-ENOENT for unlinked files such that the asserts will no longer trigger.
This was wrong since xattr operations are perfectly fine on unlinked
files.
Instead the assertions need to be fixed/removed.
Fixes: 11a6fc3dc743 ("ubifs: xattr: Don't operate on deleted inodes")
Reported-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
---
fs/ubifs/xattr.c | 24 ------------------------
1 file changed, 24 deletions(-)
--- a/fs/ubifs/xattr.c
+++ b/fs/ubifs/xattr.c
@@ -152,12 +152,6 @@ static int create_xattr(struct ubifs_inf
ui->data_len = size;
mutex_lock(&host_ui->ui_mutex);
-
- if (!host->i_nlink) {
- err = -ENOENT;
- goto out_noent;
- }
-
host->i_ctime = current_time(host);
host_ui->xattr_cnt += 1;
host_ui->xattr_size += CALC_DENT_SIZE(fname_len(nm));
@@ -189,7 +183,6 @@ out_cancel:
host_ui->xattr_size -= CALC_XATTR_BYTES(size);
host_ui->xattr_names -= fname_len(nm);
host_ui->flags &= ~UBIFS_CRYPT_FL;
-out_noent:
mutex_unlock(&host_ui->ui_mutex);
out_free:
make_bad_inode(inode);
@@ -241,12 +234,6 @@ static int change_xattr(struct ubifs_inf
mutex_unlock(&ui->ui_mutex);
mutex_lock(&host_ui->ui_mutex);
-
- if (!host->i_nlink) {
- err = -ENOENT;
- goto out_noent;
- }
-
host->i_ctime = current_time(host);
host_ui->xattr_size -= CALC_XATTR_BYTES(old_size);
host_ui->xattr_size += CALC_XATTR_BYTES(size);
@@ -268,7 +255,6 @@ static int change_xattr(struct ubifs_inf
out_cancel:
host_ui->xattr_size -= CALC_XATTR_BYTES(size);
host_ui->xattr_size += CALC_XATTR_BYTES(old_size);
-out_noent:
mutex_unlock(&host_ui->ui_mutex);
make_bad_inode(inode);
out_free:
@@ -497,12 +483,6 @@ static int remove_xattr(struct ubifs_inf
return err;
mutex_lock(&host_ui->ui_mutex);
-
- if (!host->i_nlink) {
- err = -ENOENT;
- goto out_noent;
- }
-
host->i_ctime = current_time(host);
host_ui->xattr_cnt -= 1;
host_ui->xattr_size -= CALC_DENT_SIZE(fname_len(nm));
@@ -522,7 +502,6 @@ out_cancel:
host_ui->xattr_size += CALC_DENT_SIZE(fname_len(nm));
host_ui->xattr_size += CALC_XATTR_BYTES(ui->data_len);
host_ui->xattr_names += fname_len(nm);
-out_noent:
mutex_unlock(&host_ui->ui_mutex);
ubifs_release_budget(c, &req);
make_bad_inode(inode);
@@ -562,9 +541,6 @@ static int ubifs_xattr_remove(struct ino
ubifs_assert(inode_is_locked(host));
- if (!host->i_nlink)
- return -ENOENT;
-
if (fname_len(&nm) > UBIFS_MAX_NLEN)
return -ENAMETOOLONG;

View File

@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/Makefile
+++ b/Makefile
@@ -646,12 +646,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
@@ -650,12 +650,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS += $(call cc-option,-Oz,-Os)

View File

@ -47,7 +47,7 @@ v2: incorporated changes suggested by Jonas Gorski
select OF
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -319,7 +319,7 @@ OBJCOPYFLAGS += --remove-section=.regin
@@ -315,7 +315,7 @@ OBJCOPYFLAGS += --remove-section=.regin
head-y := arch/mips/kernel/head.o
libs-y += arch/mips/lib/

View File

@ -11,12 +11,12 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -162,7 +162,7 @@ cflags-$(CONFIG_CPU_R4X00) += -march=r46
@@ -161,7 +161,7 @@ cflags-$(CONFIG_CPU_VR41XX) += -march=r4
cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap
cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap
cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
-Wa,-mips32 -Wa,--trap
-cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
+cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2 -mtune=34kc,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
-Wa,-mips32r2 -Wa,--trap
cflags-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,--trap
-cflags-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -Wa,--trap
+cflags-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -mtune=34kc -Wa,--trap
cflags-$(CONFIG_CPU_MIPS32_R6) += -march=mips32r6 -Wa,--trap -modd-spreg
cflags-$(CONFIG_CPU_MIPS64_R1) += $(call cc-option,-march=mips64,-mips64 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64) \
cflags-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,--trap
cflags-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,--trap

View File

@ -0,0 +1,75 @@
From 1bd1b740f208d1cf4071932cc51860d37266c402 Mon Sep 17 00:00:00 2001
From: Bernhard Frauendienst <kernel@nospam.obeliks.de>
Date: Sat, 1 Sep 2018 00:30:11 +0200
Subject: [PATCH 495/497] mtd: core: add get_mtd_device_by_node
Add function to retrieve a mtd device by its OF node. Since drivers can
assign arbitrary names to mtd devices in the absence of a label
property, there is no other reliable way to retrieve a mtd device for a
given OF node.
Signed-off-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/mtd/mtdcore.c | 38 ++++++++++++++++++++++++++++++++++++++
include/linux/mtd/mtd.h | 2 ++
2 files changed, 40 insertions(+)
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -922,6 +922,44 @@ out_unlock:
}
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
+/**
+ * get_mtd_device_by_node - obtain a validated handle for an MTD device
+ * by of_node
+ * @of_node: OF node of MTD device to open
+ *
+ * This function returns MTD device description structure in case of
+ * success and an error code in case of failure.
+ */
+struct mtd_info *get_mtd_device_by_node(const struct device_node *of_node)
+{
+ int err = -ENODEV;
+ struct mtd_info *mtd = NULL, *other;
+
+ mutex_lock(&mtd_table_mutex);
+
+ mtd_for_each_device(other) {
+ if (of_node == other->dev.of_node) {
+ mtd = other;
+ break;
+ }
+ }
+
+ if (!mtd)
+ goto out_unlock;
+
+ err = __get_mtd_device(mtd);
+ if (err)
+ goto out_unlock;
+
+ mutex_unlock(&mtd_table_mutex);
+ return mtd;
+
+out_unlock:
+ mutex_unlock(&mtd_table_mutex);
+ return ERR_PTR(err);
+}
+EXPORT_SYMBOL_GPL(get_mtd_device_by_node);
+
void put_mtd_device(struct mtd_info *mtd)
{
mutex_lock(&mtd_table_mutex);
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -579,6 +579,8 @@ extern struct mtd_info *get_mtd_device(s
extern int __get_mtd_device(struct mtd_info *mtd);
extern void __put_mtd_device(struct mtd_info *mtd);
extern struct mtd_info *get_mtd_device_nm(const char *name);
+extern struct mtd_info *get_mtd_device_by_node(
+ const struct device_node *of_node);
extern void put_mtd_device(struct mtd_info *mtd);

View File

@ -0,0 +1,52 @@
From 5734c6669fba7ddb5ef491ccff7159d15dba0b59 Mon Sep 17 00:00:00 2001
From: Bernhard Frauendienst <kernel@nospam.obeliks.de>
Date: Wed, 5 Sep 2018 01:32:51 +0200
Subject: [PATCH 496/497] dt-bindings: add bindings for mtd-concat devices
Document virtual mtd-concat device bindings.
Signed-off-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
---
.../devicetree/bindings/mtd/mtd-concat.txt | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mtd/mtd-concat.txt
--- /dev/null
+++ b/Documentation/devicetree/bindings/mtd/mtd-concat.txt
@@ -0,0 +1,36 @@
+Virtual MTD concat device
+
+Requires properties:
+- devices: list of phandles to mtd nodes that should be concatenated
+
+Example:
+
+&spi {
+ flash0: flash@0 {
+ ...
+ };
+ flash1: flash@1 {
+ ...
+ };
+};
+
+flash {
+ compatible = "mtd-concat";
+
+ devices = <&flash0 &flash1>;
+
+ partitions {
+ compatible = "fixed-partitions";
+
+ partition@0 {
+ label = "boot";
+ reg = <0x0000000 0x0040000>;
+ read-only;
+ };
+
+ partition@40000 {
+ label = "firmware";
+ reg = <0x0040000 0x1fc0000>;
+ };
+ }
+}

View File

@ -0,0 +1,216 @@
From e53f712d8eac71f54399b61038ccf87d2cee99d7 Mon Sep 17 00:00:00 2001
From: Bernhard Frauendienst <kernel@nospam.obeliks.de>
Date: Sat, 25 Aug 2018 12:35:22 +0200
Subject: [PATCH 497/497] mtd: mtdconcat: add dt driver for concat devices
Some mtd drivers like physmap variants have support for concatenating
multiple mtd devices, but there is no generic way to define such a
concat device from within the device tree.
This is useful for some SoC boards that use multiple flash chips as
memory banks of a single mtd device, with partitions spanning chip
borders.
This commit adds a driver for creating virtual mtd-concat devices. They
must have a compatible = "mtd-concat" line, and define a list of devices
to concat in the 'devices' property, for example:
flash {
compatible = "mtd-concat";
devices = <&flash0 &flash1>;
partitions {
...
};
};
The driver is added to the very end of the mtd Makefile to increase the
likelyhood of all child devices already being loaded at the time of
probing, preventing unnecessary deferred probes.
Signed-off-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
---
drivers/mtd/Kconfig | 2 +
drivers/mtd/Makefile | 3 +
drivers/mtd/composite/Kconfig | 12 +++
drivers/mtd/composite/Makefile | 6 ++
drivers/mtd/composite/virt_concat.c | 128 ++++++++++++++++++++++++++++
5 files changed, 151 insertions(+)
create mode 100644 drivers/mtd/composite/Kconfig
create mode 100644 drivers/mtd/composite/Makefile
create mode 100644 drivers/mtd/composite/virt_concat.c
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
@@ -377,4 +377,6 @@ source "drivers/mtd/spi-nor/Kconfig"
source "drivers/mtd/ubi/Kconfig"
+source "drivers/mtd/composite/Kconfig"
+
endif # MTD
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
@@ -39,3 +39,6 @@ obj-y += chips/ lpddr/ maps/ devices/ n
obj-$(CONFIG_MTD_SPI_NOR) += spi-nor/
obj-$(CONFIG_MTD_UBI) += ubi/
+
+# Composite drivers must be loaded last
+obj-y += composite/
--- /dev/null
+++ b/drivers/mtd/composite/Kconfig
@@ -0,0 +1,12 @@
+menu "Composite MTD device drivers"
+ depends on MTD!=n
+
+config MTD_VIRT_CONCAT
+ tristate "Virtual concat MTD device"
+ help
+ This driver allows creation of a virtual MTD concat device, which
+ concatenates multiple underlying MTD devices to a single device.
+ This is required by some SoC boards where multiple memory banks are
+ used as one device with partitions spanning across device boundaries.
+
+endmenu
--- /dev/null
+++ b/drivers/mtd/composite/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# linux/drivers/mtd/composite/Makefile
+#
+
+obj-$(CONFIG_MTD_VIRT_CONCAT) += virt_concat.o
--- /dev/null
+++ b/drivers/mtd/composite/virt_concat.c
@@ -0,0 +1,128 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Virtual concat MTD device driver
+ *
+ * Copyright (C) 2018 Bernhard Frauendienst
+ * Author: Bernhard Frauendienst, kernel@nospam.obeliks.de
+ */
+
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/mtd/concat.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/slab.h>
+
+/*
+ * struct of_virt_concat - platform device driver data.
+ * @cmtd the final mtd_concat device
+ * @num_devices the number of devices in @devices
+ * @devices points to an array of devices already loaded
+ */
+struct of_virt_concat {
+ struct mtd_info *cmtd;
+ int num_devices;
+ struct mtd_info **devices;
+};
+
+static int virt_concat_remove(struct platform_device *pdev)
+{
+ struct of_virt_concat *info;
+ int i;
+
+ info = platform_get_drvdata(pdev);
+ if (!info)
+ return 0;
+
+ // unset data for when this is called after a probe error
+ platform_set_drvdata(pdev, NULL);
+
+ if (info->cmtd) {
+ mtd_device_unregister(info->cmtd);
+ mtd_concat_destroy(info->cmtd);
+ }
+
+ if (info->devices) {
+ for (i = 0; i < info->num_devices; i++)
+ put_mtd_device(info->devices[i]);
+ }
+
+ return 0;
+}
+
+static int virt_concat_probe(struct platform_device *pdev)
+{
+ struct device_node *node = pdev->dev.of_node;
+ struct of_phandle_iterator it;
+ struct of_virt_concat *info;
+ struct mtd_info *mtd;
+ int err = 0, count;
+
+ count = of_count_phandle_with_args(node, "devices", NULL);
+ if (count <= 0)
+ return -EINVAL;
+
+ info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
+ if (!info)
+ return -ENOMEM;
+ info->devices = devm_kcalloc(&pdev->dev, count,
+ sizeof(*(info->devices)), GFP_KERNEL);
+ if (!info->devices) {
+ err = -ENOMEM;
+ goto err_remove;
+ }
+
+ platform_set_drvdata(pdev, info);
+
+ of_for_each_phandle(&it, err, node, "devices", NULL, 0) {
+ mtd = get_mtd_device_by_node(it.node);
+ if (IS_ERR(mtd)) {
+ of_node_put(it.node);
+ err = -EPROBE_DEFER;
+ goto err_remove;
+ }
+
+ info->devices[info->num_devices++] = mtd;
+ }
+
+ info->cmtd = mtd_concat_create(info->devices, info->num_devices,
+ dev_name(&pdev->dev));
+ if (!info->cmtd) {
+ err = -ENXIO;
+ goto err_remove;
+ }
+
+ info->cmtd->dev.parent = &pdev->dev;
+ mtd_set_of_node(info->cmtd, node);
+ mtd_device_register(info->cmtd, NULL, 0);
+
+ return 0;
+
+err_remove:
+ virt_concat_remove(pdev);
+
+ return err;
+}
+
+static const struct of_device_id virt_concat_of_match[] = {
+ { .compatible = "mtd-concat", },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, virt_concat_of_match);
+
+static struct platform_driver virt_concat_driver = {
+ .probe = virt_concat_probe,
+ .remove = virt_concat_remove,
+ .driver = {
+ .name = "virt-mtdconcat",
+ .of_match_table = virt_concat_of_match,
+ },
+};
+
+module_platform_driver(virt_concat_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Bernhard Frauendienst <kernel@nospam.obeliks.de>");
+MODULE_DESCRIPTION("Virtual concat MTD device driver");

View File

@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+MODULE_ALIAS("nf-flow-table-hw");
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -4917,6 +4917,14 @@ static int nf_tables_flowtable_parse_hoo
@@ -4933,6 +4933,14 @@ static int nf_tables_flowtable_parse_hoo
if (err < 0)
goto err1;
@ -521,7 +521,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
ops = kzalloc(sizeof(struct nf_hook_ops) * n, GFP_KERNEL);
if (!ops) {
err = -ENOMEM;
@@ -5047,10 +5055,19 @@ static int nf_tables_newflowtable(struct
@@ -5063,10 +5071,19 @@ static int nf_tables_newflowtable(struct
}
flowtable->data.type = type;
@ -541,7 +541,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
flowtable);
if (err < 0)
@@ -5148,7 +5165,8 @@ static int nf_tables_fill_flowtable_info
@@ -5164,7 +5181,8 @@ static int nf_tables_fill_flowtable_info
nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),

View File

@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2455,7 +2455,7 @@ static inline int pskb_network_may_pull(
@@ -2460,7 +2460,7 @@ static inline int pskb_network_may_pull(
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
*/
#ifndef NET_SKB_PAD

View File

@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#endif
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -777,6 +777,7 @@ struct sk_buff {
@@ -782,6 +782,7 @@ struct sk_buff {
__u8 tc_redirected:1;
__u8 tc_from_ingress:1;
#endif

View File

@ -18,7 +18,7 @@
uart->capabilities = up->capabilities;
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2233,6 +2233,7 @@ uart_report_port(struct uart_driver *drv
@@ -2240,6 +2240,7 @@ uart_report_port(struct uart_driver *drv
snprintf(address, sizeof(address),
"I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
break;
@ -26,7 +26,7 @@
case UPIO_MEM:
case UPIO_MEM16:
case UPIO_MEM32:
@@ -2897,6 +2898,7 @@ int uart_match_port(struct uart_port *po
@@ -2904,6 +2905,7 @@ int uart_match_port(struct uart_port *po
case UPIO_HUB6:
return (port1->iobase == port2->iobase) &&
(port1->hub6 == port2->hub6);

View File

@ -26382,7 +26382,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
return ret;
}
@@ -280,6 +291,36 @@ struct device *caam_jr_alloc(void)
@@ -281,6 +292,36 @@ struct device *caam_jr_alloc(void)
EXPORT_SYMBOL(caam_jr_alloc);
/**
@ -26419,7 +26419,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
* caam_jr_free() - Free the Job Ring
* @rdev - points to the dev that identifies the Job ring to
* be released.
@@ -496,15 +537,28 @@ static int caam_jr_probe(struct platform
@@ -497,15 +538,28 @@ static int caam_jr_probe(struct platform
return -ENOMEM;
}
@ -26455,7 +26455,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
/* Identify the interrupt */
jrpriv->irq = irq_of_parse_and_map(nprop, 0);
@@ -524,10 +578,12 @@ static int caam_jr_probe(struct platform
@@ -525,10 +579,12 @@ static int caam_jr_probe(struct platform
atomic_set(&jrpriv->tfm_count, 0);

View File

@ -987,7 +987,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
}
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -440,6 +440,7 @@ struct dmar_rmrr_unit {
@@ -441,6 +441,7 @@ struct dmar_rmrr_unit {
u64 end_address; /* reserved end address */
struct dmar_dev_scope *devices; /* target devices */
int devices_cnt; /* target device count */
@ -995,7 +995,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
};
struct dmar_atsr_unit {
@@ -4251,27 +4252,40 @@ static inline void init_iommu_pm_ops(voi
@@ -4267,27 +4268,40 @@ static inline void init_iommu_pm_ops(voi
int __init dmar_parse_one_rmrr(struct acpi_dmar_header *header, void *arg)
{
struct acpi_dmar_reserved_memory *rmrr;
@ -1041,7 +1041,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
}
static struct dmar_atsr_unit *dmar_find_atsr(struct acpi_dmar_atsr *atsr)
@@ -4485,6 +4499,7 @@ static void intel_iommu_free_dmars(void)
@@ -4501,6 +4515,7 @@ static void intel_iommu_free_dmars(void)
list_for_each_entry_safe(rmrru, rmrr_n, &dmar_rmrr_units, list) {
list_del(&rmrru->list);
dmar_free_dev_scope(&rmrru->devices, &rmrru->devices_cnt);
@ -1049,7 +1049,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
kfree(rmrru);
}
@@ -5220,6 +5235,45 @@ static void intel_iommu_remove_device(st
@@ -5236,6 +5251,45 @@ static void intel_iommu_remove_device(st
iommu_device_unlink(iommu->iommu_dev, dev);
}
@ -1095,7 +1095,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
#ifdef CONFIG_INTEL_IOMMU_SVM
#define MAX_NR_PASID_BITS (20)
static inline unsigned long intel_iommu_get_pts(struct intel_iommu *iommu)
@@ -5350,19 +5404,21 @@ struct intel_iommu *intel_svm_device_to_
@@ -5366,19 +5420,21 @@ struct intel_iommu *intel_svm_device_to_
#endif /* CONFIG_INTEL_IOMMU_SVM */
static const struct iommu_ops intel_iommu_ops = {

View File

@ -402,10 +402,10 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
+ goto out_master_put;
}
dspi_init(dspi);
dspi->clk = devm_clk_get(&pdev->dev, "dspi");
@@ -740,6 +1031,13 @@ static int dspi_probe(struct platform_de
if (ret)
goto out_master_put;
goto out_clk_put;
}
+ if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) {
+ if (dspi_request_dma(dspi, res->start)) {

View File

@ -1658,7 +1658,7 @@ Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
return IRQ_HANDLED;
}
}
@@ -923,12 +932,32 @@ int usb_otg_start(struct platform_device
@@ -925,12 +934,32 @@ int usb_otg_start(struct platform_device
temp &= ~(PORTSC_PHY_TYPE_SEL | PORTSC_PTW);
switch (pdata->phy_mode) {
case FSL_USB2_PHY_ULPI:

View File

@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -3962,6 +3962,15 @@ static int mvneta_ethtool_set_wol(struct
@@ -3961,6 +3961,15 @@ static int mvneta_ethtool_set_wol(struct
return ret;
}
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
static const struct net_device_ops mvneta_netdev_ops = {
.ndo_open = mvneta_open,
.ndo_stop = mvneta_stop,
@@ -3972,6 +3981,7 @@ static const struct net_device_ops mvnet
@@ -3971,6 +3980,7 @@ static const struct net_device_ops mvnet
.ndo_fix_features = mvneta_fix_features,
.ndo_get_stats64 = mvneta_get_stats64,
.ndo_do_ioctl = mvneta_ioctl,

View File

@ -278,7 +278,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
if (!pp->neta_armada3700) {
for_each_online_cpu(cpu) {
@@ -3252,103 +3209,232 @@ static int mvneta_set_mac_addr(struct ne
@@ -3251,103 +3208,232 @@ static int mvneta_set_mac_addr(struct ne
return 0;
}
@ -585,7 +585,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
/* Electing a CPU must be done in an atomic way: it should be done
@@ -3627,10 +3713,9 @@ static int mvneta_stop(struct net_device
@@ -3626,10 +3712,9 @@ static int mvneta_stop(struct net_device
static int mvneta_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
@ -598,7 +598,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
/* Ethtool methods */
@@ -3641,44 +3726,25 @@ mvneta_ethtool_set_link_ksettings(struct
@@ -3640,44 +3725,25 @@ mvneta_ethtool_set_link_ksettings(struct
const struct ethtool_link_ksettings *cmd)
{
struct mvneta_port *pp = netdev_priv(ndev);
@ -657,7 +657,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
/* Set interrupt coalescing for ethtools */
@@ -3770,6 +3836,22 @@ static int mvneta_ethtool_set_ringparam(
@@ -3769,6 +3835,22 @@ static int mvneta_ethtool_set_ringparam(
return 0;
}
@ -680,7 +680,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
static void mvneta_ethtool_get_strings(struct net_device *netdev, u32 sset,
u8 *data)
{
@@ -3786,26 +3868,35 @@ static void mvneta_ethtool_update_stats(
@@ -3785,26 +3867,35 @@ static void mvneta_ethtool_update_stats(
{
const struct mvneta_statistic *s;
void __iomem *base = pp->base;
@ -721,7 +721,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
}
@@ -3940,28 +4031,65 @@ static int mvneta_ethtool_get_rxfh(struc
@@ -3939,28 +4030,65 @@ static int mvneta_ethtool_get_rxfh(struc
static void mvneta_ethtool_get_wol(struct net_device *dev,
struct ethtool_wolinfo *wol)
{
@ -795,7 +795,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
static u16 mvneta_select_queue(struct net_device *dev, struct sk_buff *skb,
void *accel_priv,
select_queue_fallback_t fallback)
@@ -3985,13 +4113,15 @@ static const struct net_device_ops mvnet
@@ -3984,13 +4112,15 @@ static const struct net_device_ops mvnet
};
static const struct ethtool_ops mvneta_eth_tool_ops = {
@ -812,7 +812,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
.get_strings = mvneta_ethtool_get_strings,
.get_ethtool_stats = mvneta_ethtool_get_stats,
.get_sset_count = mvneta_ethtool_get_sset_count,
@@ -3999,10 +4129,12 @@ static const struct ethtool_ops mvneta_e
@@ -3998,10 +4128,12 @@ static const struct ethtool_ops mvneta_e
.get_rxnfc = mvneta_ethtool_get_rxnfc,
.get_rxfh = mvneta_ethtool_get_rxfh,
.set_rxfh = mvneta_ethtool_set_rxfh,
@ -826,7 +826,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
};
/* Initialize hw */
@@ -4147,14 +4279,13 @@ static int mvneta_probe(struct platform_
@@ -4146,14 +4278,13 @@ static int mvneta_probe(struct platform_
{
struct resource *res;
struct device_node *dn = pdev->dev.of_node;
@ -842,7 +842,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
int tx_csum_limit;
int phy_mode;
int err;
@@ -4170,31 +4301,11 @@ static int mvneta_probe(struct platform_
@@ -4169,31 +4300,11 @@ static int mvneta_probe(struct platform_
goto err_free_netdev;
}
@ -875,7 +875,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
dev->tx_queue_len = MVNETA_MAX_TXD;
@@ -4205,12 +4316,7 @@ static int mvneta_probe(struct platform_
@@ -4204,12 +4315,7 @@ static int mvneta_probe(struct platform_
pp = netdev_priv(dev);
spin_lock_init(&pp->lock);
@ -889,7 +889,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
pp->rxq_def = rxq_def;
@@ -4232,7 +4338,7 @@ static int mvneta_probe(struct platform_
@@ -4231,7 +4337,7 @@ static int mvneta_probe(struct platform_
pp->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(pp->clk)) {
err = PTR_ERR(pp->clk);
@ -898,7 +898,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
}
clk_prepare_enable(pp->clk);
@@ -4358,6 +4464,14 @@ static int mvneta_probe(struct platform_
@@ -4357,6 +4463,14 @@ static int mvneta_probe(struct platform_
/* 9676 == 9700 - 20 and rounding to 8 */
dev->max_mtu = 9676;
@ -913,7 +913,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
err = register_netdev(dev);
if (err < 0) {
dev_err(&pdev->dev, "failed to register\n");
@@ -4369,14 +4483,6 @@ static int mvneta_probe(struct platform_
@@ -4368,14 +4482,6 @@ static int mvneta_probe(struct platform_
platform_set_drvdata(pdev, pp->dev);
@ -928,7 +928,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
return 0;
err_netdev:
@@ -4387,16 +4493,14 @@ err_netdev:
@@ -4386,16 +4492,14 @@ err_netdev:
1 << pp->id);
}
err_free_stats:
@ -947,7 +947,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
err_free_irq:
irq_dispose_mapping(dev->irq);
err_free_netdev:
@@ -4408,7 +4512,6 @@ err_free_netdev:
@@ -4407,7 +4511,6 @@ err_free_netdev:
static int mvneta_remove(struct platform_device *pdev)
{
struct net_device *dev = platform_get_drvdata(pdev);
@ -955,7 +955,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
struct mvneta_port *pp = netdev_priv(dev);
unregister_netdev(dev);
@@ -4416,10 +4519,8 @@ static int mvneta_remove(struct platform
@@ -4415,10 +4518,8 @@ static int mvneta_remove(struct platform
clk_disable_unprepare(pp->clk);
free_percpu(pp->ports);
free_percpu(pp->stats);
@ -967,7 +967,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
free_netdev(dev);
if (pp->bm_priv) {
@@ -4471,9 +4572,6 @@ static int mvneta_resume(struct device *
@@ -4470,9 +4571,6 @@ static int mvneta_resume(struct device *
return err;
}

View File

@ -18,7 +18,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
struct device_node *dn;
unsigned int tx_csum_limit;
struct phylink *phylink;
@@ -4316,6 +4317,7 @@ static int mvneta_probe(struct platform_
@@ -4315,6 +4316,7 @@ static int mvneta_probe(struct platform_
pp = netdev_priv(dev);
spin_lock_init(&pp->lock);

View File

@ -34,7 +34,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
phylink_start(pp->phylink);
netif_tx_start_all_queues(pp->dev);
@@ -3543,8 +3541,7 @@ static int mvneta_cpu_online(unsigned in
@@ -3542,8 +3540,7 @@ static int mvneta_cpu_online(unsigned in
on_each_cpu(mvneta_percpu_unmask_interrupt, pp, true);
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
MVNETA_CAUSE_PHY_STATUS_CHANGE |
@ -44,7 +44,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
netif_tx_start_all_queues(pp->dev);
spin_unlock(&pp->lock);
return 0;
@@ -3585,8 +3582,7 @@ static int mvneta_cpu_dead(unsigned int
@@ -3584,8 +3581,7 @@ static int mvneta_cpu_dead(unsigned int
on_each_cpu(mvneta_percpu_unmask_interrupt, pp, true);
mvreg_write(pp, MVNETA_INTR_MISC_MASK,
MVNETA_CAUSE_PHY_STATUS_CHANGE |

View File

@ -10,7 +10,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -4046,6 +4046,22 @@ static int mvneta_ethtool_set_wol(struct
@@ -4045,6 +4045,22 @@ static int mvneta_ethtool_set_wol(struct
return ret;
}
@ -33,7 +33,7 @@ Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
static int mvneta_ethtool_get_eee(struct net_device *dev,
struct ethtool_eee *eee)
{
@@ -4130,6 +4146,8 @@ static const struct ethtool_ops mvneta_e
@@ -4129,6 +4145,8 @@ static const struct ethtool_ops mvneta_e
.set_link_ksettings = mvneta_ethtool_set_link_ksettings,
.get_wol = mvneta_ethtool_get_wol,
.set_wol = mvneta_ethtool_set_wol,

View File

@ -15,7 +15,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -4046,22 +4046,6 @@ static int mvneta_ethtool_set_wol(struct
@@ -4045,22 +4045,6 @@ static int mvneta_ethtool_set_wol(struct
return ret;
}
@ -38,7 +38,7 @@ Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
static int mvneta_ethtool_get_eee(struct net_device *dev,
struct ethtool_eee *eee)
{
@@ -4146,8 +4130,6 @@ static const struct ethtool_ops mvneta_e
@@ -4145,8 +4129,6 @@ static const struct ethtool_ops mvneta_e
.set_link_ksettings = mvneta_ethtool_set_link_ksettings,
.get_wol = mvneta_ethtool_get_wol,
.set_wol = mvneta_ethtool_set_wol,

View File

@ -0,0 +1,73 @@
From 1a990fefb641398fb580a0ea0be99b0ff27cbb9b Mon Sep 17 00:00:00 2001
From: Baruch Siach <baruch@tkos.co.il>
Date: Thu, 21 Jun 2018 20:40:23 +0300
Subject: [PATCH] rtc: armada38x: reset after rtc power loss
When the RTC block looses power it needs a reset sequence to make it
usable again. Otherwise, writes to the time register have no effect.
This reset sequence combines information from the mvebu_rtc driver in
the Marvell provided U-Boot, and the SolidRun provided U-Boot repo.
Tested on the Armada 388 based SolidRun Clearfog Base.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Acked-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
drivers/rtc/rtc-armada38x.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
--- a/drivers/rtc/rtc-armada38x.c
+++ b/drivers/rtc/rtc-armada38x.c
@@ -30,6 +30,8 @@
#define RTC_IRQ_FREQ_1HZ BIT(2)
#define RTC_CCR 0x18
#define RTC_CCR_MODE BIT(15)
+#define RTC_CONF_TEST 0x1C
+#define RTC_NOMINAL_TIMING BIT(13)
#define RTC_TIME 0xC
#define RTC_ALARM1 0x10
@@ -75,6 +77,7 @@ struct armada38x_rtc {
void __iomem *regs_soc;
spinlock_t lock;
int irq;
+ bool initialized;
struct value_to_freq *val_to_freq;
struct armada38x_rtc_data *data;
};
@@ -226,6 +229,23 @@ static int armada38x_rtc_read_time(struc
return 0;
}
+static void armada38x_rtc_reset(struct armada38x_rtc *rtc)
+{
+ u32 reg;
+
+ reg = rtc->data->read_rtc_reg(rtc, RTC_CONF_TEST);
+ /* If bits [7:0] are non-zero, assume RTC was uninitialized */
+ if (reg & 0xff) {
+ rtc_delayed_write(0, rtc, RTC_CONF_TEST);
+ msleep(500); /* Oscillator startup time */
+ rtc_delayed_write(0, rtc, RTC_TIME);
+ rtc_delayed_write(SOC_RTC_ALARM1 | SOC_RTC_ALARM2, rtc,
+ RTC_STATUS);
+ rtc_delayed_write(RTC_NOMINAL_TIMING, rtc, RTC_CCR);
+ }
+ rtc->initialized = true;
+}
+
static int armada38x_rtc_set_time(struct device *dev, struct rtc_time *tm)
{
struct armada38x_rtc *rtc = dev_get_drvdata(dev);
@@ -237,6 +257,9 @@ static int armada38x_rtc_set_time(struct
if (ret)
goto out;
+ if (!rtc->initialized)
+ armada38x_rtc_reset(rtc);
+
spin_lock_irqsave(&rtc->lock, flags);
rtc_delayed_write(time, rtc, RTC_TIME);
spin_unlock_irqrestore(&rtc->lock, flags);

View File

@ -57,13 +57,14 @@ Signed-off-by: Ian Pozella <Ian.Pozella@imgtec.com>
source "drivers/mtd/ubi/Kconfig"
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
@@ -37,5 +37,6 @@ inftl-objs := inftlcore.o inftlmount.o
@@ -37,6 +37,7 @@ inftl-objs := inftlcore.o inftlmount.o
obj-y += chips/ lpddr/ maps/ devices/ nand/ onenand/ tests/
+obj-$(CONFIG_MTD_SPI_NAND) += spi-nand/
obj-$(CONFIG_MTD_SPI_NOR) += spi-nor/
obj-$(CONFIG_MTD_UBI) += ubi/
--- /dev/null
+++ b/drivers/mtd/spi-nand/Kconfig
@@ -0,0 +1,7 @@

View File

@ -0,0 +1,45 @@
From: Tobias Wolf <dev-NTEO@vplace.de>
Subject: [v2] MIPS: Fix memory reservation in bootmem_init for certain non-usermem setups
Commit 67a3ba25aa95 ("MIPS: Fix incorrect mem=X@Y handling") introduced a new
issue for rt288x where "PHYS_OFFSET" is 0x0 but the calculated "ramstart" is
not. As the prerequisite of custom memory map has been removed, this results
in the full memory range of 0x0 - 0x8000000 to be marked as reserved for this
platform.
v2: Correctly compare that usermem is not null.
This patch adds the originally intended prerequisite again.
Signed-off-by: Tobias Wolf <dev-NTEO@vplace.de>
---
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -369,6 +369,8 @@ static unsigned long __init bootmap_byte
return ALIGN(bytes, sizeof(long));
}
+static int usermem __initdata;
+
static void __init bootmem_init(void)
{
unsigned long reserved_end;
@@ -442,7 +444,7 @@ static void __init bootmem_init(void)
/*
* Reserve any memory between the start of RAM and PHYS_OFFSET
*/
- if (ramstart > PHYS_OFFSET)
+ if (usermem && ramstart > PHYS_OFFSET)
add_memory_region(PHYS_OFFSET, ramstart - PHYS_OFFSET,
BOOT_MEM_RESERVED);
@@ -652,8 +654,6 @@ static void __init bootmem_init(void)
* initialization hook for anything else was introduced.
*/
-static int usermem __initdata;
-
static int __init early_parse_mem(char *p)
{
phys_addr_t start, size;

View File

@ -10,7 +10,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -411,6 +411,9 @@ uart_get_baud_rate(struct uart_port *por
@@ -418,6 +418,9 @@ uart_get_baud_rate(struct uart_port *por
break;
}

View File

@ -0,0 +1,38 @@
From ef4c422d167afcd15c8bae1f841ef59334c1f973 Mon Sep 17 00:00:00 2001
From: Luis Araneda <luaraneda@gmail.com>
Date: Thu, 12 Jul 2018 00:10:19 -0400
Subject: [PATCH] ARM: dts: zynq: Set correct manufacturer for ZedBoard and
MicroZed boards
Both boards are made by Avnet, Inc. So add an additional
value to the compatible property
Signed-off-by: Luis Araneda <luaraneda@gmail.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---
arch/arm/boot/dts/zynq-microzed.dts | 2 +-
arch/arm/boot/dts/zynq-zed.dts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
--- a/arch/arm/boot/dts/zynq-microzed.dts
+++ b/arch/arm/boot/dts/zynq-microzed.dts
@@ -16,7 +16,7 @@
/ {
model = "Zynq MicroZED Development Board";
- compatible = "xlnx,zynq-microzed", "xlnx,zynq-7000";
+ compatible = "avnet,zynq-microzed", "xlnx,zynq-microzed", "xlnx,zynq-7000";
aliases {
ethernet0 = &gem0;
--- a/arch/arm/boot/dts/zynq-zed.dts
+++ b/arch/arm/boot/dts/zynq-zed.dts
@@ -16,7 +16,7 @@
/ {
model = "Zynq Zed Development Board";
- compatible = "xlnx,zynq-zed", "xlnx,zynq-7000";
+ compatible = "avnet,zynq-zed", "xlnx,zynq-zed", "xlnx,zynq-7000";
aliases {
ethernet0 = &gem0;