Odroid XU4 current - add upstream patch
This commit is contained in:
parent
2e594375a9
commit
d8d391aaf1
397
patch/kernel/odroidxu4-current/0002-patch-5.4.100-101.patch
Normal file
397
patch/kernel/odroidxu4-current/0002-patch-5.4.100-101.patch
Normal file
@ -0,0 +1,397 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
index d0d4beb4f8373..f56442751d2c3 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 100
|
||||
+SUBLEVEL = 101
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
|
||||
index 078d2506365c0..8a02b26d07cd4 100644
|
||||
--- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi
|
||||
+++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
|
||||
@@ -917,6 +917,7 @@
|
||||
<&tegra_car 128>, /* hda2hdmi */
|
||||
<&tegra_car 111>; /* hda2codec_2x */
|
||||
reset-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
+ power-domains = <&pd_sor>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
||||
index d2ecc9c452554..263eca119ff0f 100644
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -90,7 +90,7 @@ EXPORT_SYMBOL_GPL(hid_register_report);
|
||||
* Register a new field for this report.
|
||||
*/
|
||||
|
||||
-static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages, unsigned values)
|
||||
+static struct hid_field *hid_register_field(struct hid_report *report, unsigned usages)
|
||||
{
|
||||
struct hid_field *field;
|
||||
|
||||
@@ -101,7 +101,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned
|
||||
|
||||
field = kzalloc((sizeof(struct hid_field) +
|
||||
usages * sizeof(struct hid_usage) +
|
||||
- values * sizeof(unsigned)), GFP_KERNEL);
|
||||
+ usages * sizeof(unsigned)), GFP_KERNEL);
|
||||
if (!field)
|
||||
return NULL;
|
||||
|
||||
@@ -300,7 +300,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
||||
usages = max_t(unsigned, parser->local.usage_index,
|
||||
parser->global.report_count);
|
||||
|
||||
- field = hid_register_field(report, usages, parser->global.report_count);
|
||||
+ field = hid_register_field(report, usages);
|
||||
if (!field)
|
||||
return 0;
|
||||
|
||||
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h b/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h
|
||||
index 0c5373462cedb..0b1b5f9c67d47 100644
|
||||
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h
|
||||
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h
|
||||
@@ -219,6 +219,7 @@ CH_PCI_DEVICE_ID_TABLE_DEFINE_BEGIN
|
||||
CH_PCI_ID_TABLE_FENTRY(0x6089), /* Custom T62100-KR */
|
||||
CH_PCI_ID_TABLE_FENTRY(0x608a), /* Custom T62100-CR */
|
||||
CH_PCI_ID_TABLE_FENTRY(0x608b), /* Custom T6225-CR */
|
||||
+ CH_PCI_ID_TABLE_FENTRY(0x6092), /* Custom T62100-CR-LOM */
|
||||
CH_PCI_DEVICE_ID_TABLE_DEFINE_END;
|
||||
|
||||
#endif /* __T4_PCI_ID_TBL_H__ */
|
||||
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
|
||||
index 72a3a5dc51319..5a1d21aae2a9e 100644
|
||||
--- a/drivers/net/usb/qmi_wwan.c
|
||||
+++ b/drivers/net/usb/qmi_wwan.c
|
||||
@@ -1354,6 +1354,7 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_FIXED_INTF(0x1e2d, 0x0082, 5)}, /* Cinterion PHxx,PXxx (2 RmNet) */
|
||||
{QMI_FIXED_INTF(0x1e2d, 0x0083, 4)}, /* Cinterion PHxx,PXxx (1 RmNet + USB Audio)*/
|
||||
{QMI_QUIRK_SET_DTR(0x1e2d, 0x00b0, 4)}, /* Cinterion CLS8 */
|
||||
+ {QMI_FIXED_INTF(0x1e2d, 0x00b7, 0)}, /* Cinterion MV31 RmNet */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a2, 8)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a3, 8)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
{QMI_FIXED_INTF(0x413c, 0x81a4, 8)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
|
||||
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||
index c1592403222f5..239443ce52001 100644
|
||||
--- a/drivers/usb/core/quirks.c
|
||||
+++ b/drivers/usb/core/quirks.c
|
||||
@@ -391,6 +391,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
/* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */
|
||||
{ USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF },
|
||||
|
||||
+ /* ELMO L-12F document camera */
|
||||
+ { USB_DEVICE(0x09a1, 0x0028), .driver_info = USB_QUIRK_DELAY_CTRL_MSG },
|
||||
+
|
||||
/* Broadcom BCM92035DGROM BT dongle */
|
||||
{ USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
@@ -415,6 +418,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
{ USB_DEVICE(0x10d6, 0x2200), .driver_info =
|
||||
USB_QUIRK_STRING_FETCH_255 },
|
||||
|
||||
+ /* novation SoundControl XL */
|
||||
+ { USB_DEVICE(0x1235, 0x0061), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
+
|
||||
/* Huawei 4G LTE module */
|
||||
{ USB_DEVICE(0x12d1, 0x15bb), .driver_info =
|
||||
USB_QUIRK_DISCONNECT_SUSPEND },
|
||||
@@ -495,9 +501,6 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
/* INTEL VALUE SSD */
|
||||
{ USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
- /* novation SoundControl XL */
|
||||
- { USB_DEVICE(0x1235, 0x0061), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
-
|
||||
{ } /* terminating entry must be last */
|
||||
};
|
||||
|
||||
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
|
||||
index ab9eeb5ff8e57..67c2e6487479a 100644
|
||||
--- a/fs/cifs/connect.c
|
||||
+++ b/fs/cifs/connect.c
|
||||
@@ -4198,6 +4198,7 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
|
||||
cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL);
|
||||
if (cifs_sb->prepath == NULL)
|
||||
return -ENOMEM;
|
||||
+ cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
|
||||
}
|
||||
|
||||
return 0;
|
||||
diff --git a/fs/dax.c b/fs/dax.c
|
||||
index cc56313c6b3b9..3b0e5da96d541 100644
|
||||
--- a/fs/dax.c
|
||||
+++ b/fs/dax.c
|
||||
@@ -794,12 +794,12 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index,
|
||||
address = pgoff_address(index, vma);
|
||||
|
||||
/*
|
||||
- * Note because we provide range to follow_pte_pmd it will
|
||||
- * call mmu_notifier_invalidate_range_start() on our behalf
|
||||
- * before taking any lock.
|
||||
+ * follow_invalidate_pte() will use the range to call
|
||||
+ * mmu_notifier_invalidate_range_start() on our behalf before
|
||||
+ * taking any lock.
|
||||
*/
|
||||
- if (follow_pte_pmd(vma->vm_mm, address, &range,
|
||||
- &ptep, &pmdp, &ptl))
|
||||
+ if (follow_invalidate_pte(vma->vm_mm, address, &range, &ptep,
|
||||
+ &pmdp, &ptl))
|
||||
continue;
|
||||
|
||||
/*
|
||||
diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c
|
||||
index 84933a0af49b6..672feb96e250e 100644
|
||||
--- a/fs/ntfs/inode.c
|
||||
+++ b/fs/ntfs/inode.c
|
||||
@@ -628,6 +628,12 @@ static int ntfs_read_locked_inode(struct inode *vi)
|
||||
}
|
||||
a = ctx->attr;
|
||||
/* Get the standard information attribute value. */
|
||||
+ if ((u8 *)a + le16_to_cpu(a->data.resident.value_offset)
|
||||
+ + le32_to_cpu(a->data.resident.value_length) >
|
||||
+ (u8 *)ctx->mrec + vol->mft_record_size) {
|
||||
+ ntfs_error(vi->i_sb, "Corrupt standard information attribute in inode.");
|
||||
+ goto unm_err_out;
|
||||
+ }
|
||||
si = (STANDARD_INFORMATION*)((u8*)a +
|
||||
le16_to_cpu(a->data.resident.value_offset));
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index 7249cf58f78d1..c63e4b38b7fe0 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -1466,9 +1466,11 @@ void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
|
||||
unsigned long end, unsigned long floor, unsigned long ceiling);
|
||||
int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
|
||||
struct vm_area_struct *vma);
|
||||
-int follow_pte_pmd(struct mm_struct *mm, unsigned long address,
|
||||
- struct mmu_notifier_range *range,
|
||||
- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp);
|
||||
+int follow_invalidate_pte(struct mm_struct *mm, unsigned long address,
|
||||
+ struct mmu_notifier_range *range, pte_t **ptepp,
|
||||
+ pmd_t **pmdpp, spinlock_t **ptlp);
|
||||
+int follow_pte(struct mm_struct *mm, unsigned long address,
|
||||
+ pte_t **ptepp, spinlock_t **ptlp);
|
||||
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
|
||||
unsigned long *pfn);
|
||||
int follow_phys(struct vm_area_struct *vma, unsigned long address,
|
||||
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
|
||||
index 2c248c4f6419c..e6a43c0fdee88 100644
|
||||
--- a/kernel/bpf/verifier.c
|
||||
+++ b/kernel/bpf/verifier.c
|
||||
@@ -9005,7 +9005,7 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env)
|
||||
bool isdiv = BPF_OP(insn->code) == BPF_DIV;
|
||||
struct bpf_insn *patchlet;
|
||||
struct bpf_insn chk_and_div[] = {
|
||||
- /* Rx div 0 -> 0 */
|
||||
+ /* [R,W]x div 0 -> 0 */
|
||||
BPF_RAW_INSN((is64 ? BPF_JMP : BPF_JMP32) |
|
||||
BPF_JNE | BPF_K, insn->src_reg,
|
||||
0, 2, 0),
|
||||
@@ -9014,16 +9014,18 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env)
|
||||
*insn,
|
||||
};
|
||||
struct bpf_insn chk_and_mod[] = {
|
||||
- /* Rx mod 0 -> Rx */
|
||||
+ /* [R,W]x mod 0 -> [R,W]x */
|
||||
BPF_RAW_INSN((is64 ? BPF_JMP : BPF_JMP32) |
|
||||
BPF_JEQ | BPF_K, insn->src_reg,
|
||||
- 0, 1, 0),
|
||||
+ 0, 1 + (is64 ? 0 : 1), 0),
|
||||
*insn,
|
||||
+ BPF_JMP_IMM(BPF_JA, 0, 0, 1),
|
||||
+ BPF_MOV32_REG(insn->dst_reg, insn->dst_reg),
|
||||
};
|
||||
|
||||
patchlet = isdiv ? chk_and_div : chk_and_mod;
|
||||
cnt = isdiv ? ARRAY_SIZE(chk_and_div) :
|
||||
- ARRAY_SIZE(chk_and_mod);
|
||||
+ ARRAY_SIZE(chk_and_mod) - (is64 ? 2 : 0);
|
||||
|
||||
new_prog = bpf_patch_insn_data(env, i + delta, patchlet, cnt);
|
||||
if (!new_prog)
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 2157bb28117ac..b23831132933a 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -4222,9 +4222,9 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
|
||||
}
|
||||
#endif /* __PAGETABLE_PMD_FOLDED */
|
||||
|
||||
-static int __follow_pte_pmd(struct mm_struct *mm, unsigned long address,
|
||||
- struct mmu_notifier_range *range,
|
||||
- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp)
|
||||
+int follow_invalidate_pte(struct mm_struct *mm, unsigned long address,
|
||||
+ struct mmu_notifier_range *range, pte_t **ptepp,
|
||||
+ pmd_t **pmdpp, spinlock_t **ptlp)
|
||||
{
|
||||
pgd_t *pgd;
|
||||
p4d_t *p4d;
|
||||
@@ -4289,31 +4289,33 @@ out:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
-static inline int follow_pte(struct mm_struct *mm, unsigned long address,
|
||||
- pte_t **ptepp, spinlock_t **ptlp)
|
||||
-{
|
||||
- int res;
|
||||
-
|
||||
- /* (void) is needed to make gcc happy */
|
||||
- (void) __cond_lock(*ptlp,
|
||||
- !(res = __follow_pte_pmd(mm, address, NULL,
|
||||
- ptepp, NULL, ptlp)));
|
||||
- return res;
|
||||
-}
|
||||
-
|
||||
-int follow_pte_pmd(struct mm_struct *mm, unsigned long address,
|
||||
- struct mmu_notifier_range *range,
|
||||
- pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp)
|
||||
+/**
|
||||
+ * follow_pte - look up PTE at a user virtual address
|
||||
+ * @mm: the mm_struct of the target address space
|
||||
+ * @address: user virtual address
|
||||
+ * @ptepp: location to store found PTE
|
||||
+ * @ptlp: location to store the lock for the PTE
|
||||
+ *
|
||||
+ * On a successful return, the pointer to the PTE is stored in @ptepp;
|
||||
+ * the corresponding lock is taken and its location is stored in @ptlp.
|
||||
+ * The contents of the PTE are only stable until @ptlp is released;
|
||||
+ * any further use, if any, must be protected against invalidation
|
||||
+ * with MMU notifiers.
|
||||
+ *
|
||||
+ * Only IO mappings and raw PFN mappings are allowed. The mmap semaphore
|
||||
+ * should be taken for read.
|
||||
+ *
|
||||
+ * KVM uses this function. While it is arguably less bad than ``follow_pfn``,
|
||||
+ * it is not a good general-purpose API.
|
||||
+ *
|
||||
+ * Return: zero on success, -ve otherwise.
|
||||
+ */
|
||||
+int follow_pte(struct mm_struct *mm, unsigned long address,
|
||||
+ pte_t **ptepp, spinlock_t **ptlp)
|
||||
{
|
||||
- int res;
|
||||
-
|
||||
- /* (void) is needed to make gcc happy */
|
||||
- (void) __cond_lock(*ptlp,
|
||||
- !(res = __follow_pte_pmd(mm, address, range,
|
||||
- ptepp, pmdpp, ptlp)));
|
||||
- return res;
|
||||
+ return follow_invalidate_pte(mm, address, NULL, ptepp, NULL, ptlp);
|
||||
}
|
||||
-EXPORT_SYMBOL(follow_pte_pmd);
|
||||
+EXPORT_SYMBOL_GPL(follow_pte);
|
||||
|
||||
/**
|
||||
* follow_pfn - look up PFN at a user virtual address
|
||||
@@ -4323,6 +4325,9 @@ EXPORT_SYMBOL(follow_pte_pmd);
|
||||
*
|
||||
* Only IO mappings and raw PFN mappings are allowed.
|
||||
*
|
||||
+ * This function does not allow the caller to read the permissions
|
||||
+ * of the PTE. Do not use it.
|
||||
+ *
|
||||
* Return: zero and the pfn at @pfn on success, -ve otherwise.
|
||||
*/
|
||||
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
|
||||
diff --git a/scripts/Makefile b/scripts/Makefile
|
||||
index 3e86b300f5a10..b4b7d8b58cd68 100644
|
||||
--- a/scripts/Makefile
|
||||
+++ b/scripts/Makefile
|
||||
@@ -10,6 +10,9 @@
|
||||
|
||||
HOST_EXTRACFLAGS += -I$(srctree)/tools/include
|
||||
|
||||
+CRYPTO_LIBS = $(shell pkg-config --libs libcrypto 2> /dev/null || echo -lcrypto)
|
||||
+CRYPTO_CFLAGS = $(shell pkg-config --cflags libcrypto 2> /dev/null)
|
||||
+
|
||||
hostprogs-$(CONFIG_BUILD_BIN2C) += bin2c
|
||||
hostprogs-$(CONFIG_KALLSYMS) += kallsyms
|
||||
hostprogs-$(CONFIG_LOGO) += pnmtologo
|
||||
@@ -23,8 +26,10 @@ hostprogs-$(CONFIG_SYSTEM_EXTRA_CERTIFICATE) += insert-sys-cert
|
||||
|
||||
HOSTCFLAGS_sortextable.o = -I$(srctree)/tools/include
|
||||
HOSTCFLAGS_asn1_compiler.o = -I$(srctree)/include
|
||||
-HOSTLDLIBS_sign-file = -lcrypto
|
||||
-HOSTLDLIBS_extract-cert = -lcrypto
|
||||
+HOSTCFLAGS_sign-file.o = $(CRYPTO_CFLAGS)
|
||||
+HOSTLDLIBS_sign-file = $(CRYPTO_LIBS)
|
||||
+HOSTCFLAGS_extract-cert.o = $(CRYPTO_CFLAGS)
|
||||
+HOSTLDLIBS_extract-cert = $(CRYPTO_LIBS)
|
||||
|
||||
always := $(hostprogs-y) $(hostprogs-m)
|
||||
|
||||
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
|
||||
index 3f77a5d695c13..0bafed857e171 100755
|
||||
--- a/scripts/recordmcount.pl
|
||||
+++ b/scripts/recordmcount.pl
|
||||
@@ -268,7 +268,11 @@ if ($arch eq "x86_64") {
|
||||
|
||||
# force flags for this arch
|
||||
$ld .= " -m shlelf_linux";
|
||||
- $objcopy .= " -O elf32-sh-linux";
|
||||
+ if ($endian eq "big") {
|
||||
+ $objcopy .= " -O elf32-shbig-linux";
|
||||
+ } else {
|
||||
+ $objcopy .= " -O elf32-sh-linux";
|
||||
+ }
|
||||
|
||||
} elsif ($arch eq "powerpc") {
|
||||
my $ldemulation;
|
||||
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
|
||||
index f25b5043cbcae..048b555c5acc9 100644
|
||||
--- a/virt/kvm/kvm_main.c
|
||||
+++ b/virt/kvm/kvm_main.c
|
||||
@@ -1598,10 +1598,12 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma,
|
||||
bool write_fault, bool *writable,
|
||||
kvm_pfn_t *p_pfn)
|
||||
{
|
||||
- unsigned long pfn;
|
||||
+ kvm_pfn_t pfn;
|
||||
+ pte_t *ptep;
|
||||
+ spinlock_t *ptl;
|
||||
int r;
|
||||
|
||||
- r = follow_pfn(vma, addr, &pfn);
|
||||
+ r = follow_pte(vma->vm_mm, addr, &ptep, &ptl);
|
||||
if (r) {
|
||||
/*
|
||||
* get_user_pages fails for VM_IO and VM_PFNMAP vmas and does
|
||||
@@ -1616,14 +1618,19 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma,
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
- r = follow_pfn(vma, addr, &pfn);
|
||||
+ r = follow_pte(vma->vm_mm, addr, &ptep, &ptl);
|
||||
if (r)
|
||||
return r;
|
||||
+ }
|
||||
|
||||
+ if (write_fault && !pte_write(*ptep)) {
|
||||
+ pfn = KVM_PFN_ERR_RO_FAULT;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
if (writable)
|
||||
- *writable = true;
|
||||
+ *writable = pte_write(*ptep);
|
||||
+ pfn = pte_pfn(*ptep);
|
||||
|
||||
/*
|
||||
* Get a reference here because callers of *hva_to_pfn* and
|
||||
@@ -1638,6 +1645,8 @@ static int hva_to_pfn_remapped(struct vm_area_struct *vma,
|
||||
*/
|
||||
kvm_get_pfn(pfn);
|
||||
|
||||
+out:
|
||||
+ pte_unmap_unlock(ptep, ptl);
|
||||
*p_pfn = pfn;
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user