This is the 5.10.19 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmA4vAUACgkQONu9yGCS aT5/Bw//b5dtNqRK9JOgzEXGtmUvapUY9EJDZKHyyDB3BSiominZe85anl6ujO/u UFTI+cewjt3/Qt6GfbE+VxFxOsuWnpaH56WmAwJgArujduLC3z+3CXyfWrqECw7I 327dVo7rO8anLszWdGyAfA5KBr8GnVleaRkpMC7q1mLZVIQ91uH8j6UVi/ZH9cjv VEwJ3nSJSMOQIPrJIt5LYXuXcRH6D3s+Y4PihfloHLJdjmtsNMjNUTf5FpB0PlMm +pIDkUYjz/a0uqCn3qGKal2jPQP4GpL7LlTc2GTKdLS7d9Q9zGdzuZ//VcWemxqF 3YD8ef3NsFMN4O8Nsd890d0NLtlqZ7pFAkc3UCjNpAR+SrR1of19IXJMbkzUgJOt uRsxd1SPOYEwrZc8qq3ZiCNuDEWAoJosjScIo6tKFHZ9noIXO3Yotvzz4L44MVGF q8pUTOv1zP49BpjGZW6fErO5u/L2u1ULPAhTXLXaiNkUYb8zwLQCb1AjwB0saoKY 3dMKCFLwVQPx2MViLUKjrf05rB2/1Vs+apZ1Gdcl+2iUMMeY8Ql4CgYFVbLfb+1u o1EPLFCqCsr0iYYO9mWJc55iohtpucj+alIewjuWzFV6LPOMxK5ER43vNtf1a7Ks UVp4rTjST5KEPXyey7Rp/aRPtJkK2Pr2PCOSVHzVgmTT3Y1Fa7Q= =Hc+k -----END PGP SIGNATURE----- Merge 5.10.19 into android-5.10 Changes in 5.10.19 bpf: Fix truncation handling for mod32 dst reg wrt zero HID: make arrays usage and value to be the same RDMA: Lift ibdev_to_node from rds to common code nvme-rdma: Use ibdev_to_node instead of dereferencing ->dma_device USB: quirks: sort quirk entries usb: quirks: add quirk to start video capture on ELMO L-12F document camera reliable ceph: downgrade warning from mdsmap decode to debug ntfs: check for valid standard information attribute Bluetooth: btusb: Some Qualcomm Bluetooth adapters stop working arm64: tegra: Add power-domain for Tegra210 HDA hwmon: (dell-smm) Add XPS 15 L502X to fan control blacklist KVM: x86: Zap the oldest MMU pages, not the newest mm: unexport follow_pte_pmd mm: simplify follow_pte{,pmd} KVM: do not assume PTE is writable after follow_pfn mm: provide a saner PTE walking API for modules KVM: Use kvm_pfn_t for local PFN variable in hva_to_pfn_remapped() drm/xlnx: fix kmemleak by sending vblank_event in atomic_disable NET: usb: qmi_wwan: Adding support for Cinterion MV31 cxgb4: Add new T6 PCI device id 0x6092 cifs: Set CIFS_MOUNT_USE_PREFIX_PATH flag on setting cifs_sb->prepath. kbuild: fix CONFIG_TRIM_UNUSED_KSYMS build for ppc64 scripts/recordmcount.pl: support big endian for ARCH sh Linux 5.10.19 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: Ie460e26abc91311bcdd6b8484f5b42a7ffe1058f
This commit is contained in:
commit
e1a763aea5
4
Makefile
4
Makefile
@ -1,9 +1,9 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 18
|
||||
SUBLEVEL = 19
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
NAME = Dare mighty things
|
||||
|
||||
# *DOCUMENTATION*
|
||||
# To see a list of typical targets execute "make help"
|
||||
|
@ -997,6 +997,7 @@ hda@70030000 {
|
||||
<&tegra_car 128>, /* hda2hdmi */
|
||||
<&tegra_car 111>; /* hda2codec_2x */
|
||||
reset-names = "hda", "hda2hdmi", "hda2codec_2x";
|
||||
power-domains = <&pd_sor>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -2409,7 +2409,7 @@ static unsigned long kvm_mmu_zap_oldest_mmu_pages(struct kvm *kvm,
|
||||
return 0;
|
||||
|
||||
restart:
|
||||
list_for_each_entry_safe(sp, tmp, &kvm->arch.active_mmu_pages, link) {
|
||||
list_for_each_entry_safe_reverse(sp, tmp, &kvm->arch.active_mmu_pages, link) {
|
||||
/*
|
||||
* Don't zap active root pages, the page itself can't be freed
|
||||
* and zapping it will just force vCPUs to realloc and reload.
|
||||
|
@ -3689,6 +3689,13 @@ static int btusb_setup_qca(struct hci_dev *hdev)
|
||||
info = &qca_devices_table[i];
|
||||
}
|
||||
if (!info) {
|
||||
/* If the rom_version is not matched in the qca_devices_table
|
||||
* and the high ROM version is not zero, we assume this chip no
|
||||
* need to load the rampatch and nvm.
|
||||
*/
|
||||
if (ver_rom & ~0xffffU)
|
||||
return 0;
|
||||
|
||||
bt_dev_err(hdev, "don't support firmware rome 0x%x", ver_rom);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -1398,19 +1398,11 @@ static void zynqmp_disp_enable(struct zynqmp_disp *disp)
|
||||
*/
|
||||
static void zynqmp_disp_disable(struct zynqmp_disp *disp)
|
||||
{
|
||||
struct drm_crtc *crtc = &disp->crtc;
|
||||
|
||||
zynqmp_disp_audio_disable(&disp->audio);
|
||||
|
||||
zynqmp_disp_avbuf_disable_audio(&disp->avbuf);
|
||||
zynqmp_disp_avbuf_disable_channels(&disp->avbuf);
|
||||
zynqmp_disp_avbuf_disable(&disp->avbuf);
|
||||
|
||||
/* Mark the flip is done as crtc is disabled anyway */
|
||||
if (crtc->state->event) {
|
||||
complete_all(crtc->state->event->base.completion);
|
||||
crtc->state->event = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct zynqmp_disp *crtc_to_disp(struct drm_crtc *crtc)
|
||||
@ -1499,6 +1491,13 @@ zynqmp_disp_crtc_atomic_disable(struct drm_crtc *crtc,
|
||||
|
||||
drm_crtc_vblank_off(&disp->crtc);
|
||||
|
||||
spin_lock_irq(&crtc->dev->event_lock);
|
||||
if (crtc->state->event) {
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
crtc->state->event = NULL;
|
||||
}
|
||||
spin_unlock_irq(&crtc->dev->event_lock);
|
||||
|
||||
clk_disable_unprepare(disp->pclk);
|
||||
pm_runtime_put_sync(disp->dev);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -1159,6 +1159,13 @@ static struct dmi_system_id i8k_blacklist_fan_support_dmi_table[] __initdata = {
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "XPS13 9333"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Dell XPS 15 L502X",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Dell System XPS L502X"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -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__ */
|
||||
|
@ -1332,6 +1332,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 */
|
||||
|
@ -860,7 +860,7 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl,
|
||||
return error;
|
||||
|
||||
ctrl->device = ctrl->queues[0].device;
|
||||
ctrl->ctrl.numa_node = dev_to_node(ctrl->device->dev->dma_device);
|
||||
ctrl->ctrl.numa_node = ibdev_to_node(ctrl->device->dev);
|
||||
|
||||
/* T10-PI support */
|
||||
if (ctrl->device->dev->attrs.device_cap_flags &
|
||||
|
@ -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 */
|
||||
};
|
||||
|
||||
|
@ -243,8 +243,8 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
|
||||
}
|
||||
|
||||
if (state <= 0) {
|
||||
pr_warn("mdsmap_decode got incorrect state(%s)\n",
|
||||
ceph_mds_state_name(state));
|
||||
dout("mdsmap_decode got incorrect state(%s)\n",
|
||||
ceph_mds_state_name(state));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -4007,6 +4007,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;
|
||||
|
10
fs/dax.c
10
fs/dax.c
@ -810,12 +810,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;
|
||||
|
||||
/*
|
||||
|
@ -629,6 +629,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));
|
||||
|
||||
|
@ -1705,9 +1705,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 vm_area_struct *dst_vma, struct vm_area_struct *src_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,
|
||||
|
@ -4642,6 +4642,19 @@ static inline struct ib_device *rdma_device_to_ibdev(struct device *device)
|
||||
return coredev->owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* ibdev_to_node - return the NUMA node for a given ib_device
|
||||
* @dev: device to get the NUMA node for.
|
||||
*/
|
||||
static inline int ibdev_to_node(struct ib_device *ibdev)
|
||||
{
|
||||
struct device *parent = ibdev->dev.parent;
|
||||
|
||||
if (!parent)
|
||||
return NUMA_NO_NODE;
|
||||
return dev_to_node(parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* rdma_device_to_drv_device - Helper macro to reach back to driver's
|
||||
* ib_device holder structure from device pointer.
|
||||
|
@ -10869,7 +10869,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),
|
||||
@ -10878,16 +10878,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)
|
||||
|
57
mm/memory.c
57
mm/memory.c
@ -5146,9 +5146,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;
|
||||
@ -5213,31 +5213,33 @@ static int __follow_pte_pmd(struct mm_struct *mm, unsigned long address,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int follow_pte(struct mm_struct *mm, unsigned long address,
|
||||
pte_t **ptepp, 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, NULL,
|
||||
ptepp, NULL, ptlp)));
|
||||
return res;
|
||||
return follow_invalidate_pte(mm, address, NULL, ptepp, NULL, ptlp);
|
||||
}
|
||||
|
||||
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 res;
|
||||
|
||||
/* (void) is needed to make gcc happy */
|
||||
(void) __cond_lock(*ptlp,
|
||||
!(res = __follow_pte_pmd(mm, address, range,
|
||||
ptepp, pmdpp, ptlp)));
|
||||
return res;
|
||||
}
|
||||
EXPORT_SYMBOL(follow_pte_pmd);
|
||||
EXPORT_SYMBOL_GPL(follow_pte);
|
||||
|
||||
/**
|
||||
* follow_pfn - look up PFN at a user virtual address
|
||||
@ -5247,6 +5249,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,
|
||||
|
@ -264,13 +264,6 @@ struct rds_ib_device {
|
||||
int *vector_load;
|
||||
};
|
||||
|
||||
static inline int ibdev_to_node(struct ib_device *ibdev)
|
||||
{
|
||||
struct device *parent;
|
||||
|
||||
parent = ibdev->dev.parent;
|
||||
return parent ? dev_to_node(parent) : NUMA_NO_NODE;
|
||||
}
|
||||
#define rdsibdev_to_node(rdsibdev) ibdev_to_node(rdsibdev->dev)
|
||||
|
||||
/* bits for i_ack_flags */
|
||||
|
@ -43,6 +43,9 @@ EOT
|
||||
sed 's/ko$/mod/' $modlist |
|
||||
xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
|
||||
cat - "$ksym_wl" |
|
||||
# Remove the dot prefix for ppc64; symbol names with a dot (.) hold entry
|
||||
# point addresses.
|
||||
sed -e 's/^\.//' |
|
||||
sort -u |
|
||||
sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
|
||||
|
||||
|
@ -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;
|
||||
|
@ -1888,10 +1888,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
|
||||
@ -1906,14 +1908,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
|
||||
@ -1928,6 +1935,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