Linux 4.19.197
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.197 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/dra7.dtsi | 11 ++ arch/arm/boot/dts/imx6qdl-sabresd.dtsi | 4 arch/arm/mach-omap1/pm.c | 13 +- arch/arm/mach-omap1/time.c | 10 - arch/arm/mach-omap1/timer32k.c | 10 - arch/arm/mach-omap2/board-generic.c | 4 arch/arm/mach-omap2/timer.c | 181 ++++++++++++++++++++++----------- arch/x86/kvm/svm.c | 33 ++++-- drivers/clk/ti/clk-7xx.c | 1 drivers/gpu/drm/nouveau/nouveau_bo.c | 4 drivers/scsi/sr.c | 2 drivers/xen/events/events_base.c | 23 +++- fs/ext4/block_validity.c | 4 include/linux/cpuhotplug.h | 1 include/linux/huge_mm.h | 8 + include/linux/hugetlb.h | 16 -- include/linux/mm.h | 3 include/linux/mmdebug.h | 13 ++ include/linux/pagemap.h | 13 +- include/linux/rmap.h | 3 kernel/futex.c | 2 kernel/kthread.c | 77 +++++++++----- mm/huge_memory.c | 56 +++++----- mm/hugetlb.c | 5 mm/internal.h | 53 +++++++-- mm/memory.c | 41 +++++++ mm/page_vma_mapped.c | 160 ++++++++++++++++++----------- mm/pgtable-generic.c | 4 mm/rmap.c | 48 +++++--- mm/truncate.c | 43 +++---- 31 files changed, 545 insertions(+), 303 deletions(-)
Alex Shi (1):
mm: add VM_WARN_ON_ONCE_PAGE() macro
Alper Gun (1):
KVM: SVM: Call SEV Guest Decommission if ASID binding fails
Anson Huang (1):
ARM: dts: imx6qdl-sabresd: Remove incorrect power supply assignment
Christian König (1):
drm/nouveau: fix dma_address check for CPU/GPU sync
David Rientjes (1):
KVM: SVM: Periodically schedule when unregistering regions on destroy
Greg Kroah-Hartman (1):
Linux 4.19.197
Hugh Dickins (16):
mm/thp: fix __split_huge_pmd_locked() on shmem migration entry mm/thp: make is_huge_zero_pmd() safe and quicker mm/thp: try_to_unmap() use TTU_SYNC for safe splitting mm/thp: fix vma_address() if virtual address below file offset mm/thp: unmap_mapping_page() to fix THP truncate_cleanup_page()
mm: page_vma_mapped_walk(): use page for pvmw->page
mm: page_vma_mapped_walk(): settle PageHuge on entry
mm: page_vma_mapped_walk(): use pmde for *pvmw->pmd
mm: page_vma_mapped_walk(): prettify PVMW_MIGRATION block
mm: page_vma_mapped_walk(): crossing page table boundary
mm: page_vma_mapped_walk(): add a level of indentation
mm: page_vma_mapped_walk(): use goto instead of while (1)
mm: page_vma_mapped_walk(): get vma_address_end() earlier mm/thp: fix page_vma_mapped_walk() if THP mapped by ptes mm/thp: another PVMW_SYNC fix in page_vma_mapped_walk() mm, futex: fix shared futex pgoff on shmem huge page
Jue Wang (1):
mm/thp: fix page_address_in_vma() on file THP tails
Juergen Gross (1):
xen/events: reset active flag for lateeoi events later
ManYi Li (1):
scsi: sr: Return appropriate error code when disk is ejected
Miaohe Lin (2):
mm/rmap: remove unneeded semicolon in page_not_mapped() mm/rmap: use page_not_mapped in try_to_unmap()
Petr Mladek (2):
kthread_worker: split code for canceling the delayed work timer
kthread: prevent deadlock when kthread_mod_delayed_work() races with kthread_cancel_delayed_work_sync()
Tahsin Erdogan (1):
ext4: eliminate bogus error in ext4_data_block_valid_rcu()
Tony Lindgren (3):
clocksource/drivers/timer-ti-dm: Add clockevent and clocksource support clocksource/drivers/timer-ti-dm: Prepare to handle dra7 timer wrap issue clocksource/drivers/timer-ti-dm: Handle dra7 timer wrap errata i940
Yang Shi (1):
mm: thp: replace DEBUG_VM BUG with VM_WARN when unmap fails for split
afzal mohammed (1):
ARM: OMAP: replace setup_irq() by request_irq()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 196 +SUBLEVEL = 197 EXTRAVERSION = NAME = "People's Front"
arch/arm/boot/dts/dra7.dtsi +11 -0
@@ -48,6 +48,7 @@ timer { compatible = "arm,armv7-timer"; + status = "disabled"; /* See ARM architected timer wrap erratum i940 */ interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>, <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
@@ -910,6 +911,8 @@ reg = <0x48032000 0x80>; interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; ti,hwmods = "timer2"; + clock-names = "fck"; + clocks = <&l4per_clkctrl DRA7_TIMER2_CLKCTRL 24>; }; timer3: timer@48034000 {
@@ -917,6 +920,10 @@ reg = <0x48034000 0x80>; interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; ti,hwmods = "timer3"; + clock-names = "fck"; + clocks = <&l4per_clkctrl DRA7_TIMER3_CLKCTRL 24>; + assigned-clocks = <&l4per_clkctrl DRA7_TIMER3_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; }; timer4: timer@48036000 {
@@ -924,6 +931,10 @@ reg = <0x48036000 0x80>; interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; ti,hwmods = "timer4"; + clock-names = "fck"; + clocks = <&l4per_clkctrl DRA7_TIMER4_CLKCTRL 24>; + assigned-clocks = <&l4per_clkctrl DRA7_TIMER4_CLKCTRL 24>; + assigned-clock-parents = <&timer_sys_clk_div>; }; timer5: timer@48820000 {
arch/arm/boot/dts/imx6qdl-sabresd.dtsi +0 -4
@@ -675,10 +675,6 @@ vin-supply = <&vgen5_reg>; }; -®_vdd3p0 { - vin-supply = <&sw2_reg>; -}; - ®_vdd2p5 { vin-supply = <&vgen5_reg>; };
arch/arm/mach-omap1/pm.c +6 -7
@@ -610,11 +610,6 @@ static irqreturn_t omap_wakeup_interrupt(int irq, void *dev)return IRQ_HANDLED ; } -static struct irqaction omap_wakeup_irq = { - .name ="peripheral wakeup" , - .handler = omap_wakeup_interrupt -}; -static const struct platform_suspend_ops omap_pm_ops = {
@@ -627,6 +622,7 @@ static const struct platform_suspend_ops omap_pm_ops = {static int __init omap_pm_init (void ) {int error =0 ; +int irq;if (!cpu_class_is_omap1 ())return -ENODEV ;
@@ -670,9 +666,12 @@ static int __init omap_pm_init(void) arm_pm_idle = omap1_pm_idle;if (cpu_is_omap7xx ()) -setup_irq (INT_7XX_WAKE_UP_REQ , &omap_wakeup_irq); + irq =INT_7XX_WAKE_UP_REQ ;else if (cpu_is_omap16xx ()) -setup_irq (INT_1610_WAKE_UP_REQ , &omap_wakeup_irq); + irq =INT_1610_WAKE_UP_REQ ; +if (request_irq (irq, omap_wakeup_interrupt,0 ,"peripheral wakeup" , +NULL )) +pr_err ("Failed to request irq %d (peripheral wakeup)\n" , irq);/* Program new power ramp-up time * (0 for most boards since we don't lower voltage when in deep sleep)
arch/arm/mach-omap1/time.c +3 -7
@@ -155,15 +155,11 @@ static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static struct irqaction omap_mpu_timer1_irq = { - .name ="mpu_timer1" , - .flags =IRQF_TIMER |IRQF_IRQPOLL , - .handler = omap_mpu_timer1_interrupt, -}; -static __init void omap_init_mpu_timer (unsigned long rate) { -setup_irq (INT_TIMER1 , &omap_mpu_timer1_irq); +if (request_irq (INT_TIMER1 , omap_mpu_timer1_interrupt, +IRQF_TIMER |IRQF_IRQPOLL ,"mpu_timer1" ,NULL )) +pr_err ("Failed to request irq %d (mpu_timer1)\n" ,INT_TIMER1 );omap_mpu_timer_start (0 , (rate /HZ ) -1 ,1 ); clockevent_mpu_timer1.cpumask =cpumask_of (0 );
arch/arm/mach-omap1/timer32k.c +3 -7
@@ -148,15 +148,11 @@ static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -static struct irqaction omap_32k_timer_irq = { - .name ="32KHz timer" , - .flags =IRQF_TIMER |IRQF_IRQPOLL , - .handler = omap_32k_timer_interrupt, -}; -static __init void omap_init_32k_timer (void ) { -setup_irq (INT_OS_TIMER , &omap_32k_timer_irq); +if (request_irq (INT_OS_TIMER , omap_32k_timer_interrupt, +IRQF_TIMER |IRQF_IRQPOLL ,"32KHz timer" ,NULL )) +pr_err ("Failed to request irq %d(32KHz timer)\n" ,INT_OS_TIMER ); clockevent_32k_timer.cpumask =cpumask_of (0 ); clockevents_config_and_register(&clockevent_32k_timer,
arch/arm/mach-omap2/board-generic.c +2 -2
@@ -330,7 +330,7 @@ DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)") .init_late = dra7xx_init_late, .init_irq = omap_gic_of_init, .init_machine = omap_generic_init, - .init_time = omap5_realtime_timer_init, + .init_time = omap3_gptimer_timer_init, .dt_compat = dra74x_boards_compat, .restart = omap44xx_restart,MACHINE_END
@@ -353,7 +353,7 @@ DT_MACHINE_START(DRA72X_DT, "Generic DRA72X (Flattened Device Tree)") .init_late = dra7xx_init_late, .init_irq = omap_gic_of_init, .init_machine = omap_generic_init, - .init_time = omap5_realtime_timer_init, + .init_time = omap3_gptimer_timer_init, .dt_compat = dra72x_boards_compat, .restart = omap44xx_restart,MACHINE_END
arch/arm/mach-omap2/timer.c +126 -55
279 lines not on this page · raw message
arch/x86/kvm/svm.c +22 -11
@@ -1791,9 +1791,25 @@ static void sev_asid_free(struct kvm *kvm)__sev_asid_free (sev->asid); } -static void sev_unbind_asid (struct kvm *kvm,unsigned int handle) +static void sev_decommission (unsigned int handle) {struct sev_data_decommission *decommission; + +if (!handle) +return ; + + decommission =kzalloc (sizeof (*decommission),GFP_KERNEL ); +if (!decommission) +return ; + + decommission->handle = handle; +sev_guest_decommission (decommission,NULL ); + +kfree (decommission); +} + +static void sev_unbind_asid (struct kvm *kvm,unsigned int handle) +{struct sev_data_deactivate *data;if (!handle)
@@ -1811,15 +1827,7 @@ static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)sev_guest_df_flush (NULL );kfree (data); - decommission =kzalloc (sizeof (*decommission),GFP_KERNEL ); -if (!decommission) -return ; - -/* decommission handle */ - decommission->handle = handle; -sev_guest_decommission (decommission,NULL ); - -kfree (decommission); +sev_decommission (handle); } static struct page **sev_pin_memory(struct kvm *kvm, unsigned long uaddr,
@@ -1954,6 +1962,7 @@ static void sev_vm_destroy(struct kvm *kvm)list_for_each_safe (pos, q, head) {__unregister_enc_region_locked (kvm, list_entry(pos, struct enc_region, list)); +cond_resched (); } }
@@ -6468,8 +6477,10 @@ static int sev_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)/* Bind ASID to this guest */ ret =sev_bind_asid (kvm, start->handle, error); -if (ret) +if (ret) { +sev_decommission (start->handle); goto e_free_session; + }/* return handle to userspace */ params.handle = start->handle;
drivers/clk/ti/clk-7xx.c +1 -0
@@ -733,6 +733,7 @@ const struct omap_clkctrl_data dra7_clkctrl_data[] __initconst = {static struct ti_dt_clk dra7xx_clks[] = {DT_CLK (NULL ,"timer_32k_ck" ,"sys_32k_ck" ),DT_CLK (NULL ,"sys_clkin_ck" ,"timer_sys_clk_div" ), +DT_CLK (NULL ,"timer_sys_ck" ,"timer_sys_clk_div" ),DT_CLK (NULL ,"sys_clkin" ,"sys_clkin1" ),DT_CLK (NULL ,"atl_dpll_clk_mux" ,"atl_cm:0000:24" ),DT_CLK (NULL ,"atl_gfclk_mux" ,"atl_cm:0000:26" ),
drivers/gpu/drm/nouveau/nouveau_bo.c +2 -2
@@ -512,7 +512,7 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;int i; -if (!ttm_dma) +if (!ttm_dma || !ttm_dma->dma_address)return ;/* Don't waste time looping if the object is coherent */
@@ -532,7 +532,7 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)struct ttm_dma_tt *ttm_dma = (struct ttm_dma_tt *)nvbo->bo.ttm;int i; -if (!ttm_dma) +if (!ttm_dma || !ttm_dma->dma_address)return ;/* Don't waste time looping if the object is coherent */
drivers/scsi/sr.c +2 -0
@@ -216,6 +216,8 @@ static unsigned int sr_get_events(struct scsi_device *sdev)return DISK_EVENT_EJECT_REQUEST ; else if (med->media_event_code == 2) return DISK_EVENT_MEDIA_CHANGE; + else if (med->media_event_code == 3) + return DISK_EVENT_EJECT_REQUEST;return 0 ; }
drivers/xen/events/events_base.c +19 -4
@@ -524,6 +524,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious) } info->eoi_time =0 ; + +/* is_active hasn't been reset yet, do it now. */ +smp_store_release (&info->is_active,0 );do_unmask (info,EVT_MASK_REASON_EOI_PENDING ); }
@@ -1780,10 +1783,22 @@ static void lateeoi_ack_dynirq(struct irq_data *data)struct irq_info *info =info_for_irq (data->irq);evtchn_port_t evtchn = info ? info->evtchn :0 ; -if (VALID_EVTCHN (evtchn)) { -do_mask (info,EVT_MASK_REASON_EOI_PENDING ); -ack_dynirq (data); - } +if (!VALID_EVTCHN (evtchn)) +return ; + +do_mask (info,EVT_MASK_REASON_EOI_PENDING ); + +if (unlikely (irqd_is_setaffinity_pending (data)) && +likely (!irqd_irq_disabled (data))) { +do_mask (info,EVT_MASK_REASON_TEMPORARY ); + +clear_evtchn (evtchn); + +irq_move_masked_irq (data); + +do_unmask (info,EVT_MASK_REASON_TEMPORARY ); + }else +clear_evtchn (evtchn); }static void lateeoi_mask_ack_dynirq (struct irq_data *data)
fs/ext4/block_validity.c +3 -1
@@ -171,8 +171,10 @@ static int ext4_data_block_valid_rcu(struct ext4_sb_info *sbi,else if (start_blk >= (entry->start_blk + entry->count)) n = n->rb_right;else { +if (entry->ino == ino) +return 1 ; sbi->s_es->s_last_error_block =cpu_to_le64 (start_blk); -return entry->ino == ino; +return 0 ; } }return 1 ;
include/linux/cpuhotplug.h +1 -0
@@ -118,6 +118,7 @@ enum cpuhp_state {CPUHP_AP_ARM_L2X0_STARTING ,CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING ,CPUHP_AP_ARM_ARCH_TIMER_STARTING , +CPUHP_AP_OMAP_DM_TIMER_STARTING ,CPUHP_AP_ARM_GLOBAL_TIMER_STARTING ,CPUHP_AP_JCORE_TIMER_STARTING , CPUHP_AP_ARM_TWD_STARTING,
include/linux/huge_mm.h +7 -1
@@ -224,6 +224,7 @@ struct page *follow_devmap_pud(struct vm_area_struct *vma, unsigned long addr,extern vm_fault_t do_huge_pmd_numa_page (struct vm_fault *vmf,pmd_t orig_pmd);extern struct page *huge_zero_page; +extern unsigned long huge_zero_pfn;static inline bool is_huge_zero_page (struct page *page) {
@@ -232,7 +233,7 @@ static inline bool is_huge_zero_page(struct page *page)static inline bool is_huge_zero_pmd (pmd_t pmd) { -return is_huge_zero_page (pmd_page (pmd)); +return READ_ONCE (huge_zero_pfn) ==pmd_pfn (pmd) &&pmd_present (pmd); }static inline bool is_huge_zero_pud (pud_t pud)
@@ -342,6 +343,11 @@ static inline bool is_huge_zero_page(struct page *page)return false; } +static inline bool is_huge_zero_pmd (pmd_t pmd) +{ +return false; +} +static inline bool is_huge_zero_pud (pud_t pud) {return false;
include/linux/hugetlb.h +0 -16
@@ -477,17 +477,6 @@ static inline int hstate_index(struct hstate *h)return h - hstates; } -pgoff_t __basepage_index (struct page *page); - -/* Return page->index in PAGE_SIZE units */ -static inline pgoff_t basepage_index (struct page *page) -{ -if (!PageCompound (page)) -return page->index; - -return __basepage_index (page); -} -extern int dissolve_free_huge_page (struct page *page);extern int dissolve_free_huge_pages (unsigned long start_pfn,unsigned long end_pfn);
@@ -582,11 +571,6 @@ static inline int hstate_index(struct hstate *h)return 0 ; } -static inline pgoff_t basepage_index (struct page *page) -{ -return page->index; -} -static inline int dissolve_free_huge_page (struct page *page) {return 0 ;
include/linux/mm.h +3 -0
@@ -1338,6 +1338,7 @@ struct zap_details {struct address_space *check_mapping;/* Check page->mapping if set */ pgoff_t first_index;/* Lowest page->index to unmap */ pgoff_t last_index;/* Highest page->index to unmap */ +struct page *single_page;/* Locked page to be unmapped */ }; struct page *_vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
@@ -1428,6 +1429,7 @@ extern vm_fault_t handle_mm_fault(struct vm_area_struct *vma,extern int fixup_user_fault (struct task_struct *tsk,struct mm_struct *mm,unsigned long address,unsigned int fault_flags,bool *unlocked); +void unmap_mapping_page (struct page *page);void unmap_mapping_pages (struct address_space *mapping,pgoff_t start,pgoff_t nr,bool even_cows); void unmap_mapping_range(struct address_space *mapping,
@@ -1448,6 +1450,7 @@ static inline int fixup_user_fault(struct task_struct *tsk,BUG ();return -EFAULT ; } +static inline void unmap_mapping_page (struct page *page) { }static inline void unmap_mapping_pages (struct address_space *mapping,pgoff_t start,pgoff_t nr,bool even_cows) { } static inline void unmap_mapping_range(struct address_space *mapping,
include/linux/mmdebug.h +13 -0
@@ -37,6 +37,18 @@ void dump_mm(const struct mm_struct *mm);BUG (); \ } \ } while (0) +#define VM_WARN_ON_ONCE_PAGE (cond, page) ({ \ + static bool __section(".data.once") __warned; \ + int __ret_warn_once = !!(cond); \ + \ + if (unlikely(__ret_warn_once && !__warned)) { \ + dump_page(page, "VM_WARN_ON_ONCE_PAGE(" __stringify(cond)")");\ + __warned = true; \ + WARN_ON(1); \ + } \ + unlikely(__ret_warn_once); \ +}) +#define VM_WARN_ON (cond) (void)WARN_ON(cond)#define VM_WARN_ON_ONCE (cond) (void)WARN_ON_ONCE(cond) #define VM_WARN_ONCE(cond, format...) (void)WARN_ONCE(cond, format)
@@ -48,6 +60,7 @@ void dump_mm(const struct mm_struct *mm);#define VM_BUG_ON_MM (cond, mm) VM_BUG_ON(cond)#define VM_WARN_ON (cond) BUILD_BUG_ON_INVALID(cond)#define VM_WARN_ON_ONCE (cond) BUILD_BUG_ON_INVALID(cond) +#define VM_WARN_ON_ONCE_PAGE (cond, page) BUILD_BUG_ON_INVALID(cond) #define VM_WARN_ONCE(cond, format...) BUILD_BUG_ON_INVALID(cond) #define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond)#endif
include/linux/pagemap.h +7 -6
@@ -403,7 +403,7 @@ static inline struct page *read_mapping_page(struct address_space *mapping, }/* -* Get index of the page with in radix-tree +* Get index of the page within radix-tree (but not for hugetlb pages). * (TODO: remove once hugetlb pages will have ->index in PAGE_SIZE) */ static inline pgoff_t page_to_index (struct page *page)
@@ -422,15 +422,16 @@ static inline pgoff_t page_to_index(struct page *page)return pgoff; } +extern pgoff_t hugetlb_basepage_index (struct page *page); +/* -* Get the offset in PAGE_SIZE. -* (TODO: hugepage should have ->index in PAGE_SIZE) +* Get the offset in PAGE_SIZE (even for hugetlb pages). +* (TODO: hugetlb pages should have ->index in PAGE_SIZE) */ static inline pgoff_t page_to_pgoff (struct page *page) { -if (unlikely (PageHeadHuge (page))) -return page->index <<compound_order (page); - +if (unlikely (PageHuge (page))) +return hugetlb_basepage_index (page);return page_to_index (page); }
include/linux/rmap.h +2 -1
@@ -98,7 +98,8 @@ enum ttu_flags {* do a final flush if necessary */ TTU_RMAP_LOCKED =0x80 ,/* do not grab rmap lock: * caller holds it */ - TTU_SPLIT_FREEZE = 0x100, /* freeze pte under splitting thp */ +TTU_SPLIT_FREEZE =0x100 ,/* freeze pte under splitting thp */ + TTU_SYNC = 0x200, /* avoid racy checks with PVMW_SYNC */ };#ifdef CONFIG_MMU
kernel/futex.c +1 -1
@@ -719,7 +719,7 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw) key->both.offset |=FUT_OFF_INODE ;/* inode-based key */ key->shared.i_seq =get_inode_sequence_number (inode); - key->shared.pgoff =basepage_index (tail); + key->shared.pgoff =page_to_pgoff (tail);rcu_read_unlock (); }
kernel/kthread.c +51 -26
105 lines not on this page · raw message
mm/huge_memory.c +29 -27
125 lines not on this page · raw message
mm/hugetlb.c +1 -4
@@ -1391,15 +1391,12 @@ int PageHeadHuge(struct page *page_head)return get_compound_page_dtor (page_head) == free_huge_page; } -pgoff_t __basepage_index (struct page *page) +pgoff_t hugetlb_basepage_index (struct page *page) {struct page *page_head =compound_head (page);pgoff_t index =page_index (page_head);unsigned long compound_idx; -if (!PageHuge (page_head)) -return page_index (page); -if (compound_order (page_head) >=MAX_ORDER ) compound_idx =page_to_pfn (page) -page_to_pfn (page_head);else
mm/internal.h +39 -14
66 lines not on this page · raw message
mm/memory.c +41 -0
54 lines not on this page · raw message
mm/page_vma_mapped.c +99 -61
220 lines not on this page · raw message
mm/pgtable-generic.c +2 -2
@@ -125,8 +125,8 @@ pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma, unsigned long address, {pmd_t pmd;VM_BUG_ON (address & ~HPAGE_PMD_MASK ); -VM_BUG_ON ((pmd_present (*pmdp) && !pmd_trans_huge (*pmdp) && - !pmd_devmap (*pmdp)) || !pmd_present (*pmdp)); +VM_BUG_ON (pmd_present (*pmdp) && !pmd_trans_huge (*pmdp) && + !pmd_devmap (*pmdp)); pmd =pmdp_huge_get_and_clear (vma->vm_mm, address, pmdp);flush_pmd_tlb_range (vma, address, address +HPAGE_PMD_SIZE );return pmd;
mm/rmap.c +29 -19
113 lines not on this page · raw message
mm/truncate.c +19 -24
75 lines not on this page · raw message