patches for 4.7.0
This commit is contained in:
@@ -47,10 +47,10 @@ diff -Nurp linux-4.2.2/arch/mips/Kconfig linux-4.2.2-3rd/arch/mips/Kconfig
|
||||
diff -Nurp linux-4.2.2/arch/powerpc/Kconfig linux-4.2.2-3rd/arch/powerpc/Kconfig
|
||||
--- linux-4.2.2/arch/powerpc/Kconfig 2015-08-30 21:34:09.000000000 +0300
|
||||
+++ linux-4.2.2-3rd/arch/powerpc/Kconfig 2015-09-29 23:02:44.025347276 +0300
|
||||
@@ -1092,3 +1092,5 @@ config PPC_LIB_RHEAP
|
||||
bool
|
||||
|
||||
@@ -1112,3 +1112,5 @@ config PPC_LIB_RHEAP
|
||||
source "arch/powerpc/kvm/Kconfig"
|
||||
|
||||
source "kernel/livepatch/Kconfig"
|
||||
+
|
||||
+source "3rdparty/Kconfig"
|
||||
diff -Nurp linux-4.2.2/arch/sparc/Kconfig linux-4.2.2-3rd/arch/sparc/Kconfig
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
Add supprto for 4.7 series kernels.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
diff -urp linux/3rdparty/ndiswrapper.orig/wrapndis.c linux/3rdparty/ndiswrapper/wrapndis.c
|
||||
--- linux/3rdparty/ndiswrapper.orig/wrapndis.c 2016-07-04 20:00:13.000000000 +0300
|
||||
+++ linux/3rdparty/ndiswrapper/wrapndis.c 2016-07-04 20:23:29.454819702 +0300
|
||||
@@ -704,7 +704,11 @@ static void tx_worker(struct work_struct
|
||||
n = wnd->max_tx_packets;
|
||||
n = mp_tx_packets(wnd, wnd->tx_ring_start, n);
|
||||
if (n) {
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0)
|
||||
wnd->net_dev->trans_start = jiffies;
|
||||
+#else
|
||||
+ netif_trans_update(wnd->net_dev);
|
||||
+#endif
|
||||
wnd->tx_ring_start =
|
||||
(wnd->tx_ring_start + n) % TX_RING_SIZE;
|
||||
wnd->is_tx_ring_full = 0;
|
||||
@@ -0,0 +1,178 @@
|
||||
|
||||
Fix building with kernel-4.7 series.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c | 32 ++++++++++++++---------------
|
||||
3rdparty/rtl8723bs/os_dep/wifi_regd.c | 6 ++---
|
||||
2 files changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff -urp linux/3rdparty/rtl8723bs.orig/os_dep/ioctl_cfg80211.c linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c
|
||||
--- linux/3rdparty/rtl8723bs.orig/os_dep/ioctl_cfg80211.c 2016-07-04 20:00:13.000000000 +0300
|
||||
+++ linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c 2016-07-04 20:37:45.054379270 +0300
|
||||
@@ -44,7 +44,7 @@ static const u32 rtw_cipher_suites[] = {
|
||||
}
|
||||
|
||||
#define CHAN2G(_channel, _freq, _flags) { \
|
||||
- .band = IEEE80211_BAND_2GHZ, \
|
||||
+ .band = NL80211_BAND_2GHZ, \
|
||||
.center_freq = (_freq), \
|
||||
.hw_value = (_channel), \
|
||||
.flags = (_flags), \
|
||||
@@ -120,13 +120,13 @@ static void rtw_2g_rates_init(struct iee
|
||||
}
|
||||
|
||||
static struct ieee80211_supported_band *rtw_spt_band_alloc(
|
||||
- enum ieee80211_band band
|
||||
+ enum nl80211_band band
|
||||
)
|
||||
{
|
||||
struct ieee80211_supported_band *spt_band = NULL;
|
||||
int n_channels, n_bitrates;
|
||||
|
||||
- if (band == IEEE80211_BAND_2GHZ)
|
||||
+ if (band == NL80211_BAND_2GHZ)
|
||||
{
|
||||
n_channels = RTW_2G_CHANNELS_NUM;
|
||||
n_bitrates = RTW_G_RATES_NUM;
|
||||
@@ -150,7 +150,7 @@ static struct ieee80211_supported_band *
|
||||
spt_band->n_channels = n_channels;
|
||||
spt_band->n_bitrates = n_bitrates;
|
||||
|
||||
- if (band == IEEE80211_BAND_2GHZ)
|
||||
+ if (band == NL80211_BAND_2GHZ)
|
||||
{
|
||||
rtw_2g_channels_init(spt_band->channels);
|
||||
rtw_2g_rates_init(spt_band->bitrates);
|
||||
@@ -170,7 +170,7 @@ static void rtw_spt_band_free(struct iee
|
||||
if (!spt_band)
|
||||
return;
|
||||
|
||||
- if (spt_band->band == IEEE80211_BAND_2GHZ)
|
||||
+ if (spt_band->band == NL80211_BAND_2GHZ)
|
||||
{
|
||||
size = sizeof(struct ieee80211_supported_band)
|
||||
+ sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
|
||||
@@ -232,7 +232,7 @@ static int rtw_ieee80211_channel_to_freq
|
||||
{
|
||||
/* see 802.11 17.3.8.3.2 and Annex J
|
||||
* there are overlapping channel numbers in 5GHz and 2GHz bands */
|
||||
- if (band == IEEE80211_BAND_2GHZ) {
|
||||
+ if (band == NL80211_BAND_2GHZ) {
|
||||
if (chan == 14)
|
||||
return 2484;
|
||||
else if (chan < 14)
|
||||
@@ -336,7 +336,7 @@ struct cfg80211_bss *rtw_cfg80211_inform
|
||||
|
||||
|
||||
channel = pnetwork->network.Configuration.DSConfig;
|
||||
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
|
||||
+ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ);
|
||||
|
||||
notify_channel = ieee80211_get_channel(wiphy, freq);
|
||||
|
||||
@@ -420,7 +420,7 @@ int rtw_cfg80211_check_bss(struct adapte
|
||||
if (!(pnetwork) || !(padapter->rtw_wdev))
|
||||
return false;
|
||||
|
||||
- freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
|
||||
+ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, NL80211_BAND_2GHZ);
|
||||
|
||||
notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq);
|
||||
bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel,
|
||||
@@ -542,7 +542,7 @@ check_bss:
|
||||
u32 freq;
|
||||
u16 channel = cur_network->network.Configuration.DSConfig;
|
||||
|
||||
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
|
||||
+ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ);
|
||||
|
||||
notify_channel = ieee80211_get_channel(wiphy, freq);
|
||||
|
||||
@@ -3064,7 +3064,7 @@ void rtw_cfg80211_rx_action(struct adapt
|
||||
else
|
||||
DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
|
||||
|
||||
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
|
||||
+ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ);
|
||||
|
||||
rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
|
||||
}
|
||||
@@ -3311,7 +3311,7 @@ static int cfg80211_rtw_sched_scan_stop(
|
||||
}
|
||||
#endif /* CONFIG_PNO_SUPPORT */
|
||||
|
||||
-static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum ieee80211_band band, u8 rf_type)
|
||||
+static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum nl80211_band band, u8 rf_type)
|
||||
{
|
||||
|
||||
#define MAX_BIT_RATE_40MHZ_MCS15 300 /* Mbps */
|
||||
@@ -3335,7 +3335,7 @@ static void rtw_cfg80211_init_ht_capab(s
|
||||
ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
|
||||
|
||||
/*
|
||||
- *hw->wiphy->bands[IEEE80211_BAND_2GHZ]
|
||||
+ *hw->wiphy->bands[NL80211_BAND_2GHZ]
|
||||
*base on ant_num
|
||||
*rx_mask: RX mask
|
||||
*if rx_ant = 1 rx_mask[0]= 0xff;==>MCS0-MCS7
|
||||
@@ -3379,9 +3379,9 @@ void rtw_cfg80211_init_wiphy(struct adap
|
||||
DBG_8192C("%s:rf_type =%d\n", __func__, rf_type);
|
||||
|
||||
{
|
||||
- bands = wiphy->bands[IEEE80211_BAND_2GHZ];
|
||||
+ bands = wiphy->bands[NL80211_BAND_2GHZ];
|
||||
if (bands)
|
||||
- rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
|
||||
+ rtw_cfg80211_init_ht_capab(&bands->ht_cap, NL80211_BAND_2GHZ, rf_type);
|
||||
}
|
||||
|
||||
/* init regulary domain */
|
||||
@@ -3417,7 +3417,7 @@ static void rtw_cfg80211_preinit_wiphy(s
|
||||
wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
|
||||
|
||||
/* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
|
||||
- wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);
|
||||
+ wiphy->bands[NL80211_BAND_2GHZ] = rtw_spt_band_alloc(NL80211_BAND_2GHZ);
|
||||
|
||||
wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
|
||||
wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
|
||||
@@ -3564,7 +3564,7 @@ void rtw_wdev_free(struct wireless_dev *
|
||||
if (!wdev)
|
||||
return;
|
||||
|
||||
- rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]);
|
||||
+ rtw_spt_band_free(wdev->wiphy->bands[NL80211_BAND_2GHZ]);
|
||||
|
||||
wiphy_free(wdev->wiphy);
|
||||
|
||||
diff -urp linux/3rdparty/rtl8723bs.orig/os_dep/wifi_regd.c linux/3rdparty/rtl8723bs/os_dep/wifi_regd.c
|
||||
--- linux/3rdparty/rtl8723bs.orig/os_dep/wifi_regd.c 2016-07-04 20:00:13.000000000 +0300
|
||||
+++ linux/3rdparty/rtl8723bs/os_dep/wifi_regd.c 2016-07-04 20:35:31.427278665 +0300
|
||||
@@ -105,7 +105,7 @@ static int rtw_ieee80211_channel_to_freq
|
||||
/* see 802.11 17.3.8.3.2 and Annex J
|
||||
* there are overlapping channel numbers in 5GHz and 2GHz bands */
|
||||
|
||||
- /* IEEE80211_BAND_2GHZ */
|
||||
+ /* NL80211_BAND_2GHZ */
|
||||
if (chan == 14)
|
||||
return 2484;
|
||||
else if (chan < 14)
|
||||
@@ -128,7 +128,7 @@ static void _rtw_reg_apply_flags(struct
|
||||
u32 freq;
|
||||
|
||||
/* all channels disable */
|
||||
- for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
|
||||
+ for (i = 0; i < NUM_NL80211_BANDS; i++) {
|
||||
sband = wiphy->bands[i];
|
||||
|
||||
if (sband) {
|
||||
@@ -146,7 +146,7 @@ static void _rtw_reg_apply_flags(struct
|
||||
channel = channel_set[i].ChannelNum;
|
||||
freq =
|
||||
rtw_ieee80211_channel_to_frequency(channel,
|
||||
- IEEE80211_BAND_2GHZ);
|
||||
+ NL80211_BAND_2GHZ);
|
||||
|
||||
ch = ieee80211_get_channel(wiphy, freq);
|
||||
if (ch) {
|
||||
-98
@@ -1,98 +0,0 @@
|
||||
From 2f38b1b16d9280689e5cfa47a4c50956bf437f0d Mon Sep 17 00:00:00 2001
|
||||
From: Lv Zheng <lv.zheng@intel.com>
|
||||
Date: Tue, 21 Jun 2016 12:34:15 +0800
|
||||
Subject: [PATCH] ACPICA: Namespace: Fix deadlock triggered by MLC support in
|
||||
dynamic table loading
|
||||
|
||||
The new module-level code (MLC) approach invokes MLC on the per-table
|
||||
basis, but the dynamic loading support of this is incorrect because
|
||||
of the lock order:
|
||||
|
||||
acpi_ns_evaluate
|
||||
acpi_ex_enter_intperter
|
||||
acpi_ns_load_table (triggered by Load opcode)
|
||||
acpi_ns_exec_module_code_list
|
||||
acpi_ex_enter_intperter
|
||||
|
||||
The regression is introduced by the following commit:
|
||||
|
||||
Commit: 2785ce8d0da1cac9d8f78615e116cf929e9a9123
|
||||
ACPICA Commit: 071eff738c59eda1792ac24b3b688b61691d7e7c
|
||||
Subject: ACPICA: Add per-table execution of module-level code
|
||||
|
||||
This patch fixes this regression by unlocking the interpreter lock
|
||||
before invoking MLC. However, the unlocking is done to the
|
||||
acpi_ns_load_table(), in which the interpreter lock should be locked
|
||||
by acpi_ns_parse_table() but it wasn't.
|
||||
|
||||
Fixes: 2785ce8d0da1 (ACPICA: Add per-table execution of module-level code)
|
||||
Reported-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
|
||||
Cc: 4.5+ <stable@vger.kernel.org> # 4.5+
|
||||
[ rjw : Subject ]
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/acpica/exconfig.c | 2 ++
|
||||
drivers/acpi/acpica/nsparse.c | 9 +++++++--
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/acpica/exconfig.c b/drivers/acpi/acpica/exconfig.c
|
||||
index a1d177d..21932d6 100644
|
||||
--- a/drivers/acpi/acpica/exconfig.c
|
||||
+++ b/drivers/acpi/acpica/exconfig.c
|
||||
@@ -108,7 +108,9 @@ acpi_ex_add_table(u32 table_index,
|
||||
|
||||
/* Add the table to the namespace */
|
||||
|
||||
+ acpi_ex_exit_interpreter();
|
||||
status = acpi_ns_load_table(table_index, parent_node);
|
||||
+ acpi_ex_enter_interpreter();
|
||||
if (ACPI_FAILURE(status)) {
|
||||
acpi_ut_remove_reference(obj_desc);
|
||||
*ddb_handle = NULL;
|
||||
diff --git a/drivers/acpi/acpica/nsparse.c b/drivers/acpi/acpica/nsparse.c
|
||||
index f631a47..1783cd7 100644
|
||||
--- a/drivers/acpi/acpica/nsparse.c
|
||||
+++ b/drivers/acpi/acpica/nsparse.c
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "acparser.h"
|
||||
#include "acdispat.h"
|
||||
#include "actables.h"
|
||||
+#include "acinterp.h"
|
||||
|
||||
#define _COMPONENT ACPI_NAMESPACE
|
||||
ACPI_MODULE_NAME("nsparse")
|
||||
@@ -170,6 +171,8 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
|
||||
|
||||
ACPI_FUNCTION_TRACE(ns_parse_table);
|
||||
|
||||
+ acpi_ex_enter_interpreter();
|
||||
+
|
||||
/*
|
||||
* AML Parse, pass 1
|
||||
*
|
||||
@@ -185,7 +188,7 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
|
||||
status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS1,
|
||||
table_index, start_node);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
- return_ACPI_STATUS(status);
|
||||
+ goto error_exit;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -201,8 +204,10 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
|
||||
status = acpi_ns_one_complete_parse(ACPI_IMODE_LOAD_PASS2,
|
||||
table_index, start_node);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
- return_ACPI_STATUS(status);
|
||||
+ goto error_exit;
|
||||
}
|
||||
|
||||
+error_exit:
|
||||
+ acpi_ex_exit_interpreter();
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
--
|
||||
2.9.0
|
||||
|
||||
+2
-5
@@ -134,15 +134,12 @@ diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
index 8aaf193..04504b7 100644
|
||||
--- a/arch/arm/boot/dts/bcm283x.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm283x.dtsi
|
||||
@@ -230,6 +230,8 @@
|
||||
@@ -287,6 +287,8 @@
|
||||
compatible = "brcm,bcm2835-usb";
|
||||
reg = <0x7e980000 0x10000>;
|
||||
interrupts = <1 9>;
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
--
|
||||
2.8.1
|
||||
|
||||
v3d: v3d@7ec00000 {
|
||||
|
||||
-60
@@ -1,60 +0,0 @@
|
||||
From 6b7e9cde49691e04314342b7dce90c67ad567fcc Mon Sep 17 00:00:00 2001
|
||||
From: "Martin K. Petersen" <martin.petersen@oracle.com>
|
||||
Date: Thu, 12 May 2016 22:17:34 -0400
|
||||
Subject: [PATCH] sd: Fix rw_max for devices that report an optimal xfer size
|
||||
|
||||
For historic reasons, io_opt is in bytes and max_sectors in block layer
|
||||
sectors. This interface inconsistency is error prone and should be
|
||||
fixed. But for 4.4--4.7 let's make the unit difference explicit via a
|
||||
wrapper function.
|
||||
|
||||
Fixes: d0eb20a863ba ("sd: Optimal I/O size is in bytes, not sectors")
|
||||
Cc: stable@vger.kernel.org # 4.4+
|
||||
Reported-by: Fam Zheng <famz@redhat.com>
|
||||
Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
|
||||
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
Tested-by: Andrew Patterson <andrew.patterson@hpe.com>
|
||||
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
|
||||
---
|
||||
drivers/scsi/sd.c | 8 ++++----
|
||||
drivers/scsi/sd.h | 5 +++++
|
||||
2 files changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
|
||||
index f459dff..60bff78 100644
|
||||
--- a/drivers/scsi/sd.c
|
||||
+++ b/drivers/scsi/sd.c
|
||||
@@ -2867,10 +2867,10 @@ static int sd_revalidate_disk(struct gendisk *disk)
|
||||
if (sdkp->opt_xfer_blocks &&
|
||||
sdkp->opt_xfer_blocks <= dev_max &&
|
||||
sdkp->opt_xfer_blocks <= SD_DEF_XFER_BLOCKS &&
|
||||
- sdkp->opt_xfer_blocks * sdp->sector_size >= PAGE_SIZE)
|
||||
- rw_max = q->limits.io_opt =
|
||||
- sdkp->opt_xfer_blocks * sdp->sector_size;
|
||||
- else
|
||||
+ logical_to_bytes(sdp, sdkp->opt_xfer_blocks) >= PAGE_SIZE) {
|
||||
+ q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
|
||||
+ rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
|
||||
+ } else
|
||||
rw_max = BLK_DEF_MAX_SECTORS;
|
||||
|
||||
/* Combine with controller limits */
|
||||
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
|
||||
index 654630b..765a6f1 100644
|
||||
--- a/drivers/scsi/sd.h
|
||||
+++ b/drivers/scsi/sd.h
|
||||
@@ -151,6 +151,11 @@ static inline sector_t logical_to_sectors(struct scsi_device *sdev, sector_t blo
|
||||
return blocks << (ilog2(sdev->sector_size) - 9);
|
||||
}
|
||||
|
||||
+static inline unsigned int logical_to_bytes(struct scsi_device *sdev, sector_t blocks)
|
||||
+{
|
||||
+ return blocks * sdev->sector_size;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* A DIF-capable target device can be formatted with different
|
||||
* protection schemes. Currently 0 through 3 are defined:
|
||||
--
|
||||
2.9.0
|
||||
|
||||
+93
-81
@@ -4,6 +4,7 @@
|
||||
fs/exec.c | 1 +
|
||||
fs/fcntl.c | 1 +
|
||||
fs/file_table.c | 4 ++++
|
||||
fs/inode.c | 1 +
|
||||
fs/namespace.c | 2 ++
|
||||
fs/notify/group.c | 4 ++++
|
||||
fs/notify/mark.c | 4 ++++
|
||||
@@ -15,11 +16,11 @@
|
||||
security/commoncap.c | 2 ++
|
||||
security/device_cgroup.c | 2 ++
|
||||
security/security.c | 10 ++++++++++
|
||||
16 files changed, 40 insertions(+), 1 deletion(-)
|
||||
17 files changed, 41 insertions(+), 1 deletion(-)
|
||||
|
||||
diff -Nurp linux-4.6-aufs/fs/aufs/Kconfig linux-4.6-aufs-mod/fs/aufs/Kconfig
|
||||
--- linux-4.6-aufs/fs/aufs/Kconfig 2016-06-01 22:44:04.029679796 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/aufs/Kconfig 2016-06-01 22:44:52.623752681 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/aufs/Kconfig linux-4.7-rc6-aufs-mod/fs/aufs/Kconfig
|
||||
--- linux-4.7-rc6-aufs/fs/aufs/Kconfig 2016-07-04 19:02:29.246286120 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/aufs/Kconfig 2016-07-04 19:03:53.653714965 +0300
|
||||
@@ -1,5 +1,5 @@
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
@@ -27,10 +28,10 @@ diff -Nurp linux-4.6-aufs/fs/aufs/Kconfig linux-4.6-aufs-mod/fs/aufs/Kconfig
|
||||
help
|
||||
Aufs is a stackable unification filesystem such as Unionfs,
|
||||
which unifies several directories and provides a merged single
|
||||
diff -Nurp linux-4.6-aufs/fs/dcache.c linux-4.6-aufs-mod/fs/dcache.c
|
||||
--- linux-4.6-aufs/fs/dcache.c 2016-06-01 22:44:04.041679813 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/dcache.c 2016-06-01 22:44:52.623752681 +0300
|
||||
@@ -1261,6 +1261,7 @@ rename_retry:
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/dcache.c linux-4.7-rc6-aufs-mod/fs/dcache.c
|
||||
--- linux-4.7-rc6-aufs/fs/dcache.c 2016-07-04 19:02:29.260286196 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/dcache.c 2016-07-04 19:03:53.653714965 +0300
|
||||
@@ -1310,6 +1310,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
@@ -38,9 +39,9 @@ diff -Nurp linux-4.6-aufs/fs/dcache.c linux-4.6-aufs-mod/fs/dcache.c
|
||||
|
||||
/*
|
||||
* Search for at least 1 mount point in the dentry's subdirs.
|
||||
diff -Nurp linux-4.6-aufs/fs/exec.c linux-4.6-aufs-mod/fs/exec.c
|
||||
--- linux-4.6-aufs/fs/exec.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/exec.c 2016-06-01 22:44:52.624752682 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/exec.c linux-4.7-rc6-aufs-mod/fs/exec.c
|
||||
--- linux-4.7-rc6-aufs/fs/exec.c 2016-07-04 17:58:15.707773651 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/exec.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -104,6 +104,7 @@ bool path_noexec(const struct path *path
|
||||
return (path->mnt->mnt_flags & MNT_NOEXEC) ||
|
||||
(path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
|
||||
@@ -49,9 +50,9 @@ diff -Nurp linux-4.6-aufs/fs/exec.c linux-4.6-aufs-mod/fs/exec.c
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff -Nurp linux-4.6-aufs/fs/fcntl.c linux-4.6-aufs-mod/fs/fcntl.c
|
||||
--- linux-4.6-aufs/fs/fcntl.c 2016-06-01 22:44:04.041679813 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/fcntl.c 2016-06-01 22:44:52.624752682 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/fcntl.c linux-4.7-rc6-aufs-mod/fs/fcntl.c
|
||||
--- linux-4.7-rc6-aufs/fs/fcntl.c 2016-07-04 19:02:29.260286196 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/fcntl.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, un
|
||||
out:
|
||||
return error;
|
||||
@@ -60,9 +61,9 @@ diff -Nurp linux-4.6-aufs/fs/fcntl.c linux-4.6-aufs-mod/fs/fcntl.c
|
||||
|
||||
static void f_modown(struct file *filp, struct pid *pid, enum pid_type type,
|
||||
int force)
|
||||
diff -Nurp linux-4.6-aufs/fs/file_table.c linux-4.6-aufs-mod/fs/file_table.c
|
||||
--- linux-4.6-aufs/fs/file_table.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/file_table.c 2016-06-01 22:44:52.624752682 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/file_table.c linux-4.7-rc6-aufs-mod/fs/file_table.c
|
||||
--- linux-4.7-rc6-aufs/fs/file_table.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/file_table.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -147,6 +147,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
@@ -95,9 +96,20 @@ diff -Nurp linux-4.6-aufs/fs/file_table.c linux-4.6-aufs-mod/fs/file_table.c
|
||||
|
||||
void __init files_init(void)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/fs/namespace.c linux-4.6-aufs-mod/fs/namespace.c
|
||||
--- linux-4.6-aufs/fs/namespace.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/namespace.c 2016-06-01 22:44:52.625752684 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/inode.c linux-4.7-rc6-aufs-mod/fs/inode.c
|
||||
--- linux-4.7-rc6-aufs/fs/inode.c 2016-07-04 19:02:29.261286202 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/inode.c 2016-07-04 20:51:39.805168596 +0300
|
||||
@@ -1600,6 +1600,7 @@ int update_time(struct inode *inode, str
|
||||
|
||||
return update_time(inode, time, flags);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(update_time);
|
||||
|
||||
/**
|
||||
* touch_atime - update the access time
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/namespace.c linux-4.7-rc6-aufs-mod/fs/namespace.c
|
||||
--- linux-4.7-rc6-aufs/fs/namespace.c 2016-07-04 17:58:15.729773645 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/namespace.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -463,6 +463,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
@@ -106,7 +118,7 @@ diff -Nurp linux-4.6-aufs/fs/namespace.c linux-4.6-aufs-mod/fs/namespace.c
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -1811,6 +1812,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
@@ -1812,6 +1813,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -114,9 +126,9 @@ diff -Nurp linux-4.6-aufs/fs/namespace.c linux-4.6-aufs-mod/fs/namespace.c
|
||||
|
||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/fs/notify/group.c linux-4.6-aufs-mod/fs/notify/group.c
|
||||
--- linux-4.6-aufs/fs/notify/group.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/notify/group.c 2016-06-01 22:44:52.625752684 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/notify/group.c linux-4.7-rc6-aufs-mod/fs/notify/group.c
|
||||
--- linux-4.7-rc6-aufs/fs/notify/group.c 2016-07-04 17:58:15.742773641 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/notify/group.c 2016-07-04 19:03:53.655714975 +0300
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
@@ -125,7 +137,7 @@ diff -Nurp linux-4.6-aufs/fs/notify/group.c linux-4.6-aufs-mod/fs/notify/group.c
|
||||
|
||||
#include <linux/fsnotify_backend.h>
|
||||
#include "fsnotify.h"
|
||||
@@ -72,6 +73,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
@@ -81,6 +82,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
{
|
||||
atomic_inc(&group->refcnt);
|
||||
}
|
||||
@@ -133,7 +145,7 @@ diff -Nurp linux-4.6-aufs/fs/notify/group.c linux-4.6-aufs-mod/fs/notify/group.c
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
@@ -81,6 +83,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
@@ -90,6 +92,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
if (atomic_dec_and_test(&group->refcnt))
|
||||
fsnotify_final_destroy_group(group);
|
||||
}
|
||||
@@ -141,7 +153,7 @@ diff -Nurp linux-4.6-aufs/fs/notify/group.c linux-4.6-aufs-mod/fs/notify/group.c
|
||||
|
||||
/*
|
||||
* Create a new fsnotify_group and hold a reference for the group returned.
|
||||
@@ -109,6 +112,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
@@ -118,6 +121,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
|
||||
return group;
|
||||
}
|
||||
@@ -149,9 +161,9 @@ diff -Nurp linux-4.6-aufs/fs/notify/group.c linux-4.6-aufs-mod/fs/notify/group.c
|
||||
|
||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/fs/notify/mark.c linux-4.6-aufs-mod/fs/notify/mark.c
|
||||
--- linux-4.6-aufs/fs/notify/mark.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/notify/mark.c 2016-06-01 22:44:52.625752684 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/notify/mark.c linux-4.7-rc6-aufs-mod/fs/notify/mark.c
|
||||
--- linux-4.7-rc6-aufs/fs/notify/mark.c 2016-07-04 17:58:15.742773641 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/notify/mark.c 2016-07-04 19:03:53.655714975 +0300
|
||||
@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_m
|
||||
mark->free_mark(mark);
|
||||
}
|
||||
@@ -160,7 +172,7 @@ diff -Nurp linux-4.6-aufs/fs/notify/mark.c linux-4.6-aufs-mod/fs/notify/mark.c
|
||||
|
||||
/* Calculate mask of events for a list of marks */
|
||||
u32 fsnotify_recalc_mask(struct hlist_head *head)
|
||||
@@ -213,6 +214,7 @@ void fsnotify_destroy_mark(struct fsnoti
|
||||
@@ -230,6 +231,7 @@ void fsnotify_destroy_mark(struct fsnoti
|
||||
mutex_unlock(&group->mark_mutex);
|
||||
fsnotify_free_mark(mark);
|
||||
}
|
||||
@@ -168,7 +180,7 @@ diff -Nurp linux-4.6-aufs/fs/notify/mark.c linux-4.6-aufs-mod/fs/notify/mark.c
|
||||
|
||||
void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
|
||||
{
|
||||
@@ -398,6 +400,7 @@ err:
|
||||
@@ -415,6 +417,7 @@ err:
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -176,24 +188,24 @@ diff -Nurp linux-4.6-aufs/fs/notify/mark.c linux-4.6-aufs-mod/fs/notify/mark.c
|
||||
|
||||
int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
|
||||
struct inode *inode, struct vfsmount *mnt, int allow_dups)
|
||||
@@ -498,6 +501,7 @@ void fsnotify_init_mark(struct fsnotify_
|
||||
atomic_set(&mark->refcnt, 1);
|
||||
mark->free_mark = free_mark;
|
||||
@@ -521,6 +524,7 @@ void fsnotify_duplicate_mark(struct fsno
|
||||
new->mask = old->mask;
|
||||
new->free_mark = old->free_mark;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(fsnotify_init_mark);
|
||||
|
||||
static void fsnotify_mark_destroy(struct work_struct *work)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/fs/open.c linux-4.6-aufs-mod/fs/open.c
|
||||
--- linux-4.6-aufs/fs/open.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/open.c 2016-06-01 22:44:52.625752684 +0300
|
||||
/*
|
||||
* Nothing fancy, just initialize lists and locks and counters.
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/open.c linux-4.7-rc6-aufs-mod/fs/open.c
|
||||
--- linux-4.7-rc6-aufs/fs/open.c 2016-07-04 17:58:15.746773640 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/open.c 2016-07-04 19:03:53.655714975 +0300
|
||||
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(do_truncate);
|
||||
|
||||
long vfs_truncate(struct path *path, loff_t length)
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
@@ -678,6 +679,7 @@ int open_check_o_direct(struct file *f)
|
||||
}
|
||||
@@ -203,10 +215,10 @@ diff -Nurp linux-4.6-aufs/fs/open.c linux-4.6-aufs-mod/fs/open.c
|
||||
|
||||
static int do_dentry_open(struct file *f,
|
||||
struct inode *inode,
|
||||
diff -Nurp linux-4.6-aufs/fs/read_write.c linux-4.6-aufs-mod/fs/read_write.c
|
||||
--- linux-4.6-aufs/fs/read_write.c 2016-06-01 22:44:04.042679815 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/read_write.c 2016-06-01 22:44:52.626752685 +0300
|
||||
@@ -544,6 +544,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/read_write.c linux-4.7-rc6-aufs-mod/fs/read_write.c
|
||||
--- linux-4.7-rc6-aufs/fs/read_write.c 2016-07-04 19:02:29.262286207 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/read_write.c 2016-07-04 19:03:53.655714975 +0300
|
||||
@@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
return new_sync_read;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
@@ -214,7 +226,7 @@ diff -Nurp linux-4.6-aufs/fs/read_write.c linux-4.6-aufs-mod/fs/read_write.c
|
||||
|
||||
vfs_writef_t vfs_writef(struct file *file)
|
||||
{
|
||||
@@ -555,6 +556,7 @@ vfs_writef_t vfs_writef(struct file *fil
|
||||
@@ -536,6 +537,7 @@ vfs_writef_t vfs_writef(struct file *fil
|
||||
return new_sync_write;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
@@ -222,9 +234,9 @@ diff -Nurp linux-4.6-aufs/fs/read_write.c linux-4.6-aufs-mod/fs/read_write.c
|
||||
|
||||
ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/fs/splice.c linux-4.6-aufs-mod/fs/splice.c
|
||||
--- linux-4.6-aufs/fs/splice.c 2016-06-01 22:44:04.042679815 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/splice.c 2016-06-01 22:44:52.626752685 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/splice.c linux-4.7-rc6-aufs-mod/fs/splice.c
|
||||
--- linux-4.7-rc6-aufs/fs/splice.c 2016-07-04 19:02:29.262286207 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/splice.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -1124,6 +1124,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
|
||||
return splice_write(pipe, out, ppos, len, flags);
|
||||
@@ -241,9 +253,9 @@ diff -Nurp linux-4.6-aufs/fs/splice.c linux-4.6-aufs-mod/fs/splice.c
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-4.6-aufs/fs/xattr.c linux-4.6-aufs-mod/fs/xattr.c
|
||||
--- linux-4.6-aufs/fs/xattr.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/fs/xattr.c 2016-06-01 22:44:52.626752685 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/fs/xattr.c linux-4.7-rc6-aufs-mod/fs/xattr.c
|
||||
--- linux-4.7-rc6-aufs/fs/xattr.c 2016-07-04 17:58:15.754773638 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/fs/xattr.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -207,6 +207,7 @@ vfs_getxattr_alloc(struct dentry *dentry
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
@@ -252,17 +264,17 @@ diff -Nurp linux-4.6-aufs/fs/xattr.c linux-4.6-aufs-mod/fs/xattr.c
|
||||
|
||||
ssize_t
|
||||
vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
|
||||
diff -Nurp linux-4.6-aufs/kernel/task_work.c linux-4.6-aufs-mod/kernel/task_work.c
|
||||
--- linux-4.6-aufs/kernel/task_work.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/kernel/task_work.c 2016-06-01 22:44:52.626752685 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/kernel/task_work.c linux-4.7-rc6-aufs-mod/kernel/task_work.c
|
||||
--- linux-4.7-rc6-aufs/kernel/task_work.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/kernel/task_work.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -118,3 +118,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff -Nurp linux-4.6-aufs/security/commoncap.c linux-4.6-aufs-mod/security/commoncap.c
|
||||
--- linux-4.6-aufs/security/commoncap.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/security/commoncap.c 2016-06-01 22:44:52.627752687 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/security/commoncap.c linux-4.7-rc6-aufs-mod/security/commoncap.c
|
||||
--- linux-4.7-rc6-aufs/security/commoncap.c 2016-07-04 17:58:15.945773585 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/security/commoncap.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -1058,12 +1058,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||
}
|
||||
return ret;
|
||||
@@ -278,9 +290,9 @@ diff -Nurp linux-4.6-aufs/security/commoncap.c linux-4.6-aufs-mod/security/commo
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
diff -Nurp linux-4.6-aufs/security/device_cgroup.c linux-4.6-aufs-mod/security/device_cgroup.c
|
||||
--- linux-4.6-aufs/security/device_cgroup.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/security/device_cgroup.c 2016-06-01 22:44:52.627752687 +0300
|
||||
diff -Nurp linux-4.7-rc6-aufs/security/device_cgroup.c linux-4.7-rc6-aufs-mod/security/device_cgroup.c
|
||||
--- linux-4.7-rc6-aufs/security/device_cgroup.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/security/device_cgroup.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/device_cgroup.h>
|
||||
#include <linux/cgroup.h>
|
||||
@@ -297,58 +309,58 @@ diff -Nurp linux-4.6-aufs/security/device_cgroup.c linux-4.6-aufs-mod/security/d
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff -Nurp linux-4.6-aufs/security/security.c linux-4.6-aufs-mod/security/security.c
|
||||
--- linux-4.6-aufs/security/security.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.6-aufs-mod/security/security.c 2016-06-01 22:44:52.627752687 +0300
|
||||
@@ -433,6 +433,7 @@ int security_path_rmdir(struct path *dir
|
||||
diff -Nurp linux-4.7-rc6-aufs/security/security.c linux-4.7-rc6-aufs-mod/security/security.c
|
||||
--- linux-4.7-rc6-aufs/security/security.c 2016-07-04 17:58:15.948773584 +0300
|
||||
+++ linux-4.7-rc6-aufs-mod/security/security.c 2016-07-04 19:03:53.657714984 +0300
|
||||
@@ -434,6 +434,7 @@ int security_path_rmdir(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_rmdir);
|
||||
|
||||
int security_path_unlink(struct path *dir, struct dentry *dentry)
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -449,6 +450,7 @@ int security_path_symlink(struct path *d
|
||||
@@ -450,6 +451,7 @@ int security_path_symlink(const struct p
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_symlink);
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -457,6 +459,7 @@ int security_path_link(struct dentry *ol
|
||||
@@ -458,6 +460,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_link);
|
||||
|
||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||
struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -484,6 +487,7 @@ int security_path_truncate(struct path *
|
||||
int security_path_rename(const struct path *old_dir, struct dentry *old_dentry,
|
||||
const struct path *new_dir, struct dentry *new_dentry,
|
||||
@@ -485,6 +488,7 @@ int security_path_truncate(const struct
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_truncate);
|
||||
|
||||
int security_path_chmod(struct path *path, umode_t mode)
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -491,6 +495,7 @@ int security_path_chmod(struct path *pat
|
||||
@@ -492,6 +496,7 @@ int security_path_chmod(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -498,6 +503,7 @@ int security_path_chown(struct path *pat
|
||||
@@ -499,6 +504,7 @@ int security_path_chown(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chown);
|
||||
|
||||
int security_path_chroot(struct path *path)
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -583,6 +589,7 @@ int security_inode_readlink(struct dentr
|
||||
@@ -584,6 +590,7 @@ int security_inode_readlink(struct dentr
|
||||
return 0;
|
||||
return call_int_hook(inode_readlink, 0, dentry);
|
||||
}
|
||||
@@ -356,7 +368,7 @@ diff -Nurp linux-4.6-aufs/security/security.c linux-4.6-aufs-mod/security/securi
|
||||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
|
||||
bool rcu)
|
||||
@@ -598,6 +605,7 @@ int security_inode_permission(struct ino
|
||||
@@ -599,6 +606,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
@@ -364,7 +376,7 @@ diff -Nurp linux-4.6-aufs/security/security.c linux-4.6-aufs-mod/security/securi
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -736,6 +744,7 @@ int security_file_permission(struct file
|
||||
@@ -737,6 +745,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
@@ -372,7 +384,7 @@ diff -Nurp linux-4.6-aufs/security/security.c linux-4.6-aufs-mod/security/securi
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -795,6 +804,7 @@ int security_mmap_file(struct file *file
|
||||
@@ -796,6 +805,7 @@ int security_mmap_file(struct file *file
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
Mark as 4.7 so we can rebuild aufs tools with matching 4.7 check
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/include/uapi/linux/aufs_type.h.orig
|
||||
+++ linux/include/uapi/linux/aufs_type.h
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include <linux/limits.h>
|
||||
|
||||
-#define AUFS_VERSION "4.x-rcN"
|
||||
+#define AUFS_VERSION "4.7"
|
||||
|
||||
/* todo? move this to linux-2.6.19/include/magic.h */
|
||||
#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
|
||||
+334
-282
File diff suppressed because it is too large
Load Diff
-63
@@ -1,63 +0,0 @@
|
||||
From 1e3fa0acfec677e915d7de5ac6e1f18cfa4f805b Mon Sep 17 00:00:00 2001
|
||||
From: Lyude <cpaul@redhat.com>
|
||||
Date: Thu, 9 Jun 2016 11:58:15 -0400
|
||||
Subject: [PATCH] drm/i915/fbc: Disable on HSW by default for now
|
||||
|
||||
>From https://bugs.freedesktop.org/show_bug.cgi?id=96461 :
|
||||
|
||||
This was kind of a difficult bug to track down. If you're using a
|
||||
Haswell system running GNOME and you have fbc completely enabled and
|
||||
working, playing videos can result in video artifacts. Steps to
|
||||
reproduce:
|
||||
|
||||
- Run GNOME
|
||||
- Ensure FBC is enabled and active
|
||||
- Download a movie, I used the ogg version of Big Buck Bunny for this
|
||||
- Run `gst-launch-1.0 filesrc location='some_movie.ogg' ! decodebin !
|
||||
glimagesink` in a terminal
|
||||
- Watch for about over a minute, you'll see small horizontal lines go
|
||||
down the screen.
|
||||
|
||||
For the time being, disable FBC for Haswell by default.
|
||||
|
||||
Stefan Richter reported kernel freezes (no video artifacts) when fbc
|
||||
is on. (E3-1245 v3 with HD P4600; openbox and some KDE and LXDE
|
||||
applications, thread begins at https://lkml.org/lkml/2016/4/26/813).
|
||||
We also got reports from Steven Honeyman on openbox+roxterm.
|
||||
|
||||
v2 (From Paulo):
|
||||
- Add extra information to the commit message
|
||||
- Add Fixes tag
|
||||
- Rebase
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96461
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96464
|
||||
Fixes: a98ee79317b4 ("drm/i915/fbc: enable FBC by default on HSW and BDW")
|
||||
Cc: stable@vger.kernel.org
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Lyude <cpaul@redhat.com>
|
||||
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1465487895-7401-1-git-send-email-cpaul@redhat.com
|
||||
(cherry picked from commit c7f7e2feffb0294302041507dfd5fc15f01afccc)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_fbc.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
|
||||
index d5a7cfe..647127f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_fbc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_fbc.c
|
||||
@@ -824,8 +824,7 @@ static bool intel_fbc_can_choose(struct intel_crtc *crtc)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
|
||||
struct intel_fbc *fbc = &dev_priv->fbc;
|
||||
- bool enable_by_default = IS_HASWELL(dev_priv) ||
|
||||
- IS_BROADWELL(dev_priv);
|
||||
+ bool enable_by_default = IS_BROADWELL(dev_priv);
|
||||
|
||||
if (intel_vgpu_active(dev_priv->dev)) {
|
||||
fbc->no_fbc_reason = "VGPU is active";
|
||||
--
|
||||
2.9.0
|
||||
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
From e838a45f9392a5bd2be1cd3ab0b16ae85857461c Mon Sep 17 00:00:00 2001
|
||||
From: Mel Gorman <mgorman@techsingularity.net>
|
||||
Date: Fri, 24 Jun 2016 14:49:37 -0700
|
||||
Subject: [PATCH] mm, sl[au]b: add __GFP_ATOMIC to the GFP reclaim mask
|
||||
|
||||
Commit d0164adc89f6 ("mm, page_alloc: distinguish between being unable
|
||||
to sleep, unwilling to sleep and avoiding waking kswapd") modified
|
||||
__GFP_WAIT to explicitly identify the difference between atomic callers
|
||||
and those that were unwilling to sleep. Later the definition was
|
||||
removed entirely.
|
||||
|
||||
The GFP_RECLAIM_MASK is the set of flags that affect watermark checking
|
||||
and reclaim behaviour but __GFP_ATOMIC was never added. Without it,
|
||||
atomic users of the slab allocator strip the __GFP_ATOMIC flag and
|
||||
cannot access the page allocator atomic reserves. This patch addresses
|
||||
the problem.
|
||||
|
||||
The user-visible impact depends on the workload but potentially atomic
|
||||
allocations unnecessarily fail without this path.
|
||||
|
||||
Link: http://lkml.kernel.org/r/20160610093832.GK2527@techsingularity.net
|
||||
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
|
||||
Reported-by: Marcin Wojtas <mw@semihalf.com>
|
||||
Acked-by: Vlastimil Babka <vbabka@suse.cz>
|
||||
Acked-by: Michal Hocko <mhocko@suse.com>
|
||||
Cc: <stable@vger.kernel.org> [4.4+]
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/internal.h | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/internal.h b/mm/internal.h
|
||||
index a37e5b6..2524ec8 100644
|
||||
--- a/mm/internal.h
|
||||
+++ b/mm/internal.h
|
||||
@@ -24,7 +24,8 @@
|
||||
*/
|
||||
#define GFP_RECLAIM_MASK (__GFP_RECLAIM|__GFP_HIGH|__GFP_IO|__GFP_FS|\
|
||||
__GFP_NOWARN|__GFP_REPEAT|__GFP_NOFAIL|\
|
||||
- __GFP_NORETRY|__GFP_MEMALLOC|__GFP_NOMEMALLOC)
|
||||
+ __GFP_NORETRY|__GFP_MEMALLOC|__GFP_NOMEMALLOC|\
|
||||
+ __GFP_ATOMIC)
|
||||
|
||||
/* The GFP flags allowed during early boot */
|
||||
#define GFP_BOOT_MASK (__GFP_BITS_MASK & ~(__GFP_RECLAIM|__GFP_IO|__GFP_FS))
|
||||
--
|
||||
2.9.0
|
||||
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
From b9b4bb26af017dbe930cd4df7f9b2fc3a0497bfe Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Romano <anthony.romano@coreos.com>
|
||||
Date: Fri, 24 Jun 2016 14:48:43 -0700
|
||||
Subject: [PATCH] tmpfs: don't undo fallocate past its last page
|
||||
|
||||
When fallocate is interrupted it will undo a range that extends one byte
|
||||
past its range of allocated pages. This can corrupt an in-use page by
|
||||
zeroing out its first byte. Instead, undo using the inclusive byte
|
||||
range.
|
||||
|
||||
Fixes: 1635f6a74152f1d ("tmpfs: undo fallocation on failure")
|
||||
Link: http://lkml.kernel.org/r/1462713387-16724-1-git-send-email-anthony.romano@coreos.com
|
||||
Signed-off-by: Anthony Romano <anthony.romano@coreos.com>
|
||||
Cc: Vlastimil Babka <vbabka@suse.cz>
|
||||
Cc: Hugh Dickins <hughd@google.com>
|
||||
Cc: Brandon Philips <brandon@ifup.co>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/shmem.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/shmem.c b/mm/shmem.c
|
||||
index a361449..24463b6 100644
|
||||
--- a/mm/shmem.c
|
||||
+++ b/mm/shmem.c
|
||||
@@ -2227,7 +2227,7 @@ static long shmem_fallocate(struct file *file, int mode, loff_t offset,
|
||||
/* Remove the !PageUptodate pages we added */
|
||||
shmem_undo_range(inode,
|
||||
(loff_t)start << PAGE_SHIFT,
|
||||
- (loff_t)index << PAGE_SHIFT, true);
|
||||
+ ((loff_t)index << PAGE_SHIFT) - 1, true);
|
||||
goto undone;
|
||||
}
|
||||
|
||||
--
|
||||
2.9.0
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
From: Luca Coelho <luca-XPOmlcxoEMv1KXRcyAk9cg@public.gmane.org>
|
||||
Subject: [PATCH 13/56] iwlwifi: add new 8260 PCI IDs
|
||||
Date: Wed, 6 Jul 2016 13:40:08 +0300
|
||||
|
||||
From: Oren Givon <oren.givon-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
|
||||
Add 3 new 8260 series PCI IDs:
|
||||
- (0x24F3, 0x10B0)
|
||||
- (0x24F3, 0xD0B0)
|
||||
- (0x24F3, 0xB0B0)
|
||||
|
||||
CC: <stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> [4.1+]
|
||||
Signed-off-by: Oren Givon <oren.givon-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
Signed-off-by: David Spinadel <david.spinadel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
Signed-off-by: Luca Coelho <luciano.coelho-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
---
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
index a588b05..1cae19d 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
@@ -433,6 +433,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
||||
/* 8000 Series */
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x1010, iwl8260_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24F3, 0x10B0, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x0130, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x1130, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x0132, iwl8260_2ac_cfg)},
|
||||
@@ -454,6 +455,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
||||
{IWL_PCI_DEVICE(0x24F3, 0xD010, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0xC050, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0xD050, iwl8260_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24F3, 0xD0B0, iwl8260_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24F3, 0xB0B0, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x8010, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x8110, iwl8260_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24F3, 0x9010, iwl8260_2ac_cfg)},
|
||||
--
|
||||
2.8.1
|
||||
@@ -0,0 +1,48 @@
|
||||
From: Luca Coelho <luca@coelho.fi>
|
||||
Subject: [PATCH 14/56] iwlwifi: add new 8265
|
||||
Date: Wed, 6 Jul 2016 13:40:09 +0300
|
||||
|
||||
From: Oren Givon <oren.givon@intel.com>
|
||||
|
||||
Add 6 new 8265 series PCI IDs:
|
||||
- (0x24FD, 0x1130)
|
||||
- (0x24FD, 0x0130)
|
||||
- (0x24FD, 0x0910)
|
||||
- (0x24FD, 0x0930)
|
||||
- (0x24FD, 0x0950)
|
||||
- (0x24FD, 0x0850)
|
||||
|
||||
CC: <stable@vger.kernel.org> [4.6+]
|
||||
Signed-off-by: Oren Givon <oren.givon@intel.com>
|
||||
Signed-off-by: David Spinadel <david.spinadel@intel.com>
|
||||
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
|
||||
---
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
index 1cae19d..6f020e4 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
@@ -484,6 +484,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x0010, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x0110, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x1110, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x1130, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x0130, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x1010, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x0050, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x0150, iwl8265_2ac_cfg)},
|
||||
@@ -494,6 +496,10 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x0810, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x9110, iwl8265_2ac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x24FD, 0x8130, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x0910, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x0930, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x0950, iwl8265_2ac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x24FD, 0x0850, iwl8265_2ac_cfg)},
|
||||
|
||||
/* 9000 Series */
|
||||
{IWL_PCI_DEVICE(0x2526, 0x0000, iwl9260_2ac_cfg)},
|
||||
--
|
||||
2.8.1
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
From: Luca Coelho <luca-XPOmlcxoEMv1KXRcyAk9cg@public.gmane.org>
|
||||
Subject: [PATCH 28/56] iwlwifi: pcie: enable interrupts before releasing the NIC's CPU
|
||||
Date: Wed, 6 Jul 2016 13:40:23 +0300
|
||||
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
|
||||
The NIC's CPU gets started after the firmware has been
|
||||
written to its memory. The first thing it does is to
|
||||
send an interrupt to let the driver know that it is
|
||||
running. In order to get that interrupt, the driver needs
|
||||
to make sure it is not masked. Of course, the interrupt
|
||||
needs to be enabled in the driver before the CPU starts to
|
||||
run.
|
||||
I mistakenly inversed those two steps leading to races
|
||||
which prevented the driver from getting the alive interrupt
|
||||
from the firmware.
|
||||
Fix that.
|
||||
|
||||
Cc: <stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> [4.5+]
|
||||
Fixes: a6bd005fe92 ("iwlwifi: pcie: fix RF-Kill vs. firmware load race")
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
Signed-off-by: Luca Coelho <luciano.coelho-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
|
||||
---
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
index 3badebb..ac623c3 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
@@ -801,6 +801,8 @@ static int iwl_pcie_load_cpu_sections_8000(struct iwl_trans *trans,
|
||||
|
||||
*first_ucode_section = last_read_idx;
|
||||
|
||||
+ iwl_enable_interrupts(trans);
|
||||
+
|
||||
if (cpu == 1)
|
||||
iwl_write_direct32(trans, FH_UCODE_LOAD_STATUS, 0xFFFF);
|
||||
else
|
||||
@@ -980,6 +982,8 @@ static int iwl_pcie_load_given_ucode(struct iwl_trans *trans,
|
||||
iwl_pcie_apply_destination(trans);
|
||||
}
|
||||
|
||||
+ iwl_enable_interrupts(trans);
|
||||
+
|
||||
/* release CPU reset */
|
||||
iwl_write32(trans, CSR_RESET, 0);
|
||||
|
||||
@@ -1215,7 +1219,6 @@ static int iwl_trans_pcie_start_fw(struct iwl_trans *trans,
|
||||
ret = iwl_pcie_load_given_ucode_8000(trans, fw);
|
||||
else
|
||||
ret = iwl_pcie_load_given_ucode(trans, fw);
|
||||
- iwl_enable_interrupts(trans);
|
||||
|
||||
/* re-check RF-Kill state since we may have missed the interrupt */
|
||||
hw_rfkill = iwl_is_rfkill_set(trans);
|
||||
--
|
||||
2.8.1
|
||||
+195
@@ -0,0 +1,195 @@
|
||||
From: Luca Coelho <luca@coelho.fi>
|
||||
Subject: [PATCH 48/56] iwlwifi: pcie: fix a race in firmware loading flow
|
||||
Date: Wed, 6 Jul 2016 13:40:43 +0300
|
||||
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
|
||||
Upon firmware load interrupt (FH_TX), the ISR re-enables the
|
||||
firmware load interrupt only to avoid races with other
|
||||
flows as described in the commit below. When the firmware
|
||||
is completely loaded, the thread that is loading the
|
||||
firmware will enable all the interrupts to make sure that
|
||||
the driver gets the ALIVE interrupt.
|
||||
The problem with that is that the thread that is loading
|
||||
the firmware is actually racing against the ISR and we can
|
||||
get to the following situation:
|
||||
|
||||
CPU0 CPU1
|
||||
iwl_pcie_load_given_ucode
|
||||
...
|
||||
iwl_pcie_load_firmware_chunk
|
||||
wait_for_interrupt
|
||||
<interrupt>
|
||||
ISR handles CSR_INT_BIT_FH_TX
|
||||
ISR wakes up the thread on CPU0
|
||||
/* enable all the interrupts
|
||||
* to get the ALIVE interrupt
|
||||
*/
|
||||
iwl_enable_interrupts
|
||||
ISR re-enables CSR_INT_BIT_FH_TX only
|
||||
/* start the firmware */
|
||||
iwl_write32(trans, CSR_RESET, 0);
|
||||
|
||||
BUG! ALIVE interrupt will never arrive since it has been
|
||||
masked by CPU1.
|
||||
|
||||
In order to fix that, change the ISR to first check if
|
||||
STATUS_INT_ENABLED is set. If so, re-enable all the
|
||||
interrupts. If STATUS_INT_ENABLED is clear, then we can
|
||||
check what specific interrupt happened and re-enable only
|
||||
that specific interrupt (RFKILL or FH_TX).
|
||||
|
||||
All the credit for the analysis goes to Kirtika who did the
|
||||
actual debugging work.
|
||||
|
||||
Cc: <stable@vger.kernel.org> [4.5+]
|
||||
Fixes: a6bd005fe92 ("iwlwifi: pcie: fix RF-Kill vs. firmware load race")
|
||||
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
|
||||
---
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 21 +++++++++++++++++++--
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 16 +++++++++-------
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 8 --------
|
||||
3 files changed, 28 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
|
||||
index f684b9d..54af3da 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
|
||||
@@ -500,7 +500,7 @@ void iwl_pcie_dump_csr(struct iwl_trans *trans);
|
||||
/*****************************************************
|
||||
* Helpers
|
||||
******************************************************/
|
||||
-static inline void iwl_disable_interrupts(struct iwl_trans *trans)
|
||||
+static inline void _iwl_disable_interrupts(struct iwl_trans *trans)
|
||||
{
|
||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
|
||||
@@ -523,7 +523,16 @@ static inline void iwl_disable_interrupts(struct iwl_trans *trans)
|
||||
IWL_DEBUG_ISR(trans, "Disabled interrupts\n");
|
||||
}
|
||||
|
||||
-static inline void iwl_enable_interrupts(struct iwl_trans *trans)
|
||||
+static inline void iwl_disable_interrupts(struct iwl_trans *trans)
|
||||
+{
|
||||
+ struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
+
|
||||
+ spin_lock(&trans_pcie->irq_lock);
|
||||
+ _iwl_disable_interrupts(trans);
|
||||
+ spin_unlock(&trans_pcie->irq_lock);
|
||||
+}
|
||||
+
|
||||
+static inline void _iwl_enable_interrupts(struct iwl_trans *trans)
|
||||
{
|
||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
|
||||
@@ -546,6 +555,14 @@ static inline void iwl_enable_interrupts(struct iwl_trans *trans)
|
||||
}
|
||||
}
|
||||
|
||||
+static inline void iwl_enable_interrupts(struct iwl_trans *trans)
|
||||
+{
|
||||
+ struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
+
|
||||
+ spin_lock(&trans_pcie->irq_lock);
|
||||
+ _iwl_enable_interrupts(trans);
|
||||
+ spin_unlock(&trans_pcie->irq_lock);
|
||||
+}
|
||||
static inline void iwl_enable_hw_int_msk_msix(struct iwl_trans *trans, u32 msk)
|
||||
{
|
||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
index 0296c29..45f1b7e 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
|
||||
@@ -1535,7 +1535,7 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
|
||||
* have anything to service
|
||||
*/
|
||||
if (test_bit(STATUS_INT_ENABLED, &trans->status))
|
||||
- iwl_enable_interrupts(trans);
|
||||
+ _iwl_enable_interrupts(trans);
|
||||
spin_unlock(&trans_pcie->irq_lock);
|
||||
lock_map_release(&trans->sync_cmd_lockdep_map);
|
||||
return IRQ_NONE;
|
||||
@@ -1727,15 +1727,17 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
|
||||
inta & ~trans_pcie->inta_mask);
|
||||
}
|
||||
|
||||
+ spin_lock(&trans_pcie->irq_lock);
|
||||
+ /* only Re-enable all interrupt if disabled by irq */
|
||||
+ if (test_bit(STATUS_INT_ENABLED, &trans->status))
|
||||
+ _iwl_enable_interrupts(trans);
|
||||
/* we are loading the firmware, enable FH_TX interrupt only */
|
||||
- if (handled & CSR_INT_BIT_FH_TX)
|
||||
+ else if (handled & CSR_INT_BIT_FH_TX)
|
||||
iwl_enable_fw_load_int(trans);
|
||||
- /* only Re-enable all interrupt if disabled by irq */
|
||||
- else if (test_bit(STATUS_INT_ENABLED, &trans->status))
|
||||
- iwl_enable_interrupts(trans);
|
||||
/* Re-enable RF_KILL if it occurred */
|
||||
else if (handled & CSR_INT_BIT_RF_KILL)
|
||||
iwl_enable_rfkill_int(trans);
|
||||
+ spin_unlock(&trans_pcie->irq_lock);
|
||||
|
||||
out:
|
||||
lock_map_release(&trans->sync_cmd_lockdep_map);
|
||||
@@ -1799,7 +1801,7 @@ void iwl_pcie_reset_ict(struct iwl_trans *trans)
|
||||
return;
|
||||
|
||||
spin_lock(&trans_pcie->irq_lock);
|
||||
- iwl_disable_interrupts(trans);
|
||||
+ _iwl_disable_interrupts(trans);
|
||||
|
||||
memset(trans_pcie->ict_tbl, 0, ICT_SIZE);
|
||||
|
||||
@@ -1815,7 +1817,7 @@ void iwl_pcie_reset_ict(struct iwl_trans *trans)
|
||||
trans_pcie->use_ict = true;
|
||||
trans_pcie->ict_index = 0;
|
||||
iwl_write32(trans, CSR_INT, trans_pcie->inta_mask);
|
||||
- iwl_enable_interrupts(trans);
|
||||
+ _iwl_enable_interrupts(trans);
|
||||
spin_unlock(&trans_pcie->irq_lock);
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
index 3b7a414..9e953a4 100644
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
|
||||
@@ -1037,9 +1037,7 @@ static void _iwl_trans_pcie_stop_device(struct iwl_trans *trans, bool low_power)
|
||||
was_hw_rfkill = iwl_is_rfkill_set(trans);
|
||||
|
||||
/* tell the device to stop sending interrupts */
|
||||
- spin_lock(&trans_pcie->irq_lock);
|
||||
iwl_disable_interrupts(trans);
|
||||
- spin_unlock(&trans_pcie->irq_lock);
|
||||
|
||||
/* device going down, Stop using ICT table */
|
||||
iwl_pcie_disable_ict(trans);
|
||||
@@ -1083,9 +1081,7 @@ static void _iwl_trans_pcie_stop_device(struct iwl_trans *trans, bool low_power)
|
||||
* the time, unless the interrupt is ACKed even if the interrupt
|
||||
* should be masked. Re-ACK all the interrupts here.
|
||||
*/
|
||||
- spin_lock(&trans_pcie->irq_lock);
|
||||
iwl_disable_interrupts(trans);
|
||||
- spin_unlock(&trans_pcie->irq_lock);
|
||||
|
||||
/* clear all status bits */
|
||||
clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status);
|
||||
@@ -1578,15 +1574,11 @@ static void iwl_trans_pcie_op_mode_leave(struct iwl_trans *trans)
|
||||
mutex_lock(&trans_pcie->mutex);
|
||||
|
||||
/* disable interrupts - don't enable HW RF kill interrupt */
|
||||
- spin_lock(&trans_pcie->irq_lock);
|
||||
iwl_disable_interrupts(trans);
|
||||
- spin_unlock(&trans_pcie->irq_lock);
|
||||
|
||||
iwl_pcie_apm_stop(trans, true);
|
||||
|
||||
- spin_lock(&trans_pcie->irq_lock);
|
||||
iwl_disable_interrupts(trans);
|
||||
- spin_unlock(&trans_pcie->irq_lock);
|
||||
|
||||
iwl_pcie_disable_ict(trans);
|
||||
|
||||
--
|
||||
2.8.1
|
||||
|
||||
@@ -77,9 +77,6 @@ acpi-processor-M720SR-limit-to-C2.patch
|
||||
# backlight fixes
|
||||
ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch
|
||||
|
||||
#
|
||||
acpi-ACPICA-Namespace-Fix-deadlock-triggered-by-MLC-suppo.patch
|
||||
|
||||
###
|
||||
### Block
|
||||
###
|
||||
@@ -125,9 +122,6 @@ block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch
|
||||
# ahci ids
|
||||
ahci-add-new-Intel-device-IDs.patch
|
||||
|
||||
#
|
||||
block-sd-Fix-rw_max-for-devices-that-report-an-optimal-xfe.patch
|
||||
|
||||
###
|
||||
### Char
|
||||
###
|
||||
@@ -140,8 +134,9 @@ Revert-ipmi-Start-the-timer-and-thread-on-internal-m.patch
|
||||
###
|
||||
|
||||
# aufs from: http://aufs.sourceforge.net/ (mga#8314)
|
||||
fs-aufs-4.6.patch
|
||||
fs-aufs-4.6-modular.patch
|
||||
fs-aufs-4.7.patch
|
||||
fs-aufs-4.7-modular.patch
|
||||
fs-aufs-4.7-ver-fix.patch
|
||||
|
||||
###
|
||||
### FireWire
|
||||
@@ -176,9 +171,6 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# hsw screen glitches
|
||||
gpu-drm-i915-fbc-Disable-on-HSW-by-default-for-now.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
###
|
||||
@@ -209,12 +201,6 @@ input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch
|
||||
### MM
|
||||
###
|
||||
|
||||
# fixes some failing atomic allocations
|
||||
mm-sl-au-b-add-__GFP_ATOMIC-to-the-GFP-reclaim-mask.patch
|
||||
|
||||
# tmpfs fix
|
||||
mm-tmpfs-don-t-undo-fallocate-past-its-last-page.patch
|
||||
|
||||
###
|
||||
### Network
|
||||
###
|
||||
@@ -236,6 +222,12 @@ net-netfilter-psd.patch
|
||||
net-netfilter-psd-mdv.patch
|
||||
net-netfilter-psd-2.6.35-buildfix.patch
|
||||
|
||||
# iwlwifi fixes
|
||||
net-wireless-iwlwifi-add-new-8260-PCI-IDs.patch
|
||||
net-wireless-iwlwifi-add-new-8265.patch
|
||||
net-wireless-iwlwifi-pcie-enable-interrupts-before-releasing-the-NICs-CPU.patch
|
||||
net-wireless-iwlwifi-pcie-fix-a-race-in-firmware-loading-flow.patch
|
||||
|
||||
###
|
||||
### Platform drivers
|
||||
###
|
||||
@@ -324,6 +316,7 @@ video-mageia-logo.patch
|
||||
3rd-ndiswrapper-1.60.patch
|
||||
3rd-ndiswrapper-Kconfig.patch
|
||||
3rd-ndiswrapper-Makefile-build-fix.patch
|
||||
3rd-ndiswrapper-4.7-buildfix.patch
|
||||
|
||||
# rfswitch
|
||||
3rd-rfswitch-1.3.patch
|
||||
@@ -339,6 +332,7 @@ video-mageia-logo.patch
|
||||
|
||||
# add rtl8723bs support (mga#15874)
|
||||
3rd-rtl8723bs.patch
|
||||
3rd-rtl8723bs-4.7-buildfix.patch
|
||||
|
||||
###
|
||||
### Security
|
||||
|
||||
Reference in New Issue
Block a user