The patch titled alloc_pages(): permit get_zeroed_page(GFP_ATOMIC) from interrupt context has been added to the -mm tree. Its filename is alloc_pages-permit-get_zeroed_pagegfp_atomic-from-interrupt-context.patch *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: alloc_pages(): permit get_zeroed_page(GFP_ATOMIC) from interrupt context From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> See http://bugzilla.kernel.org/show_bug.cgi?id=8928 I think it makes sense to permit a non-BUGging get_zeroed_page(GFP_ATOMIC) from interrupt context. We could fix this in several places, but I do think we want to keep the sanity checks in kmap_atomic() even for non-highmem pages, so that people who are testing new code on non-highmem machines get their bugs detected earlier. Cc: Thomas Jarosch <thomas.jarosch@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/page_alloc.c | 26 +++++++++++++++++++------- 1 files changed, 19 insertions(+), 7 deletions(-) diff -puN mm/page_alloc.c~alloc_pages-permit-get_zeroed_pagegfp_atomic-from-interrupt-context mm/page_alloc.c --- a/mm/page_alloc.c~alloc_pages-permit-get_zeroed_pagegfp_atomic-from-interrupt-context +++ a/mm/page_alloc.c @@ -284,13 +284,25 @@ static inline void prep_zero_page(struct int i; VM_BUG_ON((gfp_flags & (__GFP_WAIT | __GFP_HIGHMEM)) == __GFP_HIGHMEM); - /* - * clear_highpage() will use KM_USER0, so it's a bug to use __GFP_ZERO - * and __GFP_HIGHMEM from hard or soft interrupt context. - */ - VM_BUG_ON((gfp_flags & __GFP_HIGHMEM) && in_interrupt()); - for (i = 0; i < (1 << order); i++) - clear_highpage(page + i); + if (gfp_flags & __GFP_HIGHMEM) { + /* + * clear_highpage() will use KM_USER0, so it's a bug to use + * __GFP_ZERO and __GFP_HIGHMEM from hard or soft interrupt + * context. + */ + VM_BUG_ON(in_interrupt()); + for (i = 0; i < (1 << order); i++) + clear_highpage(page + i); + } else { + /* + * Go direct to clear_page(), because the caller might be + * performing a non-highmem GFP_ZERO allocation from interrupt + * context. kmap_atomic() will go BUG when that happens, but it + * is a legitimate thing to do + */ + for (i = 0; i < (1 << order); i++) + clear_page(page + i); + } } /* _ Patches currently in -mm which might be from akpm@xxxxxxxxxxxxxxxxxxxx are origin.patch revert-ecryptfs-fix-lookup-error-for-special-files.patch sparsemem-ensure-we-initialise-the-node-mapping-for-sparsemem_static.patch serial-8250-handle-saving-the-clear-on-read-bits-from-the-lsr.patch add-blacklisting-capability-to-serial_pci-to-avoid-misdetection.patch free_irq-fix-debug_shirq-handling.patch selectionh-add-tty_struct-forward-declaration.patch newport_con-warning-fix.patch process_zones-fix-recovery-code.patch remove-bdput-from-do_open-in-fs-block_devc.patch slow-down-printk-during-boot.patch slow-down-printk-during-boot-fix-2.patch git-acpi.patch acpi-add-reboot-mechanism.patch git-alsa.patch working-3d-dri-intel-agpko-resume-for-i815-chip.patch revert-gregkh-driver-block-device.patch git-dma.patch git-dma-makefile-fix.patch disable-ioat.patch git-dvb.patch git-dvb-fixup-2.patch infiniband-work-around-gcc-slub-problem.patch adbhid-produce-all-capslock-key-events.patch iforce-warning-fix.patch console-keyboard-events-and-accessibility-fix.patch console-keyboard-events-and-accessibility-fix-2.patch git-kvm.patch git-libata-all.patch ide-arm-hack.patch git-mmc-fixup.patch gregkh-driver-driver-core-change-add_uevent_var-to-use-a-struct-vs-git-mmc.patch git-mtd.patch git-mtd-fix-printk-warning-in-jffs2_block_check_erase.patch mtdoops-printk-warning-fixes.patch git-netdev-all.patch e1000e-build-fix.patch revert-8139too-clean-up-i-o-remapping.patch git-net.patch git-backlight.patch git-nfs-vs-git-unionfs.patch git-nfsd.patch revert-gregkh-pci-pci_bridge-device.patch i386-add-support-for-picopower-irq-router.patch pci-remove-irritating-try-pci=assign-busses-warning.patch git-scsi-misc.patch advansys-printk-fix.patch git-block-fixup.patch git-block-fix-headers_check.patch git-unionfs.patch git-unionfs-build-fix.patch git-unionfs-fix-2.patch fix-gregkh-usb-usb-sisusb2vga-convert-printk-to-dev_-macros.patch git-watchdog.patch git-wireless.patch git-wireless-fixup.patch git-wireless-vs-gregkh-driver-driver-core-change-add_uevent_var-to-use-a-struct.patch git-wireless-printk-fixes.patch net-add-ath5k-wireless-driver-fix.patch ath5k-printk-fix.patch ath5k-kconfig-fix.patch ath5k-needs-pci.patch revert-x86_64-mm-less-stack-alignment.patch x86_64-dynticks-disable-hpet_id_legsup-hpets.patch x86_64-get-mp_bus_to_node-as-early-v3.patch git-xfs.patch git-kgdb-fixup.patch pci-align-bar-settings-for-legacy-mode-ide.patch vmscan-give-referenced-active-and-unmapped-pages-a-second-trip-around-the-lru.patch sparsemem-record-when-a-section-has-a-valid-mem_map-fix.patch readahead-combine-file_ra_stateprev_index-prev_offset-into-prev_pos-fix.patch readahead-combine-file_ra_stateprev_index-prev_offset-into-prev_pos-fix-2.patch vm-dont-run-touch_buffer-during-buffercache-lookups.patch alloc_pages-permit-get_zeroed_pagegfp_atomic-from-interrupt-context.patch fs-introduce-write_begin-write_end-and-perform_write-aops.patch git-nfs-vs-nfs-convert-to-new-aops.patch memoryless-nodes-introduce-mask-of-nodes-with-memory-fix.patch categorize-gfp-flags-fix.patch bias-the-location-of-pages-freed-for-min_free_kbytes-in-the-same-max_order_nr_pages-blocks.patch maps2-move-the-page-walker-code-to-lib.patch maps2-add-proc-pid-pagemap-interface.patch maps2-make-proc-pid-smaps-optional-under-config_embeddedpatch-fix.patch slub-slab-validation-move-tracking-information-alloc-outside-of-melstuff.patch hugetlbfs-read-support-fix.patch mm-mempolicyc-cleanups-fix.patch security-convert-lsm-into-a-static-interface-fix.patch security-convert-lsm-into-a-static-interface-fix-2.patch security-convert-lsm-into-a-static-interface-fix-unionfs.patch security-convert-lsm-into-a-static-interface-vs-fix-null-pointer-dereference-in-__vm_enough_memory.patch file-capabilities-clear-caps-cleanup-fix.patch capabilityh-remove-include-of-currenth.patch serial-turn-serial-console-suspend-a-boot-rather-than-compile-time-option-update.patch cache-pipe-buf-page-address-for-non-highmem-arch.patch softlockup-add-a-proc-tuning-parameter-fix.patch force-erroneous-inclusions-of-compiler-h-files-to-be-errors-fix.patch driver-for-the-atmel-on-chip-ssc-on-at32ap-and-at91-fix.patch add-kernel-notifierc-fix.patch do_sys_poll-simplify-playing-with-on-stack-data-fix.patch pcmcia-compactflash-driver-for-pa-semi-electra-boards.patch add-in-sunos-41x-compatible-mode-for-ufs-fix.patch core_pattern-fix-up-a-few-miscellaneous-bugs-fix.patch printk-add-interfaces-for-external-access-to-the-log-buffer-fix.patch deprecate-aout-elf-interpreters-fix.patch ext2-ext3-ext4-add-block-bitmap-validation-fix.patch pie-executable-randomization-fix-2.patch binfmt_flat-warning-fixes.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-2.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-3.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-4.patch writeback-fix-comment-use-helper-function.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-5.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-6.patch writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-7.patch revert-faster-ext2_clear_inode.patch ecryptfs-printk-warning-fixes.patch tdfxfb-mtrr-support-fix.patch fbdev-fb_create_modedb-non-static-int-first-=-1-fix.patch intel-iommu-pci-generic-helper-function.patch intel-iommu-iova-allocation-and-management-routines.patch intel-iommu-intel-iommu-driver.patch intel-iommu-iommu-floppy-workaround.patch 64-bit-i_version-afs-fixes.patch revoke-wire-up-i386-system-calls.patch revoke-vs-git-block.patch task-containersv11-basic-task-container-framework-fix.patch add-containerstats-v3-fix.patch pid-namespaces-dynamic-kmem-cache-allocator-for-pid-namespaces-fix.patch pid-namespaces-define-is_global_init-and-is_container_init-fix.patch pid-namespaces-define-is_global_init-and-is_container_init-versus-x86_64-mm-i386-show-unhandled-signals-v3.patch fs-superc-use-list_for_each_entry-instead-of-list_for_each-fix.patch pid-namespaces-helpers-to-find-the-task-by-its-numerical-ids-fix.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-2.patch pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-3.patch pid-namespaces-changes-to-show-virtual-ids-to-user-fix.patch reiser4.patch git-block-vs-reiser4.patch page-owner-tracking-leak-detector.patch profile-likely-unlikely-macros-fix.patch check_dirty_inode_list.patch w1-build-fix.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html