update
This commit is contained in:
Binary file not shown.
@@ -83,10 +83,10 @@ diff -Nurp linux-4.2.2/Makefile linux-4.2.2-3rd/Makefile
|
||||
net-y := net/
|
||||
libs-y := lib/
|
||||
core-y := usr/
|
||||
diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Makefile
|
||||
--- linux-4.6/scripts/kconfig/Makefile
|
||||
+++ linux-4.6-3rd/scripts/kconfig/Makefile
|
||||
@@ -18,26 +18,26 @@ endif
|
||||
diff -Nurp linux-4.9/scripts/kconfig/Makefile linux-4.9-3rd/scripts/kconfig/Makefile
|
||||
--- linux-4.9/scripts/kconfig/Makefile
|
||||
+++ linux-4.9-3rd/scripts/kconfig/Makefile
|
||||
@@ -18,28 +18,28 @@ endif
|
||||
# We need this, in case the user has it in its environment
|
||||
unexport CONFIG_
|
||||
|
||||
@@ -113,6 +113,8 @@ diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Make
|
||||
-silentoldconfig: $(obj)/conf
|
||||
+silentoldconfig: $(obj)/conf 3rdparty/Makefile
|
||||
$(Q)mkdir -p include/config include/generated
|
||||
$(Q)test -e include/generated/autoksyms.h || \
|
||||
touch include/generated/autoksyms.h
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
-localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||
@@ -120,7 +122,7 @@ diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Make
|
||||
$(Q)mkdir -p include/config include/generated
|
||||
$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
@@ -80,7 +80,7 @@ simple-targets := oldconfig allnoconfig
|
||||
@@ -82,7 +82,7 @@ simple-targets := oldconfig allnoconfig
|
||||
alldefconfig randconfig listnewconfig olddefconfig
|
||||
PHONY += $(simple-targets)
|
||||
|
||||
@@ -129,7 +131,7 @@ diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Make
|
||||
$< $(silent) --$@ $(Kconfig)
|
||||
|
||||
PHONY += oldnoconfig savedefconfig defconfig
|
||||
@@ -88,12 +88,12 @@ PHONY += oldnoconfig savedefconfig defco
|
||||
@@ -90,12 +90,12 @@ PHONY += oldnoconfig savedefconfig defco
|
||||
# oldnoconfig is an alias of olddefconfig, because people already are dependent
|
||||
# on its behavior (sets new symbols to their default value but not 'n') with the
|
||||
# counter-intuitive name.
|
||||
@@ -145,7 +147,7 @@ diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Make
|
||||
ifeq ($(KBUILD_DEFCONFIG),)
|
||||
$< $(silent) --defconfig $(Kconfig)
|
||||
else
|
||||
@@ -106,26 +106,26 @@ else
|
||||
@@ -108,26 +108,26 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -177,7 +179,7 @@ diff -Nurp linux-4.6/scripts/kconfig/Makefile linux-4.6-3rd/scripts/kconfig/Make
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile allnoconfig tiny.config
|
||||
|
||||
# Help text used by make help
|
||||
@@ -188,6 +188,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
@@ -190,6 +190,9 @@ gconf-objs := gconf.o zconf.tab.o
|
||||
|
||||
hostprogs-y := conf nconf mconf kxgettext qconf gconf
|
||||
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
|
||||
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) {
|
||||
@@ -1,19 +0,0 @@
|
||||
|
||||
Adjust for cfg80211_scan_done() changes in kernel 4.8
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
--- linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c.orig
|
||||
+++ linux/3rdparty/rtl8723bs/os_dep/ioctl_cfg80211.c
|
||||
@@ -1413,7 +1413,10 @@ void rtw_cfg80211_indicate_scan_done(str
|
||||
}
|
||||
else
|
||||
{
|
||||
- cfg80211_scan_done(pwdev_priv->scan_request, aborted);
|
||||
+ struct cfg80211_scan_info info = {
|
||||
+ .aborted = aborted,
|
||||
+ };
|
||||
+ cfg80211_scan_done(pwdev_priv->scan_request, &info);
|
||||
}
|
||||
|
||||
pwdev_priv->scan_request = NULL;
|
||||
File diff suppressed because it is too large
Load Diff
+39
@@ -0,0 +1,39 @@
|
||||
From 7020bcb82838006e23d058ff07b063b393ed3f10 Mon Sep 17 00:00:00 2001
|
||||
From: Zhang Rui <rui.zhang@intel.com>
|
||||
Date: Tue, 29 Nov 2016 23:19:46 +0100
|
||||
Subject: [PATCH] ACPI: do not warn if _BQC does not exist
|
||||
|
||||
Starting from ACPI spec 3.0, it's only clarified that _BCM control
|
||||
method is required if _BCL is implemented. There is no word
|
||||
saying _BQC is required.
|
||||
|
||||
And in ACPI spec 6.1 B.5.4, for _BQC, it is explicitly stated that
|
||||
"This optional method returns the current brightness level of a
|
||||
built-in display output device. If present, it must be set by
|
||||
the platform for initial brightness."
|
||||
|
||||
Thus remove the obsolete warning message.
|
||||
|
||||
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/scan.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
|
||||
index 3d1856f..07aa2e6 100644
|
||||
--- a/drivers/acpi/scan.c
|
||||
+++ b/drivers/acpi/scan.c
|
||||
@@ -1119,9 +1119,6 @@ acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found generic backlight "
|
||||
"support\n"));
|
||||
*cap |= ACPI_VIDEO_BACKLIGHT;
|
||||
- if (!acpi_has_method(handle, "_BQC"))
|
||||
- printk(KERN_WARNING FW_BUG PREFIX "No _BQC method, "
|
||||
- "cannot determine initial brightness\n");
|
||||
/* We have backlight support, no need to scan further */
|
||||
return AE_CTRL_TERMINATE;
|
||||
}
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+9106
File diff suppressed because it is too large
Load Diff
+1101
File diff suppressed because it is too large
Load Diff
+103
@@ -0,0 +1,103 @@
|
||||
From 465ed48c05de63f5bdd34d83915f1b8998a62134 Mon Sep 17 00:00:00 2001
|
||||
From: Paolo Valente <paolo.valente@unimore.it>
|
||||
Date: Tue, 7 Apr 2015 13:39:12 +0200
|
||||
Subject: [PATCH 1/4] block: cgroups, kconfig, build bits for BFQ-v7r11-4.5.0
|
||||
|
||||
Update Kconfig.iosched and do the related Makefile changes to include
|
||||
kernel configuration options for BFQ. Also increase the number of
|
||||
policies supported by the blkio controller so that BFQ can add its
|
||||
own.
|
||||
|
||||
Signed-off-by: Paolo Valente <paolo.valente@unimore.it>
|
||||
Signed-off-by: Arianna Avanzini <avanzini@google.com>
|
||||
---
|
||||
block/Kconfig.iosched | 32 ++++++++++++++++++++++++++++++++
|
||||
block/Makefile | 1 +
|
||||
include/linux/blkdev.h | 2 +-
|
||||
3 files changed, 34 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched
|
||||
index 421bef9..0ee5f0f 100644
|
||||
--- a/block/Kconfig.iosched
|
||||
+++ b/block/Kconfig.iosched
|
||||
@@ -39,6 +39,27 @@ config CFQ_GROUP_IOSCHED
|
||||
---help---
|
||||
Enable group IO scheduling in CFQ.
|
||||
|
||||
+config IOSCHED_BFQ
|
||||
+ tristate "BFQ I/O scheduler"
|
||||
+ default n
|
||||
+ ---help---
|
||||
+ The BFQ I/O scheduler tries to distribute bandwidth among
|
||||
+ all processes according to their weights.
|
||||
+ It aims at distributing the bandwidth as desired, independently of
|
||||
+ the disk parameters and with any workload. It also tries to
|
||||
+ guarantee low latency to interactive and soft real-time
|
||||
+ applications. If compiled built-in (saying Y here), BFQ can
|
||||
+ be configured to support hierarchical scheduling.
|
||||
+
|
||||
+config CGROUP_BFQIO
|
||||
+ bool "BFQ hierarchical scheduling support"
|
||||
+ depends on CGROUPS && IOSCHED_BFQ=y
|
||||
+ default n
|
||||
+ ---help---
|
||||
+ Enable hierarchical scheduling in BFQ, using the cgroups
|
||||
+ filesystem interface. The name of the subsystem will be
|
||||
+ bfqio.
|
||||
+
|
||||
choice
|
||||
prompt "Default I/O scheduler"
|
||||
default DEFAULT_CFQ
|
||||
@@ -52,6 +73,16 @@ choice
|
||||
config DEFAULT_CFQ
|
||||
bool "CFQ" if IOSCHED_CFQ=y
|
||||
|
||||
+ config DEFAULT_BFQ
|
||||
+ bool "BFQ" if IOSCHED_BFQ=y
|
||||
+ help
|
||||
+ Selects BFQ as the default I/O scheduler which will be
|
||||
+ used by default for all block devices.
|
||||
+ The BFQ I/O scheduler aims at distributing the bandwidth
|
||||
+ as desired, independently of the disk parameters and with
|
||||
+ any workload. It also tries to guarantee low latency to
|
||||
+ interactive and soft real-time applications.
|
||||
+
|
||||
config DEFAULT_NOOP
|
||||
bool "No-op"
|
||||
|
||||
@@ -61,6 +92,7 @@ config DEFAULT_IOSCHED
|
||||
string
|
||||
default "deadline" if DEFAULT_DEADLINE
|
||||
default "cfq" if DEFAULT_CFQ
|
||||
+ default "bfq" if DEFAULT_BFQ
|
||||
default "noop" if DEFAULT_NOOP
|
||||
|
||||
endmenu
|
||||
diff --git a/block/Makefile b/block/Makefile
|
||||
index 36acdd7..736e91a 100644
|
||||
--- a/block/Makefile
|
||||
+++ b/block/Makefile
|
||||
@@ -18,6 +18,7 @@ obj-$(CONFIG_BLK_DEV_THROTTLING) += blk-throttle.o
|
||||
obj-$(CONFIG_IOSCHED_NOOP) += noop-iosched.o
|
||||
obj-$(CONFIG_IOSCHED_DEADLINE) += deadline-iosched.o
|
||||
obj-$(CONFIG_IOSCHED_CFQ) += cfq-iosched.o
|
||||
+obj-$(CONFIG_IOSCHED_BFQ) += bfq-iosched.o
|
||||
|
||||
obj-$(CONFIG_BLOCK_COMPAT) += compat_ioctl.o
|
||||
obj-$(CONFIG_BLK_CMDLINE_PARSER) += cmdline-parser.o
|
||||
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
|
||||
index c47c358..1047d99 100644
|
||||
--- a/include/linux/blkdev.h
|
||||
+++ b/include/linux/blkdev.h
|
||||
@@ -45,7 +45,7 @@ struct pr_ops;
|
||||
* Maximum number of blkcg policies allowed to be registered concurrently.
|
||||
* Defined here to simplify include dependency.
|
||||
*/
|
||||
-#define BLKCG_MAX_POLS 2
|
||||
+#define BLKCG_MAX_POLS 3
|
||||
|
||||
typedef void (rq_end_io_fn)(struct request *, int);
|
||||
|
||||
--
|
||||
2.10.0
|
||||
|
||||
+2324
-4219
File diff suppressed because it is too large
Load Diff
+115
@@ -0,0 +1,115 @@
|
||||
From bc33c5df710c0aae6db396146194108634ef6f60 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Mon, 12 Sep 2016 16:04:19 +0300
|
||||
Subject: [PATCH] tmp/tpm_crb: fix Intel PTT hw bug during idle state
|
||||
|
||||
There is a HW bug in Skylake, and Broxton PCH Intel PTT device, where
|
||||
most of the registers in the control area except START, REQUEST, CANCEL,
|
||||
and LOC_CTRL lost retention when the device is in the idle state. Hence
|
||||
we need to bring the device to ready state before accessing the other
|
||||
registers. The fix brings device to ready state before trying to read
|
||||
command and response buffer addresses in order to remap the for access.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinn@linux.intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinn@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 47 ++++++++++++++++++++++++++++++++++++++--------
|
||||
1 file changed, 39 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index 8dd0f20..ff0d505 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -315,6 +315,7 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
struct list_head resources;
|
||||
struct resource io_res;
|
||||
struct device *dev = &device->dev;
|
||||
+ u32 pa_high, pa_low;
|
||||
u64 cmd_pa;
|
||||
u32 cmd_size;
|
||||
u64 rsp_pa;
|
||||
@@ -342,12 +343,27 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
if (IS_ERR(priv->cca))
|
||||
return PTR_ERR(priv->cca);
|
||||
|
||||
- cmd_pa = ((u64) ioread32(&priv->cca->cmd_pa_high) << 32) |
|
||||
- (u64) ioread32(&priv->cca->cmd_pa_low);
|
||||
+ /*
|
||||
+ * PTT HW bug w/a: wake up the device to access
|
||||
+ * possibly not retained registers.
|
||||
+ */
|
||||
+ ret = crb_cmd_ready(dev, priv);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ pa_high = ioread32(&priv->cca->cmd_pa_high);
|
||||
+ pa_low = ioread32(&priv->cca->cmd_pa_low);
|
||||
+ cmd_pa = ((u64)pa_high << 32) | pa_low;
|
||||
cmd_size = ioread32(&priv->cca->cmd_size);
|
||||
+
|
||||
+ dev_dbg(dev, "cmd_hi = %X cmd_low = %X cmd_size %X\n",
|
||||
+ pa_high, pa_low, cmd_size);
|
||||
+
|
||||
priv->cmd = crb_map_res(dev, priv, &io_res, cmd_pa, cmd_size);
|
||||
- if (IS_ERR(priv->cmd))
|
||||
- return PTR_ERR(priv->cmd);
|
||||
+ if (IS_ERR(priv->cmd)) {
|
||||
+ ret = PTR_ERR(priv->cmd);
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
memcpy_fromio(&rsp_pa, &priv->cca->rsp_pa, 8);
|
||||
rsp_pa = le64_to_cpu(rsp_pa);
|
||||
@@ -355,7 +371,8 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
|
||||
if (cmd_pa != rsp_pa) {
|
||||
priv->rsp = crb_map_res(dev, priv, &io_res, rsp_pa, rsp_size);
|
||||
- return PTR_ERR_OR_ZERO(priv->rsp);
|
||||
+ ret = PTR_ERR_OR_ZERO(priv->rsp);
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
/* According to the PTP specification, overlapping command and response
|
||||
@@ -363,12 +380,18 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
|
||||
*/
|
||||
if (cmd_size != rsp_size) {
|
||||
dev_err(dev, FW_BUG "overlapping command and response buffer sizes are not identical");
|
||||
- return -EINVAL;
|
||||
+ ret = -EINVAL;
|
||||
+ goto out;
|
||||
}
|
||||
+
|
||||
priv->cmd_size = cmd_size;
|
||||
|
||||
priv->rsp = priv->cmd;
|
||||
- return 0;
|
||||
+
|
||||
+out:
|
||||
+ crb_go_idle(dev, priv);
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int crb_acpi_add(struct acpi_device *device)
|
||||
@@ -412,7 +435,15 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
- return crb_init(device, priv);
|
||||
+ rc = crb_cmd_ready(dev, priv);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ rc = crb_init(device, priv);
|
||||
+ if (rc)
|
||||
+ crb_go_idle(dev, priv);
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int crb_acpi_remove(struct acpi_device *device)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
From e74f2f76c13770bb8e004475a933923e9c92723d Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Sat, 8 Oct 2016 14:59:39 +0300
|
||||
Subject: [PATCH] tmp/tpm_crb: implement runtime pm for tpm_crb
|
||||
|
||||
Utilize runtime_pm for driving tpm crb idle states.
|
||||
The framework calls cmd_ready from the pm_runtime_resume handler
|
||||
and go idle from the pm_runtime_suspend handler.
|
||||
The TPM framework should wake the device before transmit and receive.
|
||||
In case the runtime_pm framework is not compiled in or enabled, the device
|
||||
will be in the permanent ready state.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm-interface.c | 5 +++++
|
||||
drivers/char/tpm/tpm_crb.c | 42 ++++++++++++++++++++++++++++++++++++----
|
||||
2 files changed, 43 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
|
||||
index 3a9149c..cb0e57e 100644
|
||||
--- a/drivers/char/tpm/tpm-interface.c
|
||||
+++ b/drivers/char/tpm/tpm-interface.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/freezer.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
|
||||
#include "tpm.h"
|
||||
#include "tpm_eventlog.h"
|
||||
@@ -356,6 +357,8 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
|
||||
if (!(flags & TPM_TRANSMIT_UNLOCKED))
|
||||
mutex_lock(&chip->tpm_mutex);
|
||||
|
||||
+ pm_runtime_get_sync(chip->dev.parent);
|
||||
+
|
||||
rc = chip->ops->send(chip, (u8 *) buf, count);
|
||||
if (rc < 0) {
|
||||
dev_err(&chip->dev,
|
||||
@@ -397,6 +400,8 @@ ssize_t tpm_transmit(struct tpm_chip *chip, const u8 *buf, size_t bufsiz,
|
||||
dev_err(&chip->dev,
|
||||
"tpm_transmit: tpm_recv: error %zd\n", rc);
|
||||
out:
|
||||
+ pm_runtime_put_sync(chip->dev.parent);
|
||||
+
|
||||
if (!(flags & TPM_TRANSMIT_UNLOCKED))
|
||||
mutex_unlock(&chip->tpm_mutex);
|
||||
return rc;
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index f579f1a..717b6b4 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
#include "tpm.h"
|
||||
|
||||
#define ACPI_SIG_TPM2 "TPM2"
|
||||
@@ -149,8 +150,6 @@ static int __maybe_unused crb_cmd_ready(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
|
||||
-
|
||||
static u8 crb_status(struct tpm_chip *chip)
|
||||
{
|
||||
struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
@@ -433,11 +432,21 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
+ pm_runtime_get_noresume(dev);
|
||||
+ pm_runtime_set_active(dev);
|
||||
+ pm_runtime_enable(dev);
|
||||
+
|
||||
rc = tpm_chip_register(chip);
|
||||
- if (rc)
|
||||
+ if (rc) {
|
||||
crb_go_idle(dev, priv);
|
||||
+ pm_runtime_put_noidle(dev);
|
||||
+ pm_runtime_disable(dev);
|
||||
+ return rc;
|
||||
+ }
|
||||
|
||||
- return rc;
|
||||
+ pm_runtime_put(dev);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int crb_acpi_remove(struct acpi_device *device)
|
||||
@@ -447,9 +456,34 @@ static int crb_acpi_remove(struct acpi_device *device)
|
||||
|
||||
tpm_chip_unregister(chip);
|
||||
|
||||
+ pm_runtime_disable(dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_PM
|
||||
+static int crb_pm_runtime_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
+ struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
+
|
||||
+ return crb_go_idle(dev, priv);
|
||||
+}
|
||||
+
|
||||
+static int crb_pm_runtime_resume(struct device *dev)
|
||||
+{
|
||||
+ struct tpm_chip *chip = dev_get_drvdata(dev);
|
||||
+ struct crb_priv *priv = dev_get_drvdata(&chip->dev);
|
||||
+
|
||||
+ return crb_cmd_ready(dev, priv);
|
||||
+}
|
||||
+#endif /* CONFIG_PM */
|
||||
+
|
||||
+static const struct dev_pm_ops crb_pm = {
|
||||
+ SET_SYSTEM_SLEEP_PM_OPS(tpm_pm_suspend, tpm_pm_resume)
|
||||
+ SET_RUNTIME_PM_OPS(crb_pm_runtime_suspend, crb_pm_runtime_resume, NULL)
|
||||
+};
|
||||
+
|
||||
static struct acpi_device_id crb_device_ids[] = {
|
||||
{"MSFT0101", 0},
|
||||
{"", 0},
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
From ba5287b6ef6a2ee91dc6cc0829649cecf7b70253 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Thu, 15 Sep 2016 10:27:38 +0300
|
||||
Subject: [PATCH] tpm/tpm_crb: implement tpm crb idle state
|
||||
|
||||
The register TPM_CRB_CTRL_REQ_x contains bits goIdle and cmdReady for
|
||||
SW to indicate that the device can enter or should exit the idle state.
|
||||
|
||||
The legacy ACPI-start (SMI + DMA) based devices do not support these
|
||||
bits and the idle state management is not exposed to the host SW.
|
||||
Thus, this functionality only is enabled only for a CRB start (MMIO)
|
||||
based devices.
|
||||
|
||||
Based on Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
original patch:
|
||||
'tpm_crb: implement power tpm crb power management'
|
||||
|
||||
To keep the implementation local to the hw we don't use wait_for_tpm_stat
|
||||
for polling the TPM_CRB_CTRL_REQ.
|
||||
|
||||
[jarkko.sakkinen@linux.intel.com: removed cmdReady debug trace on a
|
||||
success case due the heavy amount of log traffic it causes.]
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 66 insertions(+)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index a7c870a..8dd0f20 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -83,6 +83,72 @@ struct crb_priv {
|
||||
u32 cmd_size;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * crb_go_idle - request tpm crb device to go the idle state
|
||||
+ *
|
||||
+ * @dev: crb device
|
||||
+ * @priv: crb private data
|
||||
+ *
|
||||
+ * Write CRB_CTRL_REQ_GO_IDLE to TPM_CRB_CTRL_REQ
|
||||
+ * The device should respond within TIMEOUT_C by clearing the bit.
|
||||
+ * Anyhow, we do not wait here as a consequent CMD_READY request
|
||||
+ * will be handled correctly even if idle was not completed.
|
||||
+ *
|
||||
+ * The function does nothing for devices with ACPI-start method.
|
||||
+ *
|
||||
+ * Return: 0 always
|
||||
+ */
|
||||
+static int __maybe_unused crb_go_idle(struct device *dev, struct crb_priv *priv)
|
||||
+{
|
||||
+ if (priv->flags & CRB_FL_ACPI_START)
|
||||
+ return 0;
|
||||
+
|
||||
+ iowrite32(CRB_CTRL_REQ_GO_IDLE, &priv->cca->req);
|
||||
+ /* we don't really care when this settles */
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * crb_cmd_ready - request tpm crb device to enter ready state
|
||||
+ *
|
||||
+ * @dev: crb device
|
||||
+ * @priv: crb private data
|
||||
+ *
|
||||
+ * Write CRB_CTRL_REQ_CMD_READY to TPM_CRB_CTRL_REQ
|
||||
+ * and poll till the device acknowledge it by clearing the bit.
|
||||
+ * The device should respond within TIMEOUT_C.
|
||||
+ *
|
||||
+ * The function does nothing for devices with ACPI-start method
|
||||
+ *
|
||||
+ * Return: 0 on success -ETIME on timeout;
|
||||
+ */
|
||||
+static int __maybe_unused crb_cmd_ready(struct device *dev,
|
||||
+ struct crb_priv *priv)
|
||||
+{
|
||||
+ ktime_t stop, start;
|
||||
+
|
||||
+ if (priv->flags & CRB_FL_ACPI_START)
|
||||
+ return 0;
|
||||
+
|
||||
+ iowrite32(CRB_CTRL_REQ_CMD_READY, &priv->cca->req);
|
||||
+
|
||||
+ start = ktime_get();
|
||||
+ stop = ktime_add(start, ms_to_ktime(TPM2_TIMEOUT_C));
|
||||
+ do {
|
||||
+ if (!(ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY))
|
||||
+ return 0;
|
||||
+ usleep_range(50, 100);
|
||||
+ } while (ktime_before(ktime_get(), stop));
|
||||
+
|
||||
+ if (ioread32(&priv->cca->req) & CRB_CTRL_REQ_CMD_READY) {
|
||||
+ dev_warn(dev, "cmdReady timed out\n");
|
||||
+ return -ETIME;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static SIMPLE_DEV_PM_OPS(crb_pm, tpm_pm_suspend, tpm_pm_resume);
|
||||
|
||||
static u8 crb_status(struct tpm_chip *chip)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
From c58bd34cec4c05f8e3362a79ae94de9f405c39b5 Mon Sep 17 00:00:00 2001
|
||||
From: "Winkler, Tomas" <tomas.winkler@intel.com>
|
||||
Date: Mon, 12 Sep 2016 16:04:20 +0300
|
||||
Subject: [PATCH] tpm/tpm_crb: open code the crb_init into acpi_add
|
||||
|
||||
This is preparation step for implementing tpm crb
|
||||
runtime pm. We need to have tpm chip allocated
|
||||
and populated before we access the runtime handlers.
|
||||
|
||||
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
|
||||
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Tested-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
|
||||
---
|
||||
drivers/char/tpm/tpm_crb.c | 26 ++++++++++----------------
|
||||
1 file changed, 10 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
|
||||
index ff0d505..f579f1a 100644
|
||||
--- a/drivers/char/tpm/tpm_crb.c
|
||||
+++ b/drivers/char/tpm/tpm_crb.c
|
||||
@@ -262,21 +262,6 @@ static const struct tpm_class_ops tpm_crb = {
|
||||
.req_complete_val = CRB_DRV_STS_COMPLETE,
|
||||
};
|
||||
|
||||
-static int crb_init(struct acpi_device *device, struct crb_priv *priv)
|
||||
-{
|
||||
- struct tpm_chip *chip;
|
||||
-
|
||||
- chip = tpmm_chip_alloc(&device->dev, &tpm_crb);
|
||||
- if (IS_ERR(chip))
|
||||
- return PTR_ERR(chip);
|
||||
-
|
||||
- dev_set_drvdata(&chip->dev, priv);
|
||||
- chip->acpi_dev_handle = device->handle;
|
||||
- chip->flags = TPM_CHIP_FLAG_TPM2;
|
||||
-
|
||||
- return tpm_chip_register(chip);
|
||||
-}
|
||||
-
|
||||
static int crb_check_resource(struct acpi_resource *ares, void *data)
|
||||
{
|
||||
struct resource *io_res = data;
|
||||
@@ -398,6 +383,7 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_table_tpm2 *buf;
|
||||
struct crb_priv *priv;
|
||||
+ struct tpm_chip *chip;
|
||||
struct device *dev = &device->dev;
|
||||
acpi_status status;
|
||||
u32 sm;
|
||||
@@ -435,11 +421,19 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
+ chip = tpmm_chip_alloc(dev, &tpm_crb);
|
||||
+ if (IS_ERR(chip))
|
||||
+ return PTR_ERR(chip);
|
||||
+
|
||||
+ dev_set_drvdata(&chip->dev, priv);
|
||||
+ chip->acpi_dev_handle = device->handle;
|
||||
+ chip->flags = TPM_CHIP_FLAG_TPM2;
|
||||
+
|
||||
rc = crb_cmd_ready(dev, priv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
- rc = crb_init(device, priv);
|
||||
+ rc = tpm_chip_register(chip);
|
||||
if (rc)
|
||||
crb_go_idle(dev, priv);
|
||||
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+85
-77
@@ -1,6 +1,6 @@
|
||||
|
||||
fs/aufs/Kconfig | 2 +-
|
||||
fs/dcache.c | 1 +
|
||||
fs/dcache.c | 2 ++
|
||||
fs/exec.c | 1 +
|
||||
fs/fcntl.c | 1 +
|
||||
fs/file_table.c | 4 ++++
|
||||
@@ -16,11 +16,11 @@
|
||||
security/commoncap.c | 2 ++
|
||||
security/device_cgroup.c | 2 ++
|
||||
security/security.c | 10 ++++++++++
|
||||
17 files changed, 41 insertions(+), 1 deletion(-)
|
||||
17 files changed, 42 insertions(+), 1 deletion(-)
|
||||
|
||||
diff -Nurp linux-4.8-aufs/fs/aufs/Kconfig linux-4.8-aufs-mod/fs/aufs/Kconfig
|
||||
--- linux-4.8-aufs/fs/aufs/Kconfig 2016-07-04 19:02:29.246286120 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/aufs/Kconfig 2016-07-04 19:03:53.653714965 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/aufs/Kconfig linux-4.9-aufs-mod/fs/aufs/Kconfig
|
||||
--- linux-4.9-aufs/fs/aufs/Kconfig 2016-12-31 00:31:52.367789380 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/aufs/Kconfig 2016-12-31 00:32:35.153785422 +0200
|
||||
@@ -1,5 +1,5 @@
|
||||
config AUFS_FS
|
||||
- bool "Aufs (Advanced multi layered unification filesystem) support"
|
||||
@@ -28,10 +28,10 @@ diff -Nurp linux-4.8-aufs/fs/aufs/Kconfig linux-4.8-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.8-aufs/fs/dcache.c linux-4.8-aufs-mod/fs/dcache.c
|
||||
--- linux-4.8-aufs/fs/dcache.c 2016-07-04 19:02:29.260286196 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/dcache.c 2016-07-04 19:03:53.653714965 +0300
|
||||
@@ -1310,6 +1310,7 @@ rename_retry:
|
||||
diff -Nurp linux-4.9-aufs/fs/dcache.c linux-4.9-aufs-mod/fs/dcache.c
|
||||
--- linux-4.9-aufs/fs/dcache.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/dcache.c 2016-12-31 01:49:12.324360147 +0200
|
||||
@@ -1272,6 +1272,7 @@ rename_retry:
|
||||
seq = 1;
|
||||
goto again;
|
||||
}
|
||||
@@ -39,9 +39,17 @@ diff -Nurp linux-4.8-aufs/fs/dcache.c linux-4.8-aufs-mod/fs/dcache.c
|
||||
|
||||
/*
|
||||
* Search for at least 1 mount point in the dentry's subdirs.
|
||||
diff -Nurp linux-4.8-aufs/fs/exec.c linux-4.8-aufs-mod/fs/exec.c
|
||||
--- linux-4.8-aufs/fs/exec.c 2016-07-04 17:58:15.707773651 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/exec.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -2855,6 +2856,7 @@ void d_exchange(struct dentry *dentry1,
|
||||
|
||||
write_sequnlock(&rename_lock);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(d_exchange);
|
||||
|
||||
/**
|
||||
* d_ancestor - search for an ancestor
|
||||
diff -Nurp linux-4.9-aufs/fs/exec.c linux-4.9-aufs-mod/fs/exec.c
|
||||
--- linux-4.9-aufs/fs/exec.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/exec.c 2016-12-31 00:32:35.153785422 +0200
|
||||
@@ -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);
|
||||
@@ -50,9 +58,9 @@ diff -Nurp linux-4.8-aufs/fs/exec.c linux-4.8-aufs-mod/fs/exec.c
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
diff -Nurp linux-4.8-aufs/fs/fcntl.c linux-4.8-aufs-mod/fs/fcntl.c
|
||||
--- linux-4.8-aufs/fs/fcntl.c 2016-07-04 19:02:29.260286196 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/fcntl.c 2016-07-04 19:03:53.654714970 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/fcntl.c linux-4.9-aufs-mod/fs/fcntl.c
|
||||
--- linux-4.9-aufs/fs/fcntl.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/fcntl.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -82,6 +82,7 @@ int setfl(int fd, struct file * filp, un
|
||||
out:
|
||||
return error;
|
||||
@@ -61,9 +69,9 @@ diff -Nurp linux-4.8-aufs/fs/fcntl.c linux-4.8-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.8-aufs/fs/file_table.c linux-4.8-aufs-mod/fs/file_table.c
|
||||
--- linux-4.8-aufs/fs/file_table.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/file_table.c 2016-07-04 19:03:53.654714970 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/file_table.c linux-4.9-aufs-mod/fs/file_table.c
|
||||
--- linux-4.9-aufs/fs/file_table.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/file_table.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -147,6 +147,7 @@ over:
|
||||
}
|
||||
return ERR_PTR(-ENFILE);
|
||||
@@ -96,10 +104,10 @@ diff -Nurp linux-4.8-aufs/fs/file_table.c linux-4.8-aufs-mod/fs/file_table.c
|
||||
|
||||
void __init files_init(void)
|
||||
{
|
||||
diff -Nurp linux-4.8-aufs/fs/inode.c linux-4.8-aufs-mod/fs/inode.c
|
||||
--- linux-4.8-aufs/fs/inode.c 2016-07-04 19:02:29.261286202 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/inode.c 2016-07-04 20:51:39.805168596 +0300
|
||||
@@ -1600,6 +1600,7 @@ int update_time(struct inode *inode, str
|
||||
diff -Nurp linux-4.9-aufs/fs/inode.c linux-4.9-aufs-mod/fs/inode.c
|
||||
--- linux-4.9-aufs/fs/inode.c 2016-12-31 00:31:52.379789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/inode.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -1651,6 +1651,7 @@ int update_time(struct inode *inode, str
|
||||
|
||||
return update_time(inode, time, flags);
|
||||
}
|
||||
@@ -107,10 +115,10 @@ diff -Nurp linux-4.8-aufs/fs/inode.c linux-4.8-aufs-mod/fs/inode.c
|
||||
|
||||
/**
|
||||
* touch_atime - update the access time
|
||||
diff -Nurp linux-4.8-aufs/fs/namespace.c linux-4.8-aufs-mod/fs/namespace.c
|
||||
--- linux-4.8-aufs/fs/namespace.c 2016-07-04 17:58:15.729773645 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/namespace.c 2016-07-04 19:03:53.654714970 +0300
|
||||
@@ -463,6 +463,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
diff -Nurp linux-4.9-aufs/fs/namespace.c linux-4.9-aufs-mod/fs/namespace.c
|
||||
--- linux-4.9-aufs/fs/namespace.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/namespace.c 2016-12-31 00:32:35.154785422 +0200
|
||||
@@ -466,6 +466,7 @@ void __mnt_drop_write(struct vfsmount *m
|
||||
mnt_dec_writers(real_mount(mnt));
|
||||
preempt_enable();
|
||||
}
|
||||
@@ -118,7 +126,7 @@ diff -Nurp linux-4.8-aufs/fs/namespace.c linux-4.8-aufs-mod/fs/namespace.c
|
||||
|
||||
/**
|
||||
* mnt_drop_write - give up write access to a mount
|
||||
@@ -1812,6 +1813,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
@@ -1823,6 +1824,7 @@ int iterate_mounts(int (*f)(struct vfsmo
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -126,9 +134,9 @@ diff -Nurp linux-4.8-aufs/fs/namespace.c linux-4.8-aufs-mod/fs/namespace.c
|
||||
|
||||
static void cleanup_group_ids(struct mount *mnt, struct mount *end)
|
||||
{
|
||||
diff -Nurp linux-4.8-aufs/fs/notify/group.c linux-4.8-aufs-mod/fs/notify/group.c
|
||||
--- linux-4.8-aufs/fs/notify/group.c 2016-07-04 17:58:15.742773641 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/notify/group.c 2016-07-04 19:03:53.655714975 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/notify/group.c linux-4.9-aufs-mod/fs/notify/group.c
|
||||
--- linux-4.9-aufs/fs/notify/group.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/notify/group.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/srcu.h>
|
||||
#include <linux/rculist.h>
|
||||
@@ -137,7 +145,7 @@ diff -Nurp linux-4.8-aufs/fs/notify/group.c linux-4.8-aufs-mod/fs/notify/group.c
|
||||
|
||||
#include <linux/fsnotify_backend.h>
|
||||
#include "fsnotify.h"
|
||||
@@ -81,6 +82,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
@@ -100,6 +101,7 @@ void fsnotify_get_group(struct fsnotify_
|
||||
{
|
||||
atomic_inc(&group->refcnt);
|
||||
}
|
||||
@@ -145,7 +153,7 @@ diff -Nurp linux-4.8-aufs/fs/notify/group.c linux-4.8-aufs-mod/fs/notify/group.c
|
||||
|
||||
/*
|
||||
* Drop a reference to a group. Free it if it's through.
|
||||
@@ -90,6 +92,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
@@ -109,6 +111,7 @@ void fsnotify_put_group(struct fsnotify_
|
||||
if (atomic_dec_and_test(&group->refcnt))
|
||||
fsnotify_final_destroy_group(group);
|
||||
}
|
||||
@@ -153,7 +161,7 @@ diff -Nurp linux-4.8-aufs/fs/notify/group.c linux-4.8-aufs-mod/fs/notify/group.c
|
||||
|
||||
/*
|
||||
* Create a new fsnotify_group and hold a reference for the group returned.
|
||||
@@ -118,6 +121,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
@@ -137,6 +140,7 @@ struct fsnotify_group *fsnotify_alloc_gr
|
||||
|
||||
return group;
|
||||
}
|
||||
@@ -161,9 +169,9 @@ diff -Nurp linux-4.8-aufs/fs/notify/group.c linux-4.8-aufs-mod/fs/notify/group.c
|
||||
|
||||
int fsnotify_fasync(int fd, struct file *file, int on)
|
||||
{
|
||||
diff -Nurp linux-4.8-aufs/fs/notify/mark.c linux-4.8-aufs-mod/fs/notify/mark.c
|
||||
--- linux-4.8-aufs/fs/notify/mark.c 2016-07-04 17:58:15.742773641 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/notify/mark.c 2016-07-04 19:03:53.655714975 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/notify/mark.c linux-4.9-aufs-mod/fs/notify/mark.c
|
||||
--- linux-4.9-aufs/fs/notify/mark.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/notify/mark.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -113,6 +113,7 @@ void fsnotify_put_mark(struct fsnotify_m
|
||||
mark->free_mark(mark);
|
||||
}
|
||||
@@ -196,9 +204,9 @@ diff -Nurp linux-4.8-aufs/fs/notify/mark.c linux-4.8-aufs-mod/fs/notify/mark.c
|
||||
|
||||
/*
|
||||
* Nothing fancy, just initialize lists and locks and counters.
|
||||
diff -Nurp linux-4.8-aufs/fs/open.c linux-4.8-aufs-mod/fs/open.c
|
||||
--- linux-4.8-aufs/fs/open.c 2016-07-04 17:58:15.746773640 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/open.c 2016-07-04 19:03:53.655714975 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/open.c linux-4.9-aufs-mod/fs/open.c
|
||||
--- linux-4.9-aufs/fs/open.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/open.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, l
|
||||
inode_unlock(dentry->d_inode);
|
||||
return ret;
|
||||
@@ -207,7 +215,7 @@ diff -Nurp linux-4.8-aufs/fs/open.c linux-4.8-aufs-mod/fs/open.c
|
||||
|
||||
long vfs_truncate(const struct path *path, loff_t length)
|
||||
{
|
||||
@@ -678,6 +679,7 @@ int open_check_o_direct(struct file *f)
|
||||
@@ -695,6 +696,7 @@ int open_check_o_direct(struct file *f)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -215,9 +223,9 @@ diff -Nurp linux-4.8-aufs/fs/open.c linux-4.8-aufs-mod/fs/open.c
|
||||
|
||||
static int do_dentry_open(struct file *f,
|
||||
struct inode *inode,
|
||||
diff -Nurp linux-4.8-aufs/fs/read_write.c linux-4.8-aufs-mod/fs/read_write.c
|
||||
--- linux-4.8-aufs/fs/read_write.c 2016-07-04 19:02:29.262286207 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/read_write.c 2016-07-04 19:03:53.655714975 +0300
|
||||
diff -Nurp linux-4.9-aufs/fs/read_write.c linux-4.9-aufs-mod/fs/read_write.c
|
||||
--- linux-4.9-aufs/fs/read_write.c 2016-12-31 00:31:52.380789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/read_write.c 2016-12-31 00:32:35.155785422 +0200
|
||||
@@ -525,6 +525,7 @@ vfs_readf_t vfs_readf(struct file *file)
|
||||
return new_sync_read;
|
||||
return ERR_PTR(-ENOSYS);
|
||||
@@ -234,10 +242,10 @@ diff -Nurp linux-4.8-aufs/fs/read_write.c linux-4.8-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.8-aufs/fs/splice.c linux-4.8-aufs-mod/fs/splice.c
|
||||
--- linux-4.8-aufs/fs/splice.c 2016-07-04 19:02:29.262286207 +0300
|
||||
+++ linux-4.8-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
|
||||
diff -Nurp linux-4.9-aufs/fs/splice.c linux-4.9-aufs-mod/fs/splice.c
|
||||
--- linux-4.9-aufs/fs/splice.c 2016-12-31 00:31:52.380789379 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/splice.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -868,6 +868,7 @@ long do_splice_from(struct pipe_inode_in
|
||||
|
||||
return splice_write(pipe, out, ppos, len, flags);
|
||||
}
|
||||
@@ -245,7 +253,7 @@ diff -Nurp linux-4.8-aufs/fs/splice.c linux-4.8-aufs-mod/fs/splice.c
|
||||
|
||||
/*
|
||||
* Attempt to initiate a splice from a file to a pipe.
|
||||
@@ -1153,6 +1154,7 @@ long do_splice_to(struct file *in, loff_
|
||||
@@ -897,6 +898,7 @@ long do_splice_to(struct file *in, loff_
|
||||
|
||||
return splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
@@ -253,29 +261,29 @@ diff -Nurp linux-4.8-aufs/fs/splice.c linux-4.8-aufs-mod/fs/splice.c
|
||||
|
||||
/**
|
||||
* splice_direct_to_actor - splices data directly between two non-pipes
|
||||
diff -Nurp linux-4.8-aufs/fs/xattr.c linux-4.8-aufs-mod/fs/xattr.c
|
||||
--- linux-4.8-aufs/fs/xattr.c 2016-07-04 17:58:15.754773638 +0300
|
||||
+++ linux-4.8-aufs-mod/fs/xattr.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -207,6 +207,7 @@ vfs_getxattr_alloc(struct dentry *dentry
|
||||
diff -Nurp linux-4.9-aufs/fs/xattr.c linux-4.9-aufs-mod/fs/xattr.c
|
||||
--- linux-4.9-aufs/fs/xattr.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/fs/xattr.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -296,6 +296,7 @@ vfs_getxattr_alloc(struct dentry *dentry
|
||||
*xattr_value = value;
|
||||
return error;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(vfs_getxattr_alloc);
|
||||
|
||||
ssize_t
|
||||
vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
|
||||
diff -Nurp linux-4.8-aufs/kernel/task_work.c linux-4.8-aufs-mod/kernel/task_work.c
|
||||
--- linux-4.8-aufs/kernel/task_work.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.8-aufs-mod/kernel/task_work.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -118,3 +118,4 @@ void task_work_run(void)
|
||||
__vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
|
||||
diff -Nurp linux-4.9-aufs/kernel/task_work.c linux-4.9-aufs-mod/kernel/task_work.c
|
||||
--- linux-4.9-aufs/kernel/task_work.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/kernel/task_work.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -119,3 +119,4 @@ void task_work_run(void)
|
||||
} while (work);
|
||||
}
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(task_work_run);
|
||||
diff -Nurp linux-4.8-aufs/security/commoncap.c linux-4.8-aufs-mod/security/commoncap.c
|
||||
--- linux-4.8-aufs/security/commoncap.c 2016-07-04 17:58:15.945773585 +0300
|
||||
+++ linux-4.8-aufs-mod/security/commoncap.c 2016-07-04 19:03:53.656714979 +0300
|
||||
@@ -1058,12 +1058,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||
diff -Nurp linux-4.9-aufs/security/commoncap.c linux-4.9-aufs-mod/security/commoncap.c
|
||||
--- linux-4.9-aufs/security/commoncap.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/commoncap.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -1061,12 +1061,14 @@ int cap_mmap_addr(unsigned long addr)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -290,9 +298,9 @@ diff -Nurp linux-4.8-aufs/security/commoncap.c linux-4.8-aufs-mod/security/commo
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
diff -Nurp linux-4.8-aufs/security/device_cgroup.c linux-4.8-aufs-mod/security/device_cgroup.c
|
||||
--- linux-4.8-aufs/security/device_cgroup.c 2016-05-16 01:43:13.000000000 +0300
|
||||
+++ linux-4.8-aufs-mod/security/device_cgroup.c 2016-07-04 19:03:53.656714979 +0300
|
||||
diff -Nurp linux-4.9-aufs/security/device_cgroup.c linux-4.9-aufs-mod/security/device_cgroup.c
|
||||
--- linux-4.9-aufs/security/device_cgroup.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/device_cgroup.c 2016-12-31 00:32:35.156785422 +0200
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/device_cgroup.h>
|
||||
#include <linux/cgroup.h>
|
||||
@@ -309,10 +317,10 @@ diff -Nurp linux-4.8-aufs/security/device_cgroup.c linux-4.8-aufs-mod/security/d
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/security.c
|
||||
--- linux-4.8-aufs/security/security.c 2016-07-04 17:58:15.948773584 +0300
|
||||
+++ linux-4.8-aufs-mod/security/security.c 2016-07-04 19:03:53.657714984 +0300
|
||||
@@ -434,6 +434,7 @@ int security_path_rmdir(const struct pat
|
||||
diff -Nurp linux-4.9-aufs/security/security.c linux-4.9-aufs-mod/security/security.c
|
||||
--- linux-4.9-aufs/security/security.c 2016-12-11 21:17:54.000000000 +0200
|
||||
+++ linux-4.9-aufs-mod/security/security.c 2016-12-31 00:32:35.157785422 +0200
|
||||
@@ -443,6 +443,7 @@ int security_path_rmdir(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_rmdir, 0, dir, dentry);
|
||||
}
|
||||
@@ -320,7 +328,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_path_unlink(const struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -450,6 +451,7 @@ int security_path_symlink(const struct p
|
||||
@@ -459,6 +460,7 @@ int security_path_symlink(const struct p
|
||||
return 0;
|
||||
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
|
||||
}
|
||||
@@ -328,7 +336,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_path_link(struct dentry *old_dentry, const struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -458,6 +460,7 @@ int security_path_link(struct dentry *ol
|
||||
@@ -467,6 +469,7 @@ int security_path_link(struct dentry *ol
|
||||
return 0;
|
||||
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
@@ -336,7 +344,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
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
|
||||
@@ -494,6 +497,7 @@ int security_path_truncate(const struct
|
||||
return 0;
|
||||
return call_int_hook(path_truncate, 0, path);
|
||||
}
|
||||
@@ -344,7 +352,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_path_chmod(const struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -492,6 +496,7 @@ int security_path_chmod(const struct pat
|
||||
@@ -501,6 +505,7 @@ int security_path_chmod(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chmod, 0, path, mode);
|
||||
}
|
||||
@@ -352,7 +360,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -499,6 +504,7 @@ int security_path_chown(const struct pat
|
||||
@@ -508,6 +513,7 @@ int security_path_chown(const struct pat
|
||||
return 0;
|
||||
return call_int_hook(path_chown, 0, path, uid, gid);
|
||||
}
|
||||
@@ -360,7 +368,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_path_chroot(const struct path *path)
|
||||
{
|
||||
@@ -584,6 +590,7 @@ int security_inode_readlink(struct dentr
|
||||
@@ -593,6 +599,7 @@ int security_inode_readlink(struct dentr
|
||||
return 0;
|
||||
return call_int_hook(inode_readlink, 0, dentry);
|
||||
}
|
||||
@@ -368,7 +376,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
|
||||
bool rcu)
|
||||
@@ -599,6 +606,7 @@ int security_inode_permission(struct ino
|
||||
@@ -608,6 +615,7 @@ int security_inode_permission(struct ino
|
||||
return 0;
|
||||
return call_int_hook(inode_permission, 0, inode, mask);
|
||||
}
|
||||
@@ -376,7 +384,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -737,6 +745,7 @@ int security_file_permission(struct file
|
||||
@@ -779,6 +787,7 @@ int security_file_permission(struct file
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
@@ -384,7 +392,7 @@ diff -Nurp linux-4.8-aufs/security/security.c linux-4.8-aufs-mod/security/securi
|
||||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -796,6 +805,7 @@ int security_mmap_file(struct file *file
|
||||
@@ -838,6 +847,7 @@ int security_mmap_file(struct file *file
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
+621
-568
File diff suppressed because it is too large
Load Diff
+44
@@ -0,0 +1,44 @@
|
||||
From e522751d605d99a81508e58390a8f51ee96fb662 Mon Sep 17 00:00:00 2001
|
||||
From: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
|
||||
Date: Tue, 29 Nov 2016 15:18:20 +0100
|
||||
Subject: [PATCH] seq_file: reset iterator to first record for zero offset
|
||||
|
||||
If kernfs file is empty on a first read, successive read operations
|
||||
using the same file descriptor will return no data, even when data is
|
||||
available. Default kernfs 'seq_next' implementation advances iterator
|
||||
position even when next object is not there. Kernfs 'seq_start' for
|
||||
following requests will not return iterator as position is already on
|
||||
the second object.
|
||||
|
||||
This defect doesn't allow to monitor badblocks sysfs files from MD raid.
|
||||
They are initially empty but if data appears at some stage, userspace is
|
||||
not able to read it.
|
||||
|
||||
Signed-off-by: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
||||
---
|
||||
fs/seq_file.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/fs/seq_file.c b/fs/seq_file.c
|
||||
index 368bfb9..a11f271 100644
|
||||
--- a/fs/seq_file.c
|
||||
+++ b/fs/seq_file.c
|
||||
@@ -190,6 +190,13 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
|
||||
*/
|
||||
m->version = file->f_version;
|
||||
|
||||
+ /*
|
||||
+ * if request is to read from zero offset, reset iterator to first
|
||||
+ * record as it might have been already advanced by previous requests
|
||||
+ */
|
||||
+ if (*ppos == 0)
|
||||
+ m->index = 0;
|
||||
+
|
||||
/* Don't assume *ppos is where we left it */
|
||||
if (unlikely(*ppos != m->read_pos)) {
|
||||
while ((err = traverse(m, *ppos)) == -EAGAIN)
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
From 8726f2faa371514fba2f594d799db95203dfeee0 Mon Sep 17 00:00:00 2001
|
||||
From: Francisco Jerez <currojerez@riseup.net>
|
||||
Date: Thu, 12 Jan 2017 12:44:54 +0200
|
||||
Subject: drm/i915: Remove WaDisableLSQCROPERFforOCL KBL workaround.
|
||||
|
||||
The WaDisableLSQCROPERFforOCL workaround has the side effect of
|
||||
disabling an L3SQ optimization that has huge performance implications
|
||||
and is unlikely to be necessary for the correct functioning of usual
|
||||
graphic workloads. Userspace is free to re-enable the workaround on
|
||||
demand, and is generally in a better position to determine whether the
|
||||
workaround is necessary than the DRM is (e.g. only during the
|
||||
execution of compute kernels that rely on both L3 fences and HDC R/W
|
||||
requests).
|
||||
|
||||
The same workaround seems to apply to BDW (at least to production
|
||||
stepping G1) and SKL as well (the internal workaround database claims
|
||||
that it does for all steppings, while the BSpec workaround table only
|
||||
mentions pre-production steppings), but the DRM doesn't do anything
|
||||
beyond whitelisting the L3SQCREG4 register so userspace can enable it
|
||||
when it sees fit. Do the same on KBL platforms.
|
||||
|
||||
Improves performance of the GFXBench4 gl_manhattan31 benchmark by 60%,
|
||||
and gl_4 (AKA car chase) by 14% on a KBL GT2 running Mesa master --
|
||||
This is followed by a regression of 35% and 10% respectively for the
|
||||
same benchmarks and platform caused by my recent patch series
|
||||
switching userspace to use the dataport constant cache instead of the
|
||||
sampler to implement uniform pull constant loads, which caused us to
|
||||
hit more heavily the L3 cache (and on platforms other than KBL had the
|
||||
opposite effect of improving performance of the same two benchmarks).
|
||||
The overall effect on KBL of this change combined with the recent
|
||||
userspace change is respectively 4.6% and 2.6%. SynMark2 OglShMapPcf
|
||||
was affected by the constant cache changes (though it improved as it
|
||||
did on other platforms rather than regressing), but is not
|
||||
significantly affected by this patch (with statistical significance of
|
||||
5% and sample size 20).
|
||||
|
||||
v2: Drop some more code to avoid unused variable warning.
|
||||
|
||||
Fixes: 738fa1b3123f ("drm/i915/kbl: Add WaDisableLSQCROPERFforOCL")
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99256
|
||||
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
|
||||
Cc: Matthew Auld <matthew.william.auld@gmail.com>
|
||||
Cc: Eero Tamminen <eero.t.tamminen@intel.com>
|
||||
Cc: Jani Nikula <jani.nikula@intel.com>
|
||||
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Cc: beignet@lists.freedesktop.org
|
||||
Cc: <stable@vger.kernel.org> # v4.7+
|
||||
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
[Removed double Fixes tag]
|
||||
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1484217894-20505-1-git-send-email-mika.kuoppala@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index db714dc..8acab87 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -970,18 +970,8 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t *batch,
|
||||
uint32_t index)
|
||||
{
|
||||
- struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
- /*
|
||||
- * WaDisableLSQCROPERFforOCL:kbl
|
||||
- * This WA is implemented in skl_init_clock_gating() but since
|
||||
- * this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
- * set this bit here to retain the WA during flush.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
-
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
MI_SRM_LRM_GLOBAL_GTT));
|
||||
wa_ctx_emit_reg(batch, index, GEN8_L3SQCREG4);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index ab83fc2..49fa800 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1095,14 +1095,6 @@ static int kbl_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
HDC_FENCE_DEST_SLM_DISABLE);
|
||||
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:kbl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaToEnableHwFixForPushConstHWBug:kbl */
|
||||
if (IS_KBL_REVID(dev_priv, KBL_REVID_C0, REVID_FOREVER))
|
||||
WA_SET_BIT_MASKED(COMMON_SLICE_CHICKEN2,
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
From a117f378f44150e6d13d2f19740fb757425b651f Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:44 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for A0 and B0 revisions
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/7929af62a68504c84038a8db1625bd96ebaa9e6f.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 0568fb5..57da2b7 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -1299,10 +1299,6 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
|
||||
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
|
||||
struct drm_device *dev = dig_port->base.base.dev;
|
||||
|
||||
- /* WaDisableHBR2:skl */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0))
|
||||
- return false;
|
||||
-
|
||||
if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
|
||||
(INTEL_INFO(dev)->gen >= 9))
|
||||
return true;
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp_link_training.c b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
index c438b02..0048b52 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp_link_training.c
|
||||
@@ -225,9 +225,6 @@ static u32 intel_dp_training_pattern(struct intel_dp *intel_dp)
|
||||
* Intel platforms that support HBR2 also support TPS3. TPS3 support is
|
||||
* also mandatory for downstream devices that support HBR2. However, not
|
||||
* all sinks follow the spec.
|
||||
- *
|
||||
- * Due to WaDisableHBR2 SKL < B0 is the only exception where TPS3 is
|
||||
- * supported in source but still not enabled.
|
||||
*/
|
||||
source_tps3 = intel_dp_source_supports_hbr2(intel_dp);
|
||||
sink_tps3 = drm_dp_tps3_supported(intel_dp->dpcd);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
index 6fd39ef..acc1dbd 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_guc_loader.c
|
||||
@@ -375,9 +375,8 @@ static int guc_ucode_xfer(struct drm_i915_private *dev_priv)
|
||||
/* Enable MIA caching. GuC clock gating is disabled. */
|
||||
I915_WRITE(GUC_SHIM_CONTROL, GUC_SHIM_CONTROL_VALUE);
|
||||
|
||||
- /* WaDisableMinuteIaClockGating:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
+ /* WaDisableMinuteIaClockGating:bxt */
|
||||
+ if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GUC_SHIM_CONTROL, (I915_READ(GUC_SHIM_CONTROL) &
|
||||
~GUC_ENABLE_MIA_CLOCK_GATING));
|
||||
}
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 39417b7..47f7afa 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -269,8 +269,7 @@ logical_ring_init_platform_invariants(struct intel_engine_cs *engine)
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
|
||||
engine->disable_lite_restore_wa =
|
||||
- (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) &&
|
||||
+ IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1) &&
|
||||
(engine->id == VCS || engine->id == VCS2);
|
||||
|
||||
engine->ctx_desc_template = GEN8_CTX_VALID;
|
||||
@@ -1068,9 +1067,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
{
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1)) {
|
||||
wa_ctx_emit(batch, index, MI_LOAD_REGISTER_IMM(1));
|
||||
wa_ctx_emit_reg(batch, index, GEN9_SLICE_COMMON_ECO_CHICKEN0);
|
||||
wa_ctx_emit(batch, index,
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 7a74750..2faf64f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -851,15 +851,13 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
|
||||
WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
|
||||
GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC);
|
||||
|
||||
- /* WaDisableDgMirrorFixInHalfSliceChicken5:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableDgMirrorFixInHalfSliceChicken5:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
WA_CLR_BIT_MASKED(GEN9_HALF_SLICE_CHICKEN5,
|
||||
GEN9_DG_MIRROR_FIX_ENABLE);
|
||||
|
||||
- /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_B0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ /* WaSetDisablePixMaskCammingAndRhwoInCommonSliceChicken:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
WA_SET_BIT_MASKED(GEN7_COMMON_SLICE_CHICKEN1,
|
||||
GEN9_RHWO_OPTIMIZATION_DISABLE);
|
||||
/*
|
||||
@@ -1023,15 +1021,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
GEN8_LQSC_RO_PERF_DIS);
|
||||
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
- GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* WaDisablePowerCompilerClockGating:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_B0, SKL_REVID_B0))
|
||||
- WA_SET_BIT_MASKED(HIZ_CHICKEN,
|
||||
- BDW_HIZ_POWER_COMPILER_CLOCK_GATING_DISABLE);
|
||||
+ I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
+ GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
/* WaBarrierPerformanceFixDisable:skl */
|
||||
if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
From 9fc736e833d226853fd53843e35d6a1d542394ed Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:46 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for D0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/d28d21ceddeec226b5d1a20a7382bee9a72709a4.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index 47f7afa..ca649cc 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -994,9 +994,8 @@ static int gen9_init_indirectctx_bb(struct intel_engine_cs *engine,
|
||||
struct drm_i915_private *dev_priv = engine->i915;
|
||||
uint32_t index = wa_ctx_start(wa_ctx, *offset, CACHELINE_DWORDS);
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_DISABLE);
|
||||
|
||||
/* WaFlushCoherentL3CacheLinesAtContextSwitch:skl,bxt */
|
||||
@@ -1095,9 +1094,8 @@ static int gen9_init_perctx_bb(struct intel_engine_cs *engine,
|
||||
wa_ctx_emit(batch, index, MI_NOOP);
|
||||
}
|
||||
|
||||
- /* WaDisableCtxRestoreArbitration:skl,bxt */
|
||||
- if (IS_SKL_REVID(engine->i915, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
+ /* WaDisableCtxRestoreArbitration:bxt */
|
||||
+ if (IS_BXT_REVID(engine->i915, 0, BXT_REVID_A1))
|
||||
wa_ctx_emit(batch, index, MI_ARB_ON_OFF | MI_ARB_ENABLE);
|
||||
|
||||
wa_ctx_emit(batch, index, MI_BATCH_BUFFER_END);
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 2df06b7..a860c40 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -5335,8 +5335,7 @@ static void gen9_enable_rc6(struct drm_i915_private *dev_priv)
|
||||
rc6_mask = GEN6_RC_CTL_RC6_ENABLE;
|
||||
DRM_INFO("RC6 %s\n", onoff(rc6_mask & GEN6_RC_CTL_RC6_ENABLE));
|
||||
/* WaRsUseTimeoutMode */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_D0) ||
|
||||
- IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
+ if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1)) {
|
||||
I915_WRITE(GEN6_RC6_THRESHOLD, 625); /* 800us */
|
||||
I915_WRITE(GEN6_RC_CONTROL, GEN6_RC_CTL_HW_ENABLE |
|
||||
GEN7_RC_CTL_TO_MODE |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 474ce84..6880082 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1000,10 +1000,8 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
* until D0 which is the default case so this is equivalent to
|
||||
* !WaDisablePerCtxtPreemptionGranularityControl:skl
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_E0, REVID_FOREVER)) {
|
||||
- I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
- _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
- }
|
||||
+ I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
+ _MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
/* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
@@ -1023,12 +1021,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
|
||||
- /* WaBarrierPerformanceFixDisable:skl */
|
||||
- if (IS_SKL_REVID(dev_priv, SKL_REVID_C0, SKL_REVID_D0))
|
||||
- WA_SET_BIT_MASKED(HDC_CHICKEN0,
|
||||
- HDC_FENCE_DEST_SLM_DISABLE |
|
||||
- HDC_BARRIER_PERFORMANCE_DISABLE);
|
||||
-
|
||||
/* WaDisableSbeCacheDispatchPortSharing:skl */
|
||||
if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_F0))
|
||||
WA_SET_BIT_MASKED(
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
From 3be192e92ddcad15f7bf6b4b9e3f195eb8c1fe76 Mon Sep 17 00:00:00 2001
|
||||
From: Jani Nikula <jani.nikula@intel.com>
|
||||
Date: Fri, 16 Sep 2016 16:59:47 +0300
|
||||
Subject: drm/i915/skl: drop workarounds for E0 revision
|
||||
|
||||
Pre-production hardware is not supported.
|
||||
|
||||
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/0633a02177195703502ef2396aab03efc0314334.1474034059.git.jani.nikula@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
index ca649cc..2d8eb2e 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_lrc.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_lrc.c
|
||||
@@ -845,13 +845,12 @@ static inline int gen8_emit_flush_coherentl3_wa(struct intel_engine_cs *engine,
|
||||
uint32_t l3sqc4_flush = (0x40400000 | GEN8_LQSC_FLUSH_COHERENT_LINES);
|
||||
|
||||
/*
|
||||
- * WaDisableLSQCROPERFforOCL:skl,kbl
|
||||
+ * WaDisableLSQCROPERFforOCL:kbl
|
||||
* This WA is implemented in skl_init_clock_gating() but since
|
||||
* this batch updates GEN8_L3SQCREG4 with default value we need to
|
||||
* set this bit here to retain the WA during flush.
|
||||
*/
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0) ||
|
||||
- IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
+ if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_E0))
|
||||
l3sqc4_flush |= GEN8_LQSC_RO_PERF_DIS;
|
||||
|
||||
wa_ctx_emit(batch, index, (MI_STORE_REGISTER_MEM_GEN8 |
|
||||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
index 6880082..68dc27f 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
|
||||
@@ -1003,20 +1003,6 @@ static int skl_init_workarounds(struct intel_engine_cs *engine)
|
||||
I915_WRITE(GEN7_FF_SLICE_CS_CHICKEN1,
|
||||
_MASKED_BIT_ENABLE(GEN9_FFSC_PERCTX_PREEMPT_CTRL));
|
||||
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0)) {
|
||||
- /* WaDisableChickenBitTSGBarrierAckForFFSliceCS:skl */
|
||||
- I915_WRITE(FF_SLICE_CS_CHICKEN2,
|
||||
- _MASKED_BIT_ENABLE(GEN9_TSG_BARRIER_ACK_DISABLE));
|
||||
- }
|
||||
-
|
||||
- /* GEN8_L3SQCREG4 has a dependency with WA batch so any new changes
|
||||
- * involving this register should also be added to WA batch as required.
|
||||
- */
|
||||
- if (IS_SKL_REVID(dev_priv, 0, SKL_REVID_E0))
|
||||
- /* WaDisableLSQCROPERFforOCL:skl */
|
||||
- I915_WRITE(GEN8_L3SQCREG4, I915_READ(GEN8_L3SQCREG4) |
|
||||
- GEN8_LQSC_RO_PERF_DIS);
|
||||
-
|
||||
/* WaEnableGapsTsvCreditFix:skl */
|
||||
I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
|
||||
GEN9_GAPS_TSV_CREDIT_DISABLE));
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -4112,11 +4112,11 @@ head: c99566fb810c9d8cae5e9cd39d1772b55e2f514c
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
--- linux/drivers/gpu/drm/Kconfig.gpu-drm-mach64.orig 2014-03-08 18:52:34.979768492 +0200
|
||||
+++ linux/drivers/gpu/drm/Kconfig 2014-03-08 18:55:18.769681473 +0200
|
||||
@@ -130,6 +130,17 @@ config DRM_I810
|
||||
|
||||
source "drivers/gpu/drm/i915/Kconfig"
|
||||
--- linux/drivers/gpu/drm/Kconfig.gpu-drm-mach64.orig
|
||||
+++ linux/drivers/gpu/drm/Kconfig
|
||||
@@ -267,6 +267,17 @@ config DRM_I810
|
||||
selected, the module will be called i810. AGP support is required
|
||||
for this driver to work.
|
||||
|
||||
+config DRM_MACH64
|
||||
+ tristate "ATI Rage Pro (Mach64)"
|
||||
@@ -4134,11 +4134,11 @@ head: c99566fb810c9d8cae5e9cd39d1772b55e2f514c
|
||||
depends on DRM && PCI
|
||||
--- linux/drivers/gpu/drm/Makefile.gpu-drm-mach64.orig
|
||||
+++ linux/drivers/gpu/drm/Makefile
|
||||
@@ -38,6 +38,7 @@ obj-$(CONFIG_DRM_R128) += r128/
|
||||
@@ -47,6 +47,7 @@ obj-$(CONFIG_DRM_R128) += r128/
|
||||
obj-$(CONFIG_HSA_AMD) += amd/amdkfd/
|
||||
obj-$(CONFIG_DRM_RADEON)+= radeon/
|
||||
obj-$(CONFIG_DRM_AMDGPU)+= amd/amdgpu/
|
||||
+obj-$(CONFIG_DRM_MACH64)+= mach64/
|
||||
obj-$(CONFIG_DRM_MGA) += mga/
|
||||
obj-$(CONFIG_DRM_I810) += i810/
|
||||
obj-$(CONFIG_DRM_I915) += i915/
|
||||
obj-$(CONFIG_DRM_I915) += i915/
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
|
||||
Make defines psd specific so they dont redefine in-kernel defines like
|
||||
HASH_SIZE.
|
||||
|
||||
Signed-off-by: Thomas Backlund <tmb@mageia.org>
|
||||
|
||||
|
||||
include/linux/netfilter_ipv4/ipt_psd.h | 14 +++++++-------
|
||||
net/ipv4/netfilter/ipt_psd.c | 14 +++++++-------
|
||||
2 files changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff -Nurp linux-4.9.5-psd/include/linux/netfilter_ipv4/ipt_psd.h linux-4.9.5-psd-fix/include/linux/netfilter_ipv4/ipt_psd.h
|
||||
--- linux-4.9.5-psd/include/linux/netfilter_ipv4/ipt_psd.h 2017-01-20 21:47:19.788931403 +0200
|
||||
+++ linux-4.9.5-psd-fix/include/linux/netfilter_ipv4/ipt_psd.h 2017-01-20 21:58:09.995871253 +0200
|
||||
@@ -21,14 +21,14 @@
|
||||
#define SCAN_DELAY_THRESHOLD (300) /* old usage of HZ here was erroneously and broke under uml */
|
||||
|
||||
/*
|
||||
- * Keep track of up to LIST_SIZE source addresses, using a hash table of
|
||||
- * HASH_SIZE entries for faster lookups, but limiting hash collisions to
|
||||
- * HASH_MAX source addresses per the same hash value.
|
||||
+ * Keep track of up to PSD_LIST_SIZE source addresses, using a hash table of
|
||||
+ * PSD_HASH_SIZE entries for faster lookups, but limiting hash collisions to
|
||||
+ * PSD_HASH_MAX source addresses per the same hash value.
|
||||
*/
|
||||
-#define LIST_SIZE 0x100
|
||||
-#define HASH_LOG 9
|
||||
-#define HASH_SIZE (1 << HASH_LOG)
|
||||
-#define HASH_MAX 0x10
|
||||
+#define PSD_LIST_SIZE 0x100
|
||||
+#define PSD_HASH_LOG 9
|
||||
+#define PSD_HASH_SIZE (1 << PSD_HASH_LOG)
|
||||
+#define PSD_HASH_MAX 0x10
|
||||
|
||||
struct ipt_psd_info {
|
||||
unsigned int weight_threshold;
|
||||
diff -Nurp linux-4.9.5-psd/net/ipv4/netfilter/ipt_psd.c linux-4.9.5-psd-fix/net/ipv4/netfilter/ipt_psd.c
|
||||
--- linux-4.9.5-psd/net/ipv4/netfilter/ipt_psd.c 2017-01-20 21:47:19.792931402 +0200
|
||||
+++ linux-4.9.5-psd-fix/net/ipv4/netfilter/ipt_psd.c 2017-01-20 21:58:09.998871253 +0200
|
||||
@@ -74,8 +74,8 @@ struct host {
|
||||
*/
|
||||
static struct {
|
||||
spinlock_t lock;
|
||||
- struct host list[LIST_SIZE]; /* List of source addresses */
|
||||
- struct host *hash[HASH_SIZE]; /* Hash: pointers into the list */
|
||||
+ struct host list[PSD_LIST_SIZE]; /* List of source addresses */
|
||||
+ struct host *hash[PSD_HASH_SIZE]; /* Hash: pointers into the list */
|
||||
int index; /* Oldest entry to be replaced */
|
||||
} state;
|
||||
|
||||
@@ -91,9 +91,9 @@ static inline int hashfunc(struct in_add
|
||||
hash = 0;
|
||||
do {
|
||||
hash ^= value;
|
||||
- } while ((value >>= HASH_LOG));
|
||||
+ } while ((value >>= PSD_HASH_LOG));
|
||||
|
||||
- return hash & (HASH_SIZE - 1);
|
||||
+ return hash & (PSD_HASH_SIZE - 1);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -245,11 +245,11 @@ ipt_psd_match(const struct sk_buff *pskb
|
||||
/* Got too many source addresses with the same hash value? Then remove the
|
||||
* oldest one from the hash table, so that they can't take too much of our
|
||||
* CPU time even with carefully chosen spoofed IP addresses. */
|
||||
- if (count >= HASH_MAX && last) last->next = NULL;
|
||||
+ if (count >= PSD_HASH_MAX && last) last->next = NULL;
|
||||
|
||||
/* We're going to re-use the oldest list entry, so remove it from the hash
|
||||
* table first (if it is really already in use, and isn't removed from the
|
||||
- * hash table already because of the HASH_MAX check above). */
|
||||
+ * hash table already because of the PSD_HASH_MAX check above). */
|
||||
|
||||
/* First, find it */
|
||||
if (state.list[state.index].src_addr.s_addr)
|
||||
@@ -273,7 +273,7 @@ ipt_psd_match(const struct sk_buff *pskb
|
||||
|
||||
/* Get our list entry */
|
||||
curr = &state.list[state.index++];
|
||||
- if (state.index >= LIST_SIZE) state.index = 0;
|
||||
+ if (state.index >= PSD_LIST_SIZE) state.index = 0;
|
||||
|
||||
/* Link it into the hash table */
|
||||
head = &state.hash[hash];
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
|
||||
From: Gavin Li <git@thegavinli.com>
|
||||
|
||||
brcmf_sdio_fromevntchan() was being called on the the data frame
|
||||
rather than the software header, causing some frames to be
|
||||
mischaracterized as on the event channel rather than the data channel.
|
||||
|
||||
This fixes a major performance regression (due to dropped packets).
|
||||
|
||||
Fixes: c56caa9db8ab ("brcmfmac: screening firmware event packet")
|
||||
Signed-off-by: Gavin Li <git@thegavinli.com>
|
||||
Cc: <stable@vger.kernel.org> [4.7+]
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index dfb0658713d9..d2219885071f 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -1661,7 +1661,7 @@ static u8 brcmf_sdio_rxglom(struct brcmf_sdio *bus, u8 rxseq)
|
||||
pfirst->len, pfirst->next,
|
||||
pfirst->prev);
|
||||
skb_unlink(pfirst, &bus->glom);
|
||||
- if (brcmf_sdio_fromevntchan(pfirst->data))
|
||||
+ if (brcmf_sdio_fromevntchan(&dptr[SDPCM_HWHDR_LEN]))
|
||||
brcmf_rx_event(bus->sdiodev->dev, pfirst);
|
||||
else
|
||||
brcmf_rx_frame(bus->sdiodev->dev, pfirst,
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 22b68b93ae2506bd56ee3bf232a51bc8ab955b56 Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Date: Mon, 19 Dec 2016 20:38:12 -0600
|
||||
Subject: [PATCH] rtlwifi: Fix kernel oops introduced with commit e49656147359
|
||||
|
||||
With commit e49656147359 {"rtlwifi: Use dev_kfree_skb_irq instead of
|
||||
kfree_skb"), the method used to free an skb was changed because the
|
||||
kfree_skb() was inside a spinlock. What was forgotten is that kfree_skb()
|
||||
guards against a NULL value for the argument. Routine dev_kfree_skb_irq()
|
||||
does not, and a test is needed to prevent kernel panics.
|
||||
|
||||
Fixes: e49656147359 ("rtlwifi: Use dev_kfree_skb_irq instead of kfree_skb")
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Cc: Stable <stable@vger.kernel.org> # 4.9+
|
||||
Cc: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index 2caa4ad..ded1493 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1829,7 +1829,8 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
|
||||
spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
|
||||
pskb = __skb_dequeue(&ring->queue);
|
||||
- dev_kfree_skb_irq(pskb);
|
||||
+ if (pskb)
|
||||
+ dev_kfree_skb_irq(pskb);
|
||||
|
||||
/*this is wrong, fill_tx_cmddesc needs update*/
|
||||
pdesc = &ring->desc[0];
|
||||
--
|
||||
2.10.2
|
||||
|
||||
-429
@@ -1,429 +0,0 @@
|
||||
From cf4747d7535a936105f0abe8d8109d3fe339162b Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Date: Wed, 12 Oct 2016 13:54:04 -0500
|
||||
Subject: [PATCH] rtlwifi: Fix regression caused by commit d86e64768859
|
||||
|
||||
In commit d86e64768859 ("rtlwifi: rtl818x: constify local structures"),
|
||||
the configuration struct for most of the drivers was changed to be
|
||||
constant. The problem is that five of the modified drivers need to be
|
||||
able to update the firmware name based on the exact model of the card.
|
||||
As the file names were stored in one of the members of that struct,
|
||||
these drivers would fail with a kernel BUG splat when they tried to
|
||||
update the firmware name.
|
||||
|
||||
Rather than reverting the previous commit, I used a suggestion by
|
||||
Johannes Berg and made the firmware file name pointers be local to
|
||||
the routines that update the software variables.
|
||||
|
||||
The configuration struct of rtl8192cu, which was not touched in the
|
||||
previous patch, is now constantfied.
|
||||
|
||||
Fixes: d86e64768859 ("rtlwifi: rtl818x: constify local structures")
|
||||
Suggested-by: Johannes Berg <johannes@sipsolutions.net>
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Cc: Stable <stable@vger.kernel.org> # 4.8
|
||||
Cc: Julia Lawall <Julia.Lawall@lip6.fr>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 8 ++++----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 13 +++++--------
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 12 ++++++------
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 6 +++---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 8 ++++----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 9 +++++----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 12 +++++-------
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 6 +++---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 18 +++++++++---------
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 2 --
|
||||
11 files changed, 45 insertions(+), 51 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index f95760c..8e7f23c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -111,7 +111,7 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context,
|
||||
if (!err)
|
||||
goto found_alt;
|
||||
}
|
||||
- pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name);
|
||||
+ pr_err("Selected firmware is not available\n");
|
||||
rtlpriv->max_fw_size = 0;
|
||||
return;
|
||||
}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
index e7b11b4..f361808 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
@@ -86,6 +86,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
u8 tid;
|
||||
+ char *fw_name;
|
||||
|
||||
rtl8188ee_bt_reg_init(hw);
|
||||
rtlpriv->dm.dm_initialgain_enable = 1;
|
||||
@@ -169,10 +170,10 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
|
||||
return 1;
|
||||
}
|
||||
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8188efw.bin";
|
||||
+ fw_name = "rtlwifi/rtl8188efw.bin";
|
||||
rtlpriv->max_fw_size = 0x8000;
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -284,7 +285,6 @@ static const struct rtl_hal_cfg rtl88ee_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl88e_pci",
|
||||
- .fw_name = "rtlwifi/rtl8188efw.bin",
|
||||
.ops = &rtl8188ee_hal_ops,
|
||||
.mod_params = &rtl88ee_mod_params,
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
index 87aa209..8b6e37c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
@@ -96,6 +96,7 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
+ char *fw_name = "rtlwifi/rtl8192cfwU.bin";
|
||||
|
||||
rtl8192ce_bt_reg_init(hw);
|
||||
|
||||
@@ -167,15 +168,12 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
|
||||
}
|
||||
|
||||
/* request fw */
|
||||
- if (IS_VENDOR_UMC_A_CUT(rtlhal->version) &&
|
||||
- !IS_92C_SERIAL(rtlhal->version))
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU.bin";
|
||||
- else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU_B.bin";
|
||||
+ if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
|
||||
+ fw_name = "rtlwifi/rtl8192cfwU_B.bin";
|
||||
|
||||
rtlpriv->max_fw_size = 0x4000;
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -262,7 +260,6 @@ static const struct rtl_hal_cfg rtl92ce_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl92c_pci",
|
||||
- .fw_name = "rtlwifi/rtl8192cfw.bin",
|
||||
.ops = &rtl8192ce_hal_ops,
|
||||
.mod_params = &rtl92ce_mod_params,
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
index 7c6f7f0..f953320 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
@@ -59,6 +59,7 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
int err;
|
||||
+ char *fw_name;
|
||||
|
||||
rtlpriv->dm.dm_initialgain_enable = true;
|
||||
rtlpriv->dm.dm_flag = 0;
|
||||
@@ -77,18 +78,18 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
||||
}
|
||||
if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) &&
|
||||
!IS_92C_SERIAL(rtlpriv->rtlhal.version)) {
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_A.bin";
|
||||
+ fw_name = "rtlwifi/rtl8192cufw_A.bin";
|
||||
} else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) {
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_B.bin";
|
||||
+ fw_name = "rtlwifi/rtl8192cufw_B.bin";
|
||||
} else {
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
|
||||
+ fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
|
||||
}
|
||||
/* provide name of alternative file */
|
||||
rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin";
|
||||
- pr_info("Loading firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
+ pr_info("Loading firmware %s\n", fw_name);
|
||||
rtlpriv->max_fw_size = 0x4000;
|
||||
err = request_firmware_nowait(THIS_MODULE, 1,
|
||||
- rtlpriv->cfg->fw_name, rtlpriv->io.dev,
|
||||
+ fw_name, rtlpriv->io.dev,
|
||||
GFP_KERNEL, hw, rtl_fw_cb);
|
||||
return err;
|
||||
}
|
||||
@@ -187,7 +188,6 @@ static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
|
||||
|
||||
static struct rtl_hal_cfg rtl92cu_hal_cfg = {
|
||||
.name = "rtl92c_usb",
|
||||
- .fw_name = "rtlwifi/rtl8192cufw.bin",
|
||||
.ops = &rtl8192cu_hal_ops,
|
||||
.mod_params = &rtl92cu_mod_params,
|
||||
.usb_interface_cfg = &rtl92cu_interface_cfg,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
index 0538a4d..1ebfee1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
@@ -92,6 +92,7 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
|
||||
u8 tid;
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
+ char *fw_name = "rtlwifi/rtl8192defw.bin";
|
||||
|
||||
rtlpriv->dm.dm_initialgain_enable = true;
|
||||
rtlpriv->dm.dm_flag = 0;
|
||||
@@ -181,10 +182,10 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
|
||||
|
||||
rtlpriv->max_fw_size = 0x8000;
|
||||
pr_info("Driver for Realtek RTL8192DE WLAN interface\n");
|
||||
- pr_info("Loading firmware file %s\n", rtlpriv->cfg->fw_name);
|
||||
+ pr_info("Loading firmware file %s\n", fw_name);
|
||||
|
||||
/* request fw */
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92de_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl8192de",
|
||||
- .fw_name = "rtlwifi/rtl8192defw.bin",
|
||||
.ops = &rtl8192de_hal_ops,
|
||||
.mod_params = &rtl92de_mod_params,
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
index ac299cb..46b605de3 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
@@ -91,6 +91,7 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
int err = 0;
|
||||
+ char *fw_name;
|
||||
|
||||
rtl92ee_bt_reg_init(hw);
|
||||
rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
|
||||
@@ -170,11 +171,11 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
|
||||
}
|
||||
|
||||
/* request fw */
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8192eefw.bin";
|
||||
+ fw_name = "rtlwifi/rtl8192eefw.bin";
|
||||
|
||||
rtlpriv->max_fw_size = 0x8000;
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92ee_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl92ee_pci",
|
||||
- .fw_name = "rtlwifi/rtl8192eefw.bin",
|
||||
.ops = &rtl8192ee_hal_ops,
|
||||
.mod_params = &rtl92ee_mod_params,
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
index 5e8e02d..3e1eaea 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
@@ -89,12 +89,13 @@ static void rtl92se_fw_cb(const struct firmware *firmware, void *context)
|
||||
struct ieee80211_hw *hw = context;
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rt_firmware *pfirmware = NULL;
|
||||
+ char *fw_name = "rtlwifi/rtl8192sefw.bin";
|
||||
|
||||
RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
|
||||
"Firmware callback routine entered!\n");
|
||||
complete(&rtlpriv->firmware_loading_complete);
|
||||
if (!firmware) {
|
||||
- pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name);
|
||||
+ pr_err("Firmware %s not available\n", fw_name);
|
||||
rtlpriv->max_fw_size = 0;
|
||||
return;
|
||||
}
|
||||
@@ -117,6 +118,7 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
int err = 0;
|
||||
u16 earlyrxthreshold = 7;
|
||||
+ char *fw_name = "rtlwifi/rtl8192sefw.bin";
|
||||
|
||||
rtlpriv->dm.dm_initialgain_enable = true;
|
||||
rtlpriv->dm.dm_flag = 0;
|
||||
@@ -214,9 +216,9 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
|
||||
rtlpriv->max_fw_size = RTL8190_MAX_FIRMWARE_CODE_SIZE*2 +
|
||||
sizeof(struct fw_hdr);
|
||||
pr_info("Driver for Realtek RTL8192SE/RTL8191SE\n"
|
||||
- "Loading firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
+ "Loading firmware %s\n", fw_name);
|
||||
/* request fw */
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl92se_fw_cb);
|
||||
if (err) {
|
||||
@@ -310,7 +312,6 @@ static const struct rtl_hal_cfg rtl92se_hal_cfg = {
|
||||
.bar_id = 1,
|
||||
.write_readback = false,
|
||||
.name = "rtl92s_pci",
|
||||
- .fw_name = "rtlwifi/rtl8192sefw.bin",
|
||||
.ops = &rtl8192se_hal_ops,
|
||||
.mod_params = &rtl92se_mod_params,
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
index 89c828a..c51a9e8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
@@ -94,6 +94,7 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
int err = 0;
|
||||
+ char *fw_name = "rtlwifi/rtl8723fw.bin";
|
||||
|
||||
rtl8723e_bt_reg_init(hw);
|
||||
|
||||
@@ -176,14 +177,12 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
|
||||
return 1;
|
||||
}
|
||||
|
||||
- if (IS_VENDOR_8723_A_CUT(rtlhal->version))
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw.bin";
|
||||
- else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw_B.bin";
|
||||
+ if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
|
||||
+ fw_name = "rtlwifi/rtl8723fw_B.bin";
|
||||
|
||||
rtlpriv->max_fw_size = 0x6000;
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -280,7 +279,6 @@ static const struct rtl_hal_cfg rtl8723e_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl8723e_pci",
|
||||
- .fw_name = "rtlwifi/rtl8723efw.bin",
|
||||
.ops = &rtl8723e_hal_ops,
|
||||
.mod_params = &rtl8723e_mod_params,
|
||||
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
index 20b53f0..847644d 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
@@ -91,6 +91,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
+ char *fw_name = "rtlwifi/rtl8723befw.bin";
|
||||
|
||||
rtl8723be_bt_reg_init(hw);
|
||||
rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
|
||||
@@ -184,8 +185,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
|
||||
}
|
||||
|
||||
rtlpriv->max_fw_size = 0x8000;
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -280,7 +281,6 @@ static const struct rtl_hal_cfg rtl8723be_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl8723be_pci",
|
||||
- .fw_name = "rtlwifi/rtl8723befw.bin",
|
||||
.ops = &rtl8723be_hal_ops,
|
||||
.mod_params = &rtl8723be_mod_params,
|
||||
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
index 22f687b1..297938e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
@@ -93,6 +93,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
+ char *fw_name, *wowlan_fw_name;
|
||||
|
||||
rtl8821ae_bt_reg_init(hw);
|
||||
rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
|
||||
@@ -203,17 +204,17 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
|
||||
}
|
||||
|
||||
if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8812aefw.bin";
|
||||
- rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin";
|
||||
+ fw_name = "rtlwifi/rtl8812aefw.bin";
|
||||
+ wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin";
|
||||
} else {
|
||||
- rtlpriv->cfg->fw_name = "rtlwifi/rtl8821aefw.bin";
|
||||
- rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin";
|
||||
+ fw_name = "rtlwifi/rtl8821aefw.bin";
|
||||
+ wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin";
|
||||
}
|
||||
|
||||
rtlpriv->max_fw_size = 0x8000;
|
||||
/*load normal firmware*/
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name);
|
||||
- err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name,
|
||||
+ pr_info("Using firmware %s\n", fw_name);
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_fw_cb);
|
||||
if (err) {
|
||||
@@ -222,9 +223,9 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
|
||||
return 1;
|
||||
}
|
||||
/*load wowlan firmware*/
|
||||
- pr_info("Using firmware %s\n", rtlpriv->cfg->wowlan_fw_name);
|
||||
+ pr_info("Using firmware %s\n", wowlan_fw_name);
|
||||
err = request_firmware_nowait(THIS_MODULE, 1,
|
||||
- rtlpriv->cfg->wowlan_fw_name,
|
||||
+ wowlan_fw_name,
|
||||
rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
rtl_wowlan_fw_cb);
|
||||
if (err) {
|
||||
@@ -320,7 +321,6 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = {
|
||||
.bar_id = 2,
|
||||
.write_readback = true,
|
||||
.name = "rtl8821ae_pci",
|
||||
- .fw_name = "rtlwifi/rtl8821aefw.bin",
|
||||
.ops = &rtl8821ae_hal_ops,
|
||||
.mod_params = &rtl8821ae_mod_params,
|
||||
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 595f7d5..dafe486 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2278,9 +2278,7 @@ struct rtl_hal_cfg {
|
||||
u8 bar_id;
|
||||
bool write_readback;
|
||||
char *name;
|
||||
- char *fw_name;
|
||||
char *alt_fw_name;
|
||||
- char *wowlan_fw_name;
|
||||
struct rtl_hal_ops *ops;
|
||||
struct rtl_mod_params *mod_params;
|
||||
struct rtl_hal_usbint_cfg *usb_interface_cfg;
|
||||
--
|
||||
2.10.1
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From e49656147359411fb7529a211e852e587e5970dd Mon Sep 17 00:00:00 2001
|
||||
From: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Date: Tue, 1 Nov 2016 14:48:40 +0000
|
||||
Subject: [PATCH] rtlwifi: Use dev_kfree_skb_irq instead of kfree_skb
|
||||
|
||||
It is not allowed to call kfree_skb() from hardware interrupt
|
||||
context or with interrupts being disabled, spin_lock_irqsave()
|
||||
make sure always in irq disable context. So the kfree_skb()
|
||||
should be replaced with dev_kfree_skb_irq().
|
||||
|
||||
This is detected by Coccinelle semantic patch.
|
||||
|
||||
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index f95760c..a11e8f5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1832,7 +1832,7 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
|
||||
spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
|
||||
pskb = __skb_dequeue(&ring->queue);
|
||||
- kfree_skb(pskb);
|
||||
+ dev_kfree_skb_irq(pskb);
|
||||
|
||||
/*this is wrong, fill_tx_cmddesc needs update*/
|
||||
pdesc = &ring->desc[0];
|
||||
--
|
||||
2.10.2
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
diff --git a/drivers/nvme/host/scsi.c b/drivers/nvme/host/scsi.c
|
||||
index e947e298a737..44009105f8c8 100644
|
||||
--- a/drivers/nvme/host/scsi.c
|
||||
+++ b/drivers/nvme/host/scsi.c
|
||||
@@ -72,15 +72,6 @@ static int sg_version_num = 30534; /* 2 digits for each component */
|
||||
#define ALL_LUNS_RETURNED 0x02
|
||||
#define ALL_WELL_KNOWN_LUNS_RETURNED 0x01
|
||||
#define RESTRICTED_LUNS_RETURNED 0x00
|
||||
-#define NVME_POWER_STATE_START_VALID 0x00
|
||||
-#define NVME_POWER_STATE_ACTIVE 0x01
|
||||
-#define NVME_POWER_STATE_IDLE 0x02
|
||||
-#define NVME_POWER_STATE_STANDBY 0x03
|
||||
-#define NVME_POWER_STATE_LU_CONTROL 0x07
|
||||
-#define POWER_STATE_0 0
|
||||
-#define POWER_STATE_1 1
|
||||
-#define POWER_STATE_2 2
|
||||
-#define POWER_STATE_3 3
|
||||
#define DOWNLOAD_SAVE_ACTIVATE 0x05
|
||||
#define DOWNLOAD_SAVE_DEFER_ACTIVATE 0x0E
|
||||
#define ACTIVATE_DEFERRED_MICROCODE 0x0F
|
||||
@@ -1229,64 +1220,6 @@ static void nvme_trans_fill_read_cap(u8 *response, struct nvme_id_ns *id_ns,
|
||||
|
||||
/* Start Stop Unit Helper Functions */
|
||||
|
||||
-static int nvme_trans_power_state(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
- u8 pc, u8 pcmod, u8 start)
|
||||
-{
|
||||
- int res;
|
||||
- int nvme_sc;
|
||||
- struct nvme_id_ctrl *id_ctrl;
|
||||
- int lowest_pow_st; /* max npss = lowest power consumption */
|
||||
- unsigned ps_desired = 0;
|
||||
-
|
||||
- nvme_sc = nvme_identify_ctrl(ns->ctrl, &id_ctrl);
|
||||
- res = nvme_trans_status_code(hdr, nvme_sc);
|
||||
- if (res)
|
||||
- return res;
|
||||
-
|
||||
- lowest_pow_st = max(POWER_STATE_0, (int)(id_ctrl->npss - 1));
|
||||
- kfree(id_ctrl);
|
||||
-
|
||||
- switch (pc) {
|
||||
- case NVME_POWER_STATE_START_VALID:
|
||||
- /* Action unspecified if POWER CONDITION MODIFIER != 0 */
|
||||
- if (pcmod == 0 && start == 0x1)
|
||||
- ps_desired = POWER_STATE_0;
|
||||
- if (pcmod == 0 && start == 0x0)
|
||||
- ps_desired = lowest_pow_st;
|
||||
- break;
|
||||
- case NVME_POWER_STATE_ACTIVE:
|
||||
- /* Action unspecified if POWER CONDITION MODIFIER != 0 */
|
||||
- if (pcmod == 0)
|
||||
- ps_desired = POWER_STATE_0;
|
||||
- break;
|
||||
- case NVME_POWER_STATE_IDLE:
|
||||
- /* Action unspecified if POWER CONDITION MODIFIER != [0,1,2] */
|
||||
- if (pcmod == 0x0)
|
||||
- ps_desired = POWER_STATE_1;
|
||||
- else if (pcmod == 0x1)
|
||||
- ps_desired = POWER_STATE_2;
|
||||
- else if (pcmod == 0x2)
|
||||
- ps_desired = POWER_STATE_3;
|
||||
- break;
|
||||
- case NVME_POWER_STATE_STANDBY:
|
||||
- /* Action unspecified if POWER CONDITION MODIFIER != [0,1] */
|
||||
- if (pcmod == 0x0)
|
||||
- ps_desired = max(POWER_STATE_0, (lowest_pow_st - 2));
|
||||
- else if (pcmod == 0x1)
|
||||
- ps_desired = max(POWER_STATE_0, (lowest_pow_st - 1));
|
||||
- break;
|
||||
- case NVME_POWER_STATE_LU_CONTROL:
|
||||
- default:
|
||||
- res = nvme_trans_completion(hdr, SAM_STAT_CHECK_CONDITION,
|
||||
- ILLEGAL_REQUEST, SCSI_ASC_INVALID_CDB,
|
||||
- SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
|
||||
- break;
|
||||
- }
|
||||
- nvme_sc = nvme_set_features(ns->ctrl, NVME_FEAT_POWER_MGMT, ps_desired, 0,
|
||||
- NULL);
|
||||
- return nvme_trans_status_code(hdr, nvme_sc);
|
||||
-}
|
||||
-
|
||||
static int nvme_trans_send_activate_fw_cmd(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
u8 buffer_id)
|
||||
{
|
||||
@@ -2235,11 +2168,10 @@ static int nvme_trans_synchronize_cache(struct nvme_ns *ns,
|
||||
static int nvme_trans_start_stop(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
u8 *cmd)
|
||||
{
|
||||
- u8 immed, pcmod, pc, no_flush, start;
|
||||
+ u8 immed, pcmod, no_flush, start;
|
||||
|
||||
immed = cmd[1] & 0x01;
|
||||
pcmod = cmd[3] & 0x0f;
|
||||
- pc = (cmd[4] & 0xf0) >> 4;
|
||||
no_flush = cmd[4] & 0x04;
|
||||
start = cmd[4] & 0x01;
|
||||
|
||||
@@ -2254,8 +2186,8 @@ static int nvme_trans_start_stop(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
if (res)
|
||||
return res;
|
||||
}
|
||||
- /* Setup the expected power state transition */
|
||||
- return nvme_trans_power_state(ns, hdr, pc, pcmod, start);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.7.4
|
||||
@@ -1,107 +0,0 @@
|
||||
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
|
||||
index 2feacc70bf61..b92a7f767bfc 100644
|
||||
--- a/drivers/nvme/host/core.c
|
||||
+++ b/drivers/nvme/host/core.c
|
||||
@@ -597,7 +597,7 @@ int nvme_identify_ns(struct nvme_ctrl *dev, unsigned nsid,
|
||||
}
|
||||
|
||||
int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
|
||||
- dma_addr_t dma_addr, u32 *result)
|
||||
+ void *buffer, size_t buflen, u32 *result)
|
||||
{
|
||||
struct nvme_command c;
|
||||
struct nvme_completion cqe;
|
||||
@@ -606,10 +606,9 @@ int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
|
||||
memset(&c, 0, sizeof(c));
|
||||
c.features.opcode = nvme_admin_get_features;
|
||||
c.features.nsid = cpu_to_le32(nsid);
|
||||
- c.features.dptr.prp1 = cpu_to_le64(dma_addr);
|
||||
c.features.fid = cpu_to_le32(fid);
|
||||
|
||||
- ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0,
|
||||
+ ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, buffer, buflen, 0,
|
||||
NVME_QID_ANY, 0, 0);
|
||||
if (ret >= 0 && result)
|
||||
*result = le32_to_cpu(cqe.result);
|
||||
@@ -617,7 +616,7 @@ int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
|
||||
}
|
||||
|
||||
int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11,
|
||||
- dma_addr_t dma_addr, u32 *result)
|
||||
+ void *buffer, size_t buflen, u32 *result)
|
||||
{
|
||||
struct nvme_command c;
|
||||
struct nvme_completion cqe;
|
||||
@@ -625,12 +624,11 @@ int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11,
|
||||
|
||||
memset(&c, 0, sizeof(c));
|
||||
c.features.opcode = nvme_admin_set_features;
|
||||
- c.features.dptr.prp1 = cpu_to_le64(dma_addr);
|
||||
c.features.fid = cpu_to_le32(fid);
|
||||
c.features.dword11 = cpu_to_le32(dword11);
|
||||
|
||||
- ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0,
|
||||
- NVME_QID_ANY, 0, 0);
|
||||
+ ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe,
|
||||
+ buffer, buflen, 0, NVME_QID_ANY, 0, 0);
|
||||
if (ret >= 0 && result)
|
||||
*result = le32_to_cpu(cqe.result);
|
||||
return ret;
|
||||
@@ -664,7 +662,7 @@ int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count)
|
||||
u32 result;
|
||||
int status, nr_io_queues;
|
||||
|
||||
- status = nvme_set_features(ctrl, NVME_FEAT_NUM_QUEUES, q_count, 0,
|
||||
+ status = nvme_set_features(ctrl, NVME_FEAT_NUM_QUEUES, q_count, NULL, 0,
|
||||
&result);
|
||||
if (status < 0)
|
||||
return status;
|
||||
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
|
||||
index ab18b78102bf..c2151761ec5f 100644
|
||||
--- a/drivers/nvme/host/nvme.h
|
||||
+++ b/drivers/nvme/host/nvme.h
|
||||
@@ -292,9 +292,9 @@ int nvme_identify_ns(struct nvme_ctrl *dev, unsigned nsid,
|
||||
struct nvme_id_ns **id);
|
||||
int nvme_get_log_page(struct nvme_ctrl *dev, struct nvme_smart_log **log);
|
||||
int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
|
||||
- dma_addr_t dma_addr, u32 *result);
|
||||
+ void *buffer, size_t buflen, u32 *result);
|
||||
int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11,
|
||||
- dma_addr_t dma_addr, u32 *result);
|
||||
+ void *buffer, size_t buflen, u32 *result);
|
||||
int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count);
|
||||
void nvme_start_keep_alive(struct nvme_ctrl *ctrl);
|
||||
void nvme_stop_keep_alive(struct nvme_ctrl *ctrl);
|
||||
diff --git a/drivers/nvme/host/scsi.c b/drivers/nvme/host/scsi.c
|
||||
index 44009105f8c8..c2a0a1c7d05d 100644
|
||||
--- a/drivers/nvme/host/scsi.c
|
||||
+++ b/drivers/nvme/host/scsi.c
|
||||
@@ -906,7 +906,7 @@ static int nvme_trans_log_temperature(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
kfree(smart_log);
|
||||
|
||||
/* Get Features for Temp Threshold */
|
||||
- res = nvme_get_features(ns->ctrl, NVME_FEAT_TEMP_THRESH, 0, 0,
|
||||
+ res = nvme_get_features(ns->ctrl, NVME_FEAT_TEMP_THRESH, 0, NULL, 0,
|
||||
&feature_resp);
|
||||
if (res != NVME_SC_SUCCESS)
|
||||
temp_c_thresh = LOG_TEMP_UNKNOWN;
|
||||
@@ -1039,7 +1039,7 @@ static int nvme_trans_fill_caching_page(struct nvme_ns *ns,
|
||||
if (len < MODE_PAGE_CACHING_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
- nvme_sc = nvme_get_features(ns->ctrl, NVME_FEAT_VOLATILE_WC, 0, 0,
|
||||
+ nvme_sc = nvme_get_features(ns->ctrl, NVME_FEAT_VOLATILE_WC, 0, NULL, 0,
|
||||
&feature_resp);
|
||||
res = nvme_trans_status_code(hdr, nvme_sc);
|
||||
if (res)
|
||||
@@ -1328,7 +1328,7 @@ static int nvme_trans_modesel_get_mp(struct nvme_ns *ns, struct sg_io_hdr *hdr,
|
||||
case MODE_PAGE_CACHING:
|
||||
dword11 = ((mode_page[2] & CACHING_MODE_PAGE_WCE_MASK) ? 1 : 0);
|
||||
nvme_sc = nvme_set_features(ns->ctrl, NVME_FEAT_VOLATILE_WC,
|
||||
- dword11, 0, NULL);
|
||||
+ dword11, NULL, 0, NULL);
|
||||
res = nvme_trans_status_code(hdr, nvme_sc);
|
||||
break;
|
||||
case MODE_PAGE_CONTROL:
|
||||
--
|
||||
2.7.4
|
||||
@@ -1,264 +0,0 @@
|
||||
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
|
||||
index b92a7f767bfc..a143c72c3d0d 100644
|
||||
--- a/drivers/nvme/host/core.c
|
||||
+++ b/drivers/nvme/host/core.c
|
||||
@@ -56,6 +56,11 @@ EXPORT_SYMBOL_GPL(nvme_max_retries);
|
||||
static int nvme_char_major;
|
||||
module_param(nvme_char_major, int, 0);
|
||||
|
||||
+static unsigned long default_ps_max_latency_us = 25000;
|
||||
+module_param(default_ps_max_latency_us, ulong, 0644);
|
||||
+MODULE_PARM_DESC(ps_max_latency_us,
|
||||
+ "default max power saving latency; overridden per device in sysfs");
|
||||
+
|
||||
static LIST_HEAD(nvme_ctrl_list);
|
||||
static DEFINE_SPINLOCK(dev_list_lock);
|
||||
|
||||
@@ -1205,6 +1210,98 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
|
||||
blk_queue_write_cache(q, vwc, vwc);
|
||||
}
|
||||
|
||||
+static void nvme_configure_apst(struct nvme_ctrl *ctrl)
|
||||
+{
|
||||
+ /*
|
||||
+ * APST (Autonomous Power State Transition) lets us program a
|
||||
+ * table of power state transitions that the controller will
|
||||
+ * perform automatically. We configure it with a simple
|
||||
+ * heuristic: we are willing to spend at most 2% of the time
|
||||
+ * transitioning between power states. Therefore, when running
|
||||
+ * in any given state, we will enter the next lower-power
|
||||
+ * non-operational state after waiting 100 * (enlat + exlat)
|
||||
+ * microseconds, as long as that state's total latency is under
|
||||
+ * the requested maximum latency.
|
||||
+ *
|
||||
+ * We will not autonomously enter any non-operational state for
|
||||
+ * which the total latency exceeds ps_max_latency_us. Users
|
||||
+ * can set ps_max_latency_us to zero to turn off APST.
|
||||
+ */
|
||||
+
|
||||
+ unsigned apste;
|
||||
+ struct nvme_feat_auto_pst *table;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!ctrl->apsta)
|
||||
+ return; /* APST isn't supported. */
|
||||
+
|
||||
+ if (ctrl->npss > 31) {
|
||||
+ dev_warn(ctrl->device, "NPSS is invalid; not using APST\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ table = kzalloc(sizeof(*table), GFP_KERNEL);
|
||||
+ if (!table)
|
||||
+ return;
|
||||
+
|
||||
+ if (ctrl->ps_max_latency_us == 0) {
|
||||
+ /* Turn off APST. */
|
||||
+ apste = 0;
|
||||
+ } else {
|
||||
+ __le64 target = cpu_to_le64(0);
|
||||
+ int state;
|
||||
+
|
||||
+ /*
|
||||
+ * Walk through all states from lowest- to highest-power.
|
||||
+ * According to the spec, lower-numbered states use more
|
||||
+ * power. NPSS, despite the name, is the index of the
|
||||
+ * lowest-power state, not the number of states.
|
||||
+ */
|
||||
+ for (state = (int)ctrl->npss; state >= 0; state--) {
|
||||
+ u64 total_latency_us, transition_ms;
|
||||
+
|
||||
+ if (target)
|
||||
+ table->entries[state] = target;
|
||||
+
|
||||
+ /*
|
||||
+ * Is this state a useful non-operational state for
|
||||
+ * higher-power states to autonomously transition to?
|
||||
+ */
|
||||
+ if (!(ctrl->psd[state].flags & 2))
|
||||
+ continue; /* It's an operational state. */
|
||||
+
|
||||
+ total_latency_us =
|
||||
+ (u64)cpu_to_le32(ctrl->psd[state].entry_lat) +
|
||||
+ + cpu_to_le32(ctrl->psd[state].exit_lat);
|
||||
+ if (total_latency_us > ctrl->ps_max_latency_us)
|
||||
+ continue;
|
||||
+
|
||||
+ /*
|
||||
+ * This state is good. Use it as the APST idle
|
||||
+ * target for higher power states.
|
||||
+ */
|
||||
+ transition_ms = total_latency_us + 19;
|
||||
+ do_div(transition_ms, 20);
|
||||
+ if (transition_ms >= (1 << 24))
|
||||
+ transition_ms = (1 << 24);
|
||||
+
|
||||
+ target = cpu_to_le64((state << 3) |
|
||||
+ (transition_ms << 8));
|
||||
+ }
|
||||
+
|
||||
+ apste = 1;
|
||||
+ }
|
||||
+
|
||||
+ ret = nvme_set_features(ctrl, NVME_FEAT_AUTO_PST, apste,
|
||||
+ table, sizeof(*table), NULL);
|
||||
+ if (ret)
|
||||
+ dev_err(ctrl->device, "failed to set APST feature (%d)\n", ret);
|
||||
+
|
||||
+ kfree(table);
|
||||
+}
|
||||
+
|
||||
+static struct attribute_group nvme_dev_dynamic_attrs_group;
|
||||
+
|
||||
/*
|
||||
* Initialize the cached copies of the Identify data and various controller
|
||||
* register in our nvme_ctrl structure. This should be called as soon as
|
||||
@@ -1271,6 +1368,10 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
|
||||
ctrl->sgls = le32_to_cpu(id->sgls);
|
||||
ctrl->kas = le16_to_cpu(id->kas);
|
||||
|
||||
+ ctrl->npss = id->npss;
|
||||
+ ctrl->apsta = id->apsta;
|
||||
+ memcpy(ctrl->psd, id->psd, sizeof(ctrl->psd));
|
||||
+
|
||||
if (ctrl->ops->is_fabrics) {
|
||||
ctrl->icdoff = le16_to_cpu(id->icdoff);
|
||||
ctrl->ioccsz = le32_to_cpu(id->ioccsz);
|
||||
@@ -1294,6 +1395,10 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
|
||||
}
|
||||
|
||||
kfree(id);
|
||||
+
|
||||
+ nvme_configure_apst(ctrl);
|
||||
+
|
||||
+ sysfs_update_group(&ctrl->device->kobj, &nvme_dev_dynamic_attrs_group);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvme_init_identify);
|
||||
@@ -1564,6 +1669,41 @@ static ssize_t nvme_sysfs_show_address(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR(address, S_IRUGO, nvme_sysfs_show_address, NULL);
|
||||
|
||||
+static ssize_t nvme_sysfs_show_ps_max_latency_us(
|
||||
+ struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
|
||||
+
|
||||
+ return snprintf(buf, PAGE_SIZE, "%llu\n", ctrl->ps_max_latency_us);
|
||||
+}
|
||||
+
|
||||
+static ssize_t nvme_sysfs_store_ps_max_latency_us(
|
||||
+ struct device *dev,
|
||||
+ struct device_attribute *attr,
|
||||
+ const char *buf, size_t size)
|
||||
+{
|
||||
+ struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
|
||||
+ int ret;
|
||||
+ u64 val;
|
||||
+
|
||||
+ ret = kstrtoull(buf, 10, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (ctrl->ps_max_latency_us != val) {
|
||||
+ ctrl->ps_max_latency_us = val;
|
||||
+ nvme_configure_apst(ctrl);
|
||||
+ }
|
||||
+
|
||||
+ return size;
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(ps_max_latency_us, 0644,
|
||||
+ nvme_sysfs_show_ps_max_latency_us,
|
||||
+ nvme_sysfs_store_ps_max_latency_us);
|
||||
+
|
||||
static struct attribute *nvme_dev_attrs[] = {
|
||||
&dev_attr_reset_controller.attr,
|
||||
&dev_attr_rescan_controller.attr,
|
||||
@@ -1605,8 +1745,33 @@ static struct attribute_group nvme_dev_attrs_group = {
|
||||
.is_visible = nvme_dev_attrs_are_visible,
|
||||
};
|
||||
|
||||
+static struct attribute *nvme_dev_dynamic_attrs[] = {
|
||||
+ &dev_attr_ps_max_latency_us.attr,
|
||||
+ NULL
|
||||
+};
|
||||
+
|
||||
+static umode_t nvme_dev_dynamic_attrs_are_visible(struct kobject *kobj,
|
||||
+ struct attribute *a, int n)
|
||||
+{
|
||||
+ struct device *dev = container_of(kobj, struct device, kobj);
|
||||
+ struct nvme_ctrl *ctrl = dev_get_drvdata(dev);
|
||||
+
|
||||
+ if (a == &dev_attr_ps_max_latency_us.attr) {
|
||||
+ if (!ctrl->apsta)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return a->mode;
|
||||
+}
|
||||
+
|
||||
+static struct attribute_group nvme_dev_dynamic_attrs_group = {
|
||||
+ .attrs = nvme_dev_dynamic_attrs,
|
||||
+ .is_visible = nvme_dev_dynamic_attrs_are_visible,
|
||||
+};
|
||||
+
|
||||
static const struct attribute_group *nvme_dev_attr_groups[] = {
|
||||
&nvme_dev_attrs_group,
|
||||
+ &nvme_dev_dynamic_attrs_group,
|
||||
NULL,
|
||||
};
|
||||
|
||||
@@ -1991,6 +2156,7 @@ int nvme_init_ctrl(struct nvme_ctrl *ctrl, struct device *dev,
|
||||
ctrl->quirks = quirks;
|
||||
INIT_WORK(&ctrl->scan_work, nvme_scan_work);
|
||||
INIT_WORK(&ctrl->async_event_work, nvme_async_event_work);
|
||||
+ ctrl->ps_max_latency_us = default_ps_max_latency_us;
|
||||
|
||||
ret = nvme_set_instance(ctrl);
|
||||
if (ret)
|
||||
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
|
||||
index c2151761ec5f..16d51006afc0 100644
|
||||
--- a/drivers/nvme/host/nvme.h
|
||||
+++ b/drivers/nvme/host/nvme.h
|
||||
@@ -129,13 +129,19 @@ struct nvme_ctrl {
|
||||
u32 vs;
|
||||
u32 sgls;
|
||||
u16 kas;
|
||||
+ u8 npss;
|
||||
+ u8 apsta;
|
||||
unsigned int kato;
|
||||
bool subsystem;
|
||||
unsigned long quirks;
|
||||
+ struct nvme_id_power_state psd[32];
|
||||
struct work_struct scan_work;
|
||||
struct work_struct async_event_work;
|
||||
struct delayed_work ka_work;
|
||||
|
||||
+ /* Power saving configuration */
|
||||
+ u64 ps_max_latency_us;
|
||||
+
|
||||
/* Fabrics only */
|
||||
u16 sqsize;
|
||||
u32 ioccsz;
|
||||
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
|
||||
index d8b37bab2887..a76237dac4b0 100644
|
||||
--- a/include/linux/nvme.h
|
||||
+++ b/include/linux/nvme.h
|
||||
@@ -543,6 +543,12 @@ struct nvme_dsm_range {
|
||||
__le64 slba;
|
||||
};
|
||||
|
||||
+/* Features */
|
||||
+
|
||||
+struct nvme_feat_auto_pst {
|
||||
+ __le64 entries[32];
|
||||
+};
|
||||
+
|
||||
/* Admin commands */
|
||||
|
||||
enum nvme_admin_opcode {
|
||||
--
|
||||
2.7.4
|
||||
@@ -14,7 +14,14 @@
|
||||
###
|
||||
### Stable Queue
|
||||
###
|
||||
patch-4.8.10-rc1.patch
|
||||
|
||||
# CVE-2016-8405
|
||||
stable-fbdev-color-map-copying-bounds-checking.patch
|
||||
|
||||
stable-tile-ptrace-preserve-previous-registers-for-short-regset-write.patch
|
||||
stable-drm-schedule-the-output_poll_work-with-1s-delay-if-we-have-delayed-event.patch
|
||||
stable-drm-fix-broken-vt-switch-with-video-1366x768-option.patch
|
||||
stable-drm-i915-ignore-bogus-plane-coordinates-on-skl-when-the-plane-is-not-visible.patch
|
||||
|
||||
###
|
||||
### Arch x86
|
||||
@@ -78,6 +85,9 @@ acpi-processor-M720SR-limit-to-C2.patch
|
||||
# backlight fixes
|
||||
ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch
|
||||
|
||||
# drop obsolete warn
|
||||
acpi-do-not-warn-if-_BQC-does-not-exist.patch
|
||||
|
||||
###
|
||||
### Block
|
||||
###
|
||||
@@ -122,15 +132,10 @@ block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch
|
||||
|
||||
# Include new BFQ I/O scheduler
|
||||
# (See http://algo.ing.unimo.it/people/paolo/disk_sched)
|
||||
#
|
||||
# Release of BFQ I/O scheduler v8r4 (rediffed from git https://github.com/linusw/linux-bfq)
|
||||
linux-BFQ-v8r4.patch
|
||||
|
||||
# Let NVME drives enter in power state
|
||||
# (see https://github.com/damige/linux-nvme/tree/master/src)
|
||||
nvmepatch1-V4.patch
|
||||
nvmepatch2-V4.patch
|
||||
nvmepatch3-V4.patch
|
||||
block-cgroups-kconfig-build-bits-for-BFQ-v7r11-4.5.0.patch
|
||||
block-introduce-the-BFQ-v7r11-I-O-sched-for-4.5.0.patch
|
||||
block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r11-for.patch
|
||||
block-Turn-into-BFQ-v8r6-for-4.9.0.patch
|
||||
|
||||
###
|
||||
### Char
|
||||
@@ -139,13 +144,22 @@ nvmepatch3-V4.patch
|
||||
# hard locks Dell R720xd
|
||||
Revert-ipmi-Start-the-timer-and-thread-on-internal-m.patch
|
||||
|
||||
# tpm_crb fixes for SkyLake
|
||||
char-tpm-tpm_crb-implement-tpm-crb-idle-state.patch
|
||||
char-tmp-tpm_crb-fix-Intel-PTT-hw-bug-during-idle-state.patch
|
||||
char-tpm-tpm_crb-open-code-the-crb_init-into-acpi_add.patch
|
||||
char-tmp-tpm_crb-implement-runtime-pm-for-tpm_crb.patch
|
||||
|
||||
###
|
||||
### File-system
|
||||
###
|
||||
|
||||
# aufs from: http://aufs.sourceforge.net/ (mga#8314)
|
||||
fs-aufs-4.8.patch
|
||||
fs-aufs-4.8-modular.patch
|
||||
fs-aufs-4.9.patch
|
||||
fs-aufs-4.9-modular.patch
|
||||
|
||||
# needed for mdadm: imsm: enable bad block support for imsm metadata
|
||||
fs-seq_file-reset-iterator-to-first-record-for-zero-off.patch
|
||||
|
||||
###
|
||||
### FireWire
|
||||
@@ -180,6 +194,12 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# i915 skl/kbl speedup
|
||||
gpu-drm-i915-skl-drop-workarounds-for-A0-and-B0-revisions.patch
|
||||
gpu-drm-i915-skl-drop-workarounds-for-D0-revision.patch
|
||||
gpu-drm-i915-skl-drop-workarounds-for-E0-revision.patch
|
||||
gpu-drm-i915-Remove-WaDisableLSQCROPERFforOCL-KBL-workaround.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
###
|
||||
@@ -230,9 +250,14 @@ net-netfilter-IFWLOG-remove-unused-label.patch
|
||||
net-netfilter-psd.patch
|
||||
net-netfilter-psd-mdv.patch
|
||||
net-netfilter-psd-2.6.35-buildfix.patch
|
||||
net-netfilter-psd-fix-redefines.patch
|
||||
|
||||
# rtlwifi regression
|
||||
net-wireless-rtlwifi-Fix-regression-caused-by-commit-d86e64768859.patch
|
||||
# rtlwifi fixes
|
||||
net-wireless-rtlwifi-Use-dev_kfree_skb_irq-instead-of-kfree_skb.patch
|
||||
net-wireless-rtlwifi-Fix-kernel-oops-introduced-with-commit-e4965.patch
|
||||
|
||||
# fix speed regression
|
||||
net-wireless-brcmfmac-fix-incorrect-event-channel-deduction.patch
|
||||
|
||||
###
|
||||
### Platform drivers
|
||||
@@ -338,8 +363,6 @@ video-mageia-logo.patch
|
||||
|
||||
# add rtl8723bs support (mga#15874)
|
||||
3rd-rtl8723bs.patch
|
||||
3rd-rtl8723bs-4.7-buildfix.patch
|
||||
3rd-rtl8723bs-4.8-buildfix.patch
|
||||
|
||||
###
|
||||
### Security
|
||||
@@ -368,6 +391,11 @@ video-mageia-logo.patch
|
||||
# wipe powerpc refrence so we can nuke dangling symlinks (mga#17676)
|
||||
tools-testing-selftest-Makefile-remove-powerpc-reference.patch
|
||||
|
||||
# perf build fixes
|
||||
tools-build-Make-fixdep-parsing-wait-for-last-target.patch
|
||||
tools-perf-tools-Force-fixdep-compilation-at-the-start-of-.patch
|
||||
tools-perf-tools-Move-perf-build-related-variables-under-n.patch
|
||||
|
||||
###
|
||||
### UAPI
|
||||
###
|
||||
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
From fdf35a6b22247746a7053fc764d04218a9306f82 Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Mon, 9 Jan 2017 15:56:14 +0100
|
||||
Subject: drm: Fix broken VT switch with video=1366x768 option
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
|
||||
commit fdf35a6b22247746a7053fc764d04218a9306f82 upstream.
|
||||
|
||||
I noticed that the VT switch doesn't work any longer with a Dell
|
||||
laptop with 1366x768 eDP when the machine is connected with a DP
|
||||
monitor. It behaves as if VT were switched, but the graphics remain
|
||||
frozen. Actually the keyboard works, so I could switch back to VT7
|
||||
again.
|
||||
|
||||
I tried to track down the problem, and encountered a long story until
|
||||
we reach to this error:
|
||||
|
||||
- The machine is booted with video=1366x768 option (the distro
|
||||
installer seems to add it as default).
|
||||
- Recently, drm_helper_probe_single_connector_modes() deals with
|
||||
cmdline modes, and it tries to create a new mode when no
|
||||
matching mode is found.
|
||||
- The drm_mode_create_from_cmdline_mode() creates a mode based on
|
||||
either CVT of GFT according to the given cmdline mode; in our case,
|
||||
it's 1366x768.
|
||||
- Since both CVT and GFT can't express the width 1366 due to
|
||||
alignment, the resultant mode becomes 1368x768, slightly larger than
|
||||
the given size.
|
||||
- Later on, the atomic commit is performed, and in
|
||||
drm_atomic_check_only(), the size of each plane is checked.
|
||||
- The size check of 1366x768 fails due to the above, and eventually
|
||||
the whole VT switch fails.
|
||||
|
||||
Back in the history, we've had a manual fix-up of 1368x768 in various
|
||||
places via c09dedb7a50e ("drm/edid: Add a workaround for 1366x768 HD
|
||||
panel"), but they have been all in drm_edid.c at probing the modes
|
||||
from EDID. For addressing the problem above, we need a similar hack
|
||||
to the mode newly created from cmdline, manually adjusting the width
|
||||
when the expected size is 1366 while we get 1368 instead.
|
||||
|
||||
Fixes: eaf99c749d43 ("drm: Perform cmdline mode parsing during...")
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/20170109145614.29454-1-tiwai@suse.de
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/drm_modes.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_modes.c
|
||||
+++ b/drivers/gpu/drm/drm_modes.c
|
||||
@@ -1462,6 +1462,13 @@ drm_mode_create_from_cmdline_mode(struct
|
||||
return NULL;
|
||||
|
||||
mode->type |= DRM_MODE_TYPE_USERDEF;
|
||||
+ /* fix up 1368x768: GFT/CVT can't express 1366 width due to alignment */
|
||||
+ if (cmd->xres == 1366 && mode->hdisplay == 1368) {
|
||||
+ mode->hdisplay = 1366;
|
||||
+ mode->hsync_start--;
|
||||
+ mode->hsync_end--;
|
||||
+ drm_mode_set_name(mode);
|
||||
+ }
|
||||
drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
|
||||
return mode;
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From 3bfdfdcbce2796ce75bf2d85fd8471858d702e5d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
|
||||
Date: Mon, 7 Nov 2016 22:20:54 +0200
|
||||
Subject: drm/i915: Ignore bogus plane coordinates on SKL when the plane is not visible
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
|
||||
commit 3bfdfdcbce2796ce75bf2d85fd8471858d702e5d upstream.
|
||||
|
||||
When the plane is invisible we may have all sorts of bogus stuff
|
||||
in the coordinates, which we must ignore or else we might fail the
|
||||
plane update. This started to happen on SKL when I moved the plane
|
||||
offset computation to happen in the check phase. Previously we
|
||||
happily ignored it all since we never called the update_plane hook
|
||||
with an invisible plane.
|
||||
|
||||
Cc: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com>
|
||||
Cc: drm-intel-fixes@lists.freedesktop.org
|
||||
Fixes: b63a16f6cd89 ("drm/i915: Compute display surface offset in the plane check hook for SKL+")
|
||||
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98258
|
||||
Testcase: igt/pm_rpm/legacy-planes
|
||||
Testcase: igt/pm_rpm/universal-planes
|
||||
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
|
||||
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1478550057-24864-3-git-send-email-ville.syrjala@linux.intel.com
|
||||
(cherry picked from commit a5e4c7d0aa6784d8abe95c3ceef0da9656d17468)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_display.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -2975,6 +2975,9 @@ int skl_check_plane_surface(struct intel
|
||||
unsigned int rotation = plane_state->base.rotation;
|
||||
int ret;
|
||||
|
||||
+ if (!plane_state->base.visible)
|
||||
+ return 0;
|
||||
+
|
||||
/* Rotate src coordinates to match rotated GTT view */
|
||||
if (intel_rotation_90_or_270(rotation))
|
||||
drm_rect_rotate(&plane_state->base.src,
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
From 68f458eec7069d618a6c884ca007426e0cea411b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
Date: Mon, 9 Jan 2017 16:31:58 +0200
|
||||
Subject: drm: Schedule the output_poll_work with 1s delay if we have delayed event
|
||||
|
||||
From: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
|
||||
commit 68f458eec7069d618a6c884ca007426e0cea411b upstream.
|
||||
|
||||
Instead of scheduling the work to handle the initial delayed event, use 1s
|
||||
delay.
|
||||
|
||||
This delay should not be needed, but Optimus/nouveau will fail in a
|
||||
mysterious way if the delayed event is handled as soon as possible like it
|
||||
is done in drm_helper_probe_single_connector_modes() in case the poll
|
||||
was enabled before.
|
||||
|
||||
Reverting 339fd36238dd would give back the 10 sec (!) delay to handle the
|
||||
delayed event. Adding 1sec delay to the poll_work is enough to work around
|
||||
the issue in Optimus setups and gives shorter response on handling the
|
||||
initial delayed event.
|
||||
|
||||
Fixes: 339fd36238dd ("drm: drm_probe_helper: Fix output_poll_work scheduling")
|
||||
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
|
||||
[danvet: Add FIXME to the comment to make it stick out more.]
|
||||
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/20170109143158.21917-1-peter.ujfalusi@ti.com
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/gpu/drm/drm_probe_helper.c | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/drm_probe_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_probe_helper.c
|
||||
@@ -143,8 +143,18 @@ void drm_kms_helper_poll_enable_locked(s
|
||||
}
|
||||
|
||||
if (dev->mode_config.delayed_event) {
|
||||
+ /*
|
||||
+ * FIXME:
|
||||
+ *
|
||||
+ * Use short (1s) delay to handle the initial delayed event.
|
||||
+ * This delay should not be needed, but Optimus/nouveau will
|
||||
+ * fail in a mysterious way if the delayed event is handled as
|
||||
+ * soon as possible like it is done in
|
||||
+ * drm_helper_probe_single_connector_modes() in case the poll
|
||||
+ * was enabled before.
|
||||
+ */
|
||||
poll = true;
|
||||
- delay = 0;
|
||||
+ delay = HZ;
|
||||
}
|
||||
|
||||
if (poll)
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
From 2dc705a9930b4806250fbf5a76e55266e59389f2 Mon Sep 17 00:00:00 2001
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
Date: Tue, 24 Jan 2017 15:18:24 -0800
|
||||
Subject: fbdev: color map copying bounds checking
|
||||
|
||||
From: Kees Cook <keescook@chromium.org>
|
||||
|
||||
commit 2dc705a9930b4806250fbf5a76e55266e59389f2 upstream.
|
||||
|
||||
Copying color maps to userspace doesn't check the value of to->start,
|
||||
which will cause kernel heap buffer OOB read due to signedness wraps.
|
||||
|
||||
CVE-2016-8405
|
||||
|
||||
Link: http://lkml.kernel.org/r/20170105224249.GA50925@beast
|
||||
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
|
||||
Signed-off-by: Kees Cook <keescook@chromium.org>
|
||||
Reported-by: Peter Pi (@heisecode) of Trend Micro
|
||||
Cc: Min Chong <mchong@google.com>
|
||||
Cc: Dan Carpenter <dan.carpenter@oracle.com>
|
||||
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
drivers/video/fbdev/core/fbcmap.c | 26 ++++++++++++++------------
|
||||
1 file changed, 14 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/video/fbdev/core/fbcmap.c
|
||||
+++ b/drivers/video/fbdev/core/fbcmap.c
|
||||
@@ -163,17 +163,18 @@ void fb_dealloc_cmap(struct fb_cmap *cma
|
||||
|
||||
int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to)
|
||||
{
|
||||
- int tooff = 0, fromoff = 0;
|
||||
- int size;
|
||||
+ unsigned int tooff = 0, fromoff = 0;
|
||||
+ size_t size;
|
||||
|
||||
if (to->start > from->start)
|
||||
fromoff = to->start - from->start;
|
||||
else
|
||||
tooff = from->start - to->start;
|
||||
- size = to->len - tooff;
|
||||
- if (size > (int) (from->len - fromoff))
|
||||
- size = from->len - fromoff;
|
||||
- if (size <= 0)
|
||||
+ if (fromoff >= from->len || tooff >= to->len)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ size = min_t(size_t, to->len - tooff, from->len - fromoff);
|
||||
+ if (size == 0)
|
||||
return -EINVAL;
|
||||
size *= sizeof(u16);
|
||||
|
||||
@@ -187,17 +188,18 @@ int fb_copy_cmap(const struct fb_cmap *f
|
||||
|
||||
int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to)
|
||||
{
|
||||
- int tooff = 0, fromoff = 0;
|
||||
- int size;
|
||||
+ unsigned int tooff = 0, fromoff = 0;
|
||||
+ size_t size;
|
||||
|
||||
if (to->start > from->start)
|
||||
fromoff = to->start - from->start;
|
||||
else
|
||||
tooff = from->start - to->start;
|
||||
- size = to->len - tooff;
|
||||
- if (size > (int) (from->len - fromoff))
|
||||
- size = from->len - fromoff;
|
||||
- if (size <= 0)
|
||||
+ if (fromoff >= from->len || tooff >= to->len)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ size = min_t(size_t, to->len - tooff, from->len - fromoff);
|
||||
+ if (size == 0)
|
||||
return -EINVAL;
|
||||
size *= sizeof(u16);
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From fd7c99142d77dc4a851879a66715abf12a3193fb Mon Sep 17 00:00:00 2001
|
||||
From: Dave Martin <Dave.Martin@arm.com>
|
||||
Date: Fri, 6 Jan 2017 17:54:51 +0000
|
||||
Subject: tile/ptrace: Preserve previous registers for short regset write
|
||||
|
||||
From: Dave Martin <Dave.Martin@arm.com>
|
||||
|
||||
commit fd7c99142d77dc4a851879a66715abf12a3193fb upstream.
|
||||
|
||||
Ensure that if userspace supplies insufficient data to
|
||||
PTRACE_SETREGSET to fill all the registers, the thread's old
|
||||
registers are preserved.
|
||||
|
||||
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
|
||||
Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
---
|
||||
arch/tile/kernel/ptrace.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/tile/kernel/ptrace.c
|
||||
+++ b/arch/tile/kernel/ptrace.c
|
||||
@@ -111,7 +111,7 @@ static int tile_gpr_set(struct task_stru
|
||||
const void *kbuf, const void __user *ubuf)
|
||||
{
|
||||
int ret;
|
||||
- struct pt_regs regs;
|
||||
+ struct pt_regs regs = *task_pt_regs(target);
|
||||
|
||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, ®s, 0,
|
||||
sizeof(regs));
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
From 1cd6472e3f8d3fdee0fd19f7088807b284d3080f Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@redhat.com>
|
||||
Date: Thu, 1 Dec 2016 14:00:25 +0100
|
||||
Subject: [PATCH] tools build: Make fixdep parsing wait for last target
|
||||
|
||||
The fixdep tool, among other things, replaces the target of the object
|
||||
in the gcc generated dependency output file.
|
||||
|
||||
The parsing code assumes there's only single target in the rule but this
|
||||
is not always the case as described in here:
|
||||
|
||||
https://gcc.gnu.org/ml/gcc-help/2016-11/msg00099.html
|
||||
|
||||
Make the fixdep code smart enough to skip all the possible targets.
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
Acked-by: Peter Foley <pefoley2@pefoley.com>
|
||||
Cc: Wang Nan <wangnan0@huawei.com>
|
||||
Link: http://lkml.kernel.org/r/20161201130025.GA16430@krava
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/build/fixdep.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tools/build/fixdep.c b/tools/build/fixdep.c
|
||||
index 1521d36..734d154 100644
|
||||
--- a/tools/build/fixdep.c
|
||||
+++ b/tools/build/fixdep.c
|
||||
@@ -49,7 +49,7 @@ static void parse_dep_file(void *map, size_t len)
|
||||
char *end = m + len;
|
||||
char *p;
|
||||
char s[PATH_MAX];
|
||||
- int is_target;
|
||||
+ int is_target, has_target = 0;
|
||||
int saw_any_target = 0;
|
||||
int is_first_dep = 0;
|
||||
|
||||
@@ -67,7 +67,8 @@ static void parse_dep_file(void *map, size_t len)
|
||||
if (is_target) {
|
||||
/* The /next/ file is the first dependency */
|
||||
is_first_dep = 1;
|
||||
- } else {
|
||||
+ has_target = 1;
|
||||
+ } else if (has_target) {
|
||||
/* Save this token/filename */
|
||||
memcpy(s, m, p-m);
|
||||
s[p - m] = 0;
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+237
@@ -0,0 +1,237 @@
|
||||
From abb26210a39522a6645bce3f438ed9a26bedb11b Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@kernel.org>
|
||||
Date: Tue, 6 Dec 2016 14:18:49 +0100
|
||||
Subject: [PATCH] perf tools: Force fixdep compilation at the start of the
|
||||
build
|
||||
|
||||
The fixdep tool needs to be built before everything else, because it fixes
|
||||
every object dependency file.
|
||||
|
||||
We handle this currently by making all objects to depend on fixdep, which is
|
||||
error prone and is easily forgotten when new object is added.
|
||||
|
||||
Instead of this, this patch force fixdep tool to be built as the first target
|
||||
in the separate make session. This way we don't need to handle extra fixdep
|
||||
dependencies and we are certain there's no fixdep race with any parallel make
|
||||
job.
|
||||
|
||||
Committer notes:
|
||||
|
||||
Testing it:
|
||||
|
||||
Before:
|
||||
|
||||
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin
|
||||
make: Entering directory '/home/acme/git/linux/tools/perf'
|
||||
BUILD: Doing 'make -j4' parallel build
|
||||
|
||||
Auto-detecting system features:
|
||||
... dwarf: [ on ]
|
||||
... dwarf_getlocations: [ on ]
|
||||
... glibc: [ on ]
|
||||
... gtk2: [ on ]
|
||||
... libaudit: [ on ]
|
||||
... libbfd: [ on ]
|
||||
... libelf: [ on ]
|
||||
... libnuma: [ on ]
|
||||
... numa_num_possible_cpus: [ on ]
|
||||
... libperl: [ on ]
|
||||
... libpython: [ on ]
|
||||
... libslang: [ on ]
|
||||
... libcrypto: [ on ]
|
||||
... libunwind: [ on ]
|
||||
... libdw-dwarf-unwind: [ on ]
|
||||
... zlib: [ on ]
|
||||
... lzma: [ on ]
|
||||
... get_cpuid: [ on ]
|
||||
... bpf: [ on ]
|
||||
|
||||
GEN /tmp/build/perf/common-cmds.h
|
||||
HOSTCC /tmp/build/perf/fixdep.o
|
||||
HOSTLD /tmp/build/perf/fixdep-in.o
|
||||
LINK /tmp/build/perf/fixdep
|
||||
MKDIR /tmp/build/perf/pmu-events/
|
||||
HOSTCC /tmp/build/perf/pmu-events/json.o
|
||||
MKDIR /tmp/build/perf/pmu-events/
|
||||
HOSTCC /tmp/build/perf/pmu-events/jsmn.o
|
||||
HOSTCC /tmp/build/perf/pmu-events/jevents.o
|
||||
HOSTLD /tmp/build/perf/pmu-events/jevents-in.o
|
||||
PERF_VERSION = 4.9.rc8.g868cd5
|
||||
CC /tmp/build/perf/perf-read-vdso32
|
||||
<SNIP>
|
||||
|
||||
After:
|
||||
|
||||
$ rm -rf /tmp/build/perf/ ; mkdir -p /tmp/build/perf ; make -k O=/tmp/build/perf -C tools/perf install-bin
|
||||
make: Entering directory '/home/acme/git/linux/tools/perf'
|
||||
BUILD: Doing 'make -j4' parallel build
|
||||
HOSTCC /tmp/build/perf/fixdep.o
|
||||
HOSTLD /tmp/build/perf/fixdep-in.o
|
||||
LINK /tmp/build/perf/fixdep
|
||||
|
||||
Auto-detecting system features:
|
||||
... dwarf: [ on ]
|
||||
... dwarf_getlocations: [ on ]
|
||||
... glibc: [ on ]
|
||||
... gtk2: [ on ]
|
||||
... libaudit: [ on ]
|
||||
... libbfd: [ on ]
|
||||
... libelf: [ on ]
|
||||
... libnuma: [ on ]
|
||||
... numa_num_possible_cpus: [ on ]
|
||||
... libperl: [ on ]
|
||||
... libpython: [ on ]
|
||||
... libslang: [ on ]
|
||||
... libcrypto: [ on ]
|
||||
... libunwind: [ on ]
|
||||
... libdw-dwarf-unwind: [ on ]
|
||||
... zlib: [ on ]
|
||||
... lzma: [ on ]
|
||||
... get_cpuid: [ on ]
|
||||
... bpf: [ on ]
|
||||
|
||||
GEN /tmp/build/perf/common-cmds.h
|
||||
MKDIR /tmp/build/perf/fd/
|
||||
CC /tmp/build/perf/fd/array.o
|
||||
LD /tmp/build/perf/fd/libapi-in.o
|
||||
MKDIR /tmp/build/perf/fs/
|
||||
CC /tmp/build/perf/event-parse.o
|
||||
CC /tmp/build/perf/fs/fs.o
|
||||
PERF_VERSION = 4.9.rc8.g57a92f
|
||||
CC /tmp/build/perf/event-plugin.o
|
||||
MKDIR /tmp/build/perf/fs/
|
||||
CC /tmp/build/perf/fs/tracing_path.o
|
||||
<SNIP>
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
Cc: David Ahern <dsahern@gmail.com>
|
||||
Cc: Namhyung Kim <namhyung@kernel.org>
|
||||
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/r/1481030331-31944-3-git-send-email-jolsa@kernel.org
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/Makefile.perf | 50 ++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 38 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
|
||||
index 9e5a6e1..33b1d9f 100644
|
||||
--- a/tools/perf/Makefile.perf
|
||||
+++ b/tools/perf/Makefile.perf
|
||||
@@ -177,6 +177,35 @@ ifeq ($(filter-out $(NON_CONFIG_TARGETS)
|
||||
endif
|
||||
endif
|
||||
|
||||
+# The fixdep build - we force fixdep tool to be built as
|
||||
+# the first target in the separate make session not to be
|
||||
+# disturbed by any parallel make jobs. Once fixdep is done
|
||||
+# we issue the requested build with FIXDEP=1 variable.
|
||||
+#
|
||||
+# The fixdep build is disabled for $(NON_CONFIG_TARGETS)
|
||||
+# targets, because it's not necessary.
|
||||
+
|
||||
+ifdef FIXDEP
|
||||
+ force_fixdep := 0
|
||||
+else
|
||||
+ force_fixdep := $(config)
|
||||
+endif
|
||||
+
|
||||
+export srctree OUTPUT RM CC CXX LD AR CFLAGS CXXFLAGS V BISON FLEX AWK
|
||||
+export HOSTCC HOSTLD HOSTAR
|
||||
+
|
||||
+include $(srctree)/tools/build/Makefile.include
|
||||
+
|
||||
+ifeq ($(force_fixdep),1)
|
||||
+goals := $(filter-out all sub-make, $(MAKECMDGOALS))
|
||||
+
|
||||
+$(goals) all: sub-make
|
||||
+
|
||||
+sub-make: fixdep
|
||||
+ $(Q)$(MAKE) FIXDEP=1 -f Makefile.perf $(goals)
|
||||
+
|
||||
+else # force_fixdep
|
||||
+
|
||||
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
||||
# Without this setting the output feature dump file misses some features, for
|
||||
# example, liberty. Select all checkers so we won't get an incomplete feature
|
||||
@@ -348,10 +377,6 @@ strip: $(PROGRAMS) $(OUTPUT)perf
|
||||
|
||||
PERF_IN := $(OUTPUT)perf-in.o
|
||||
|
||||
-export srctree OUTPUT RM CC LD AR CFLAGS V BISON FLEX AWK
|
||||
-export HOSTCC HOSTLD HOSTAR
|
||||
-include $(srctree)/tools/build/Makefile.include
|
||||
-
|
||||
JEVENTS := $(OUTPUT)pmu-events/jevents
|
||||
JEVENTS_IN := $(OUTPUT)pmu-events/jevents-in.o
|
||||
|
||||
@@ -470,7 +495,7 @@ $(OUTPUT)perf: $(PERFLIBS) $(PERF_IN) $(
|
||||
$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(LIBTRACEEVENT_DYNAMIC_LIST_LDFLAGS) \
|
||||
$(PERF_IN) $(PMU_EVENTS_IN) $(LIBS) -o $@
|
||||
|
||||
-$(GTK_IN): fixdep FORCE
|
||||
+$(GTK_IN): FORCE
|
||||
$(Q)$(MAKE) $(build)=gtk
|
||||
|
||||
$(OUTPUT)libperf-gtk.so: $(GTK_IN) $(PERFLIBS)
|
||||
@@ -515,7 +540,7 @@ endif
|
||||
__build-dir = $(subst $(OUTPUT),,$(dir $@))
|
||||
build-dir = $(if $(__build-dir),$(__build-dir),.)
|
||||
|
||||
-prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h fixdep archheaders
|
||||
+prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders
|
||||
|
||||
$(OUTPUT)%.o: %.c prepare FORCE
|
||||
$(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
|
||||
@@ -555,7 +580,7 @@ $(patsubst perf-%,%.o,$(PROGRAMS)): $(wi
|
||||
|
||||
LIBPERF_IN := $(OUTPUT)libperf-in.o
|
||||
|
||||
-$(LIBPERF_IN): prepare fixdep FORCE
|
||||
+$(LIBPERF_IN): prepare FORCE
|
||||
$(Q)$(MAKE) $(build)=libperf
|
||||
|
||||
$(LIB_FILE): $(LIBPERF_IN)
|
||||
@@ -563,10 +588,10 @@ $(LIB_FILE): $(LIBPERF_IN)
|
||||
|
||||
LIBTRACEEVENT_FLAGS += plugin_dir=$(plugindir_SQ)
|
||||
|
||||
-$(LIBTRACEEVENT): fixdep FORCE
|
||||
+$(LIBTRACEEVENT): FORCE
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) $(OUTPUT)libtraceevent.a
|
||||
|
||||
-libtraceevent_plugins: fixdep FORCE
|
||||
+libtraceevent_plugins: FORCE
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) plugins
|
||||
|
||||
$(LIBTRACEEVENT_DYNAMIC_LIST): libtraceevent_plugins
|
||||
@@ -579,21 +604,21 @@ $(LIBTRACEEVENT)-clean:
|
||||
install-traceevent-plugins: libtraceevent_plugins
|
||||
$(Q)$(MAKE) -C $(TRACE_EVENT_DIR) $(LIBTRACEEVENT_FLAGS) O=$(OUTPUT) install_plugins
|
||||
|
||||
-$(LIBAPI): fixdep FORCE
|
||||
+$(LIBAPI): FORCE
|
||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) $(OUTPUT)libapi.a
|
||||
|
||||
$(LIBAPI)-clean:
|
||||
$(call QUIET_CLEAN, libapi)
|
||||
$(Q)$(MAKE) -C $(LIB_DIR) O=$(OUTPUT) clean >/dev/null
|
||||
|
||||
-$(LIBBPF): fixdep FORCE
|
||||
+$(LIBBPF): FORCE
|
||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) $(OUTPUT)libbpf.a FEATURES_DUMP=$(FEATURE_DUMP_EXPORT)
|
||||
|
||||
$(LIBBPF)-clean:
|
||||
$(call QUIET_CLEAN, libbpf)
|
||||
$(Q)$(MAKE) -C $(BPF_DIR) O=$(OUTPUT) clean >/dev/null
|
||||
|
||||
-$(LIBSUBCMD): fixdep FORCE
|
||||
+$(LIBSUBCMD): FORCE
|
||||
$(Q)$(MAKE) -C $(SUBCMD_DIR) O=$(OUTPUT) $(OUTPUT)libsubcmd.a
|
||||
|
||||
$(LIBSUBCMD)-clean:
|
||||
@@ -790,3 +815,4 @@ FORCE:
|
||||
.PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE prepare
|
||||
.PHONY: libtraceevent_plugins archheaders
|
||||
|
||||
+endif # force_fixdep
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
From 8ac1eb7bab7c8d9d6f00b3e2a408611c45d9dff0 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@kernel.org>
|
||||
Date: Tue, 6 Dec 2016 14:18:50 +0100
|
||||
Subject: [PATCH] perf tools: Move perf build related variables under non
|
||||
fixdep leg
|
||||
|
||||
Because there's no need for them in fixdep build.
|
||||
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Cc: David Ahern <dsahern@gmail.com>
|
||||
Cc: Namhyung Kim <namhyung@kernel.org>
|
||||
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
|
||||
Link: http://lkml.kernel.org/r/1481030331-31944-4-git-send-email-jolsa@kernel.org
|
||||
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
|
||||
---
|
||||
tools/perf/Makefile.perf | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
|
||||
index 33b1d9f..8f1c258 100644
|
||||
--- a/tools/perf/Makefile.perf
|
||||
+++ b/tools/perf/Makefile.perf
|
||||
@@ -164,11 +164,6 @@ BISON = bison
|
||||
STRIP = strip
|
||||
AWK = awk
|
||||
|
||||
-LIB_DIR = $(srctree)/tools/lib/api/
|
||||
-TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
|
||||
-BPF_DIR = $(srctree)/tools/lib/bpf/
|
||||
-SUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
||||
-
|
||||
# include Makefile.config by default and rule out
|
||||
# non-config cases
|
||||
config := 1
|
||||
@@ -210,6 +205,11 @@ sub-make: fixdep
|
||||
|
||||
else # force_fixdep
|
||||
|
||||
+LIB_DIR = $(srctree)/tools/lib/api/
|
||||
+TRACE_EVENT_DIR = $(srctree)/tools/lib/traceevent/
|
||||
+BPF_DIR = $(srctree)/tools/lib/bpf/
|
||||
+SUBCMD_DIR = $(srctree)/tools/lib/subcmd/
|
||||
+
|
||||
# Set FEATURE_TESTS to 'all' so all possible feature checkers are executed.
|
||||
# Without this setting the output feature dump file misses some features, for
|
||||
# example, liberty. Select all checkers so we won't get an incomplete feature
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
--- linux/tools/testing/selftests/Makefile.orig
|
||||
+++ linux/tools/testing/selftests/Makefile
|
||||
@@ -15,7 +15,6 @@ TARGETS += memory-hotplug
|
||||
TARGETS += mount
|
||||
@@ -16,7 +16,6 @@ TARGETS += mount
|
||||
TARGETS += mqueue
|
||||
TARGETS += net
|
||||
TARGETS += nsfs
|
||||
-TARGETS += powerpc
|
||||
TARGETS += pstore
|
||||
TARGETS += ptrace
|
||||
|
||||
@@ -12,21 +12,22 @@
|
||||
<IsA>app:console</IsA>
|
||||
<Summary>CPU power management tools</Summary>
|
||||
<Description>cpupowertools contains utilities to manage power management and frequency scaling policies of modern CPUs.</Description>
|
||||
<Archive sha1sum="a85e6ca968b10ec0eace2daaaa59fc8734d0db74" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.gz</Archive>
|
||||
<Archive sha1sum="60a47e858fce153c5bedd7e293a1b45e8d2db054" type="targz">https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>pciutils-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.8.13.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.8.9/1.mga6/PATCHES/patches/series-->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.9.6.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.9.6/1.mga6/PATCHES/patches/series-->
|
||||
<!--stable patches-->
|
||||
<!--CVE-2016-8405-->
|
||||
<Patch level="1">patches/mageia/stable-fbdev-color-map-copying-bounds-checking.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-tile-ptrace-preserve-previous-registers-for-short-regset-write.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-drm-schedule-the-output_poll_work-with-1s-delay-if-we-have-delayed-event.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-drm-fix-broken-vt-switch-with-video-1366x768-option.patch</Patch>
|
||||
<Patch level="1">patches/mageia/stable-drm-i915-ignore-bogus-plane-coordinates-on-skl-when-the-plane-is-not-visible.patch</Patch>
|
||||
<!--other patches-->
|
||||
<Patch level="1">patches/mageia/Revert-ipmi-Start-the-timer-and-thread-on-internal-m.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-pci-toshiba-equium-a60-assign-busses.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-boot-video-80x25-if-break.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-default_poweroff_up_machines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-x86-mm-mtrr-Remove-kernel-internal-MTRR-inter.patch</Patch>
|
||||
<Patch level="1">patches/mageia/base-cacheinfo-silence-DT-warnings.patch</Patch>
|
||||
@@ -35,6 +36,7 @@
|
||||
<Patch level="1">patches/mageia/acpi-CLEVO-M360S-disable_acpi_irq.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-processor-M720SR-limit-to-C2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-do-not-warn-if-_BQC-does-not-exist.patch</Patch>
|
||||
<!--Patch level="1">patches/mageia/scsi-ppscsi-2.6.2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi_fixes.patch</Patch>
|
||||
<Patch level="1">patches/mageia/scsi-ppscsi-sg-helper-update.patch</Patch>
|
||||
@@ -48,12 +50,17 @@
|
||||
<Patch level="1">patches/mageia/block-floppy-disable-pnp-modalias.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ata-prefer-ata-drivers-over-ide-drivers-when-both-are-built.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-Make-CFQ-default-to-IOPS-mode-on-SSDs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/linux-BFQ-v8r4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/nvmepatch1-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/nvmepatch2-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/nvmepatch3-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.8.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.8-modular.patch</Patch>
|
||||
<!--Patch level="1">patches/mageia/block-cgroups-kconfig-build-bits-for-BFQ-v7r11-4.5.0.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-introduce-the-BFQ-v7r11-I-O-sched-for-4.5.0.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r11-for.patch</Patch>
|
||||
<Patch level="1">patches/mageia/block-Turn-into-BFQ-v8r6-for-4.9.0.patch</Patch>--><!--2-->
|
||||
<Patch level="1">patches/mageia/char-tpm-tpm_crb-implement-tpm-crb-idle-state.patch</Patch>
|
||||
<Patch level="1">patches/mageia/char-tmp-tpm_crb-fix-Intel-PTT-hw-bug-during-idle-state.patch</Patch>
|
||||
<Patch level="1">patches/mageia/char-tpm-tpm_crb-open-code-the-crb_init-into-acpi_add.patch</Patch>
|
||||
<Patch level="1">patches/mageia/char-tmp-tpm_crb-implement-runtime-pm-for-tpm_crb.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.9.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.9-modular.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-seq_file-reset-iterator-to-first-record-for-zero-off.patch</Patch>
|
||||
<Patch level="1">patches/mageia/firewire-ieee1394-module-aliases.patch</Patch>
|
||||
<Patch level="1">patches/mageia/char-agp-intel-new-Q57-id.patch</Patch>
|
||||
<!--remove external mach64 support for buildfix-->
|
||||
@@ -73,7 +80,11 @@
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-restore-mach64_PCI_IDS.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-linux-3.14-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.17-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.18-buildfix.patch</Patch--><!--1-->
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.18-buildfix.patch</Patch--><!--1-->
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-skl-drop-workarounds-for-A0-and-B0-revisions.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-skl-drop-workarounds-for-D0-revision.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-skl-drop-workarounds-for-E0-revision.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-Remove-WaDisableLSQCROPERFforOCL-KBL-workaround.patch</Patch>
|
||||
<Patch level="1">patches/mageia/input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-sis190-fix-list-usage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG.patch</Patch>
|
||||
@@ -86,7 +97,10 @@
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-mdv.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-rtlwifi-Fix-regression-caused-by-commit-d86e64768859.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-fix-redefines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-rtlwifi-Use-dev_kfree_skb_irq-instead-of-kfree_skb.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-rtlwifi-Fix-kernel-oops-introduced-with-commit-e4965.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-brcmfmac-fix-incorrect-event-channel-deduction.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-add-shuttle-wmi-driver.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.2-buildfix.patch</Patch>
|
||||
@@ -121,9 +135,10 @@
|
||||
<Patch level="1">patches/mageia/3rd-viahss-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-viahss-3.0-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-4.7-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/3rd-rtl8723bs-4.8-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-testing-selftest-Makefile-remove-powerpc-reference.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-build-Make-fixdep-parsing-wait-for-last-target.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-perf-tools-Force-fixdep-compilation-at-the-start-of-.patch</Patch>
|
||||
<Patch level="1">patches/mageia/tools-perf-tools-Move-perf-build-related-variables-under-n.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -149,6 +164,13 @@
|
||||
</Provides>-->
|
||||
</Package>
|
||||
<History>
|
||||
<Update release="8">
|
||||
<Date>2017-02-15</Date>
|
||||
<Version>4.9.6</Version>
|
||||
<Comment>Release bump</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2016-12-10</Date>
|
||||
<Version>4.8.13</Version>
|
||||
|
||||
@@ -44,6 +44,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="3">
|
||||
<Date>2017-02-15</Date>
|
||||
<Version>1.0.7</Version>
|
||||
<Comment>Release Bump</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="2">
|
||||
<Date>2016-04-27</Date>
|
||||
<Version>1.0.7</Version>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
DISTRIB_ID="PisiLinux"
|
||||
DISTRIB_RELEASE="2.0 Beta 2"
|
||||
DISTRIB_DESCRIPTION="Pisi GNU/Linux 2.0 Beta 2"
|
||||
DISTRIB_CODENAME="Crocus Ancyrensis"
|
||||
DISTRIB_RELEASE="2.0 Beta 2.1"
|
||||
DISTRIB_DESCRIPTION="Pisi GNU/Linux 2.0 Beta 2.1"
|
||||
DISTRIB_CODENAME="Phoenix"
|
||||
|
||||
@@ -31,6 +31,13 @@
|
||||
</AdditionalFiles>
|
||||
</Package>
|
||||
<History>
|
||||
<Update release="4">
|
||||
<Date>2017-02-15</Date>
|
||||
<Version>1.4</Version>
|
||||
<Comment>Beta 2.1</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2016-08-17</Date>
|
||||
<Version>1.4</Version>
|
||||
|
||||
Reference in New Issue
Block a user