ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.10/2.6.10-mm1
- Added new bk-kconfig tree from Sam
- The bk-usb tree has been dropped due to a tendency to oops.
- Lots of stuff.
Changes since 2.6.10-rc3-mm1:
linus.patch
bk-acpi.patch
bk-alsa.patch
bk-cifs.patch
bk-cpufreq.patch
bk-i2c.patch
bk-ide-dev.patch
bk-input.patch
bk-dtor-input.patch
bk-jfs.patch
bk-kbuild.patch
bk-kconfig.patch
bk-mtd.patch
bk-netdev.patch
bk-ntfs.patch
bk-pci.patch
bk-scsi.patch
External bk trees
-ppc64-make-up-kernel-run-on-power4-logical-partition.patch
-direct-io-set-PF_SYNCWRITE.patch
-msync-set-PF_SYNCWRITE.patch
-reduce-ext3-log-spamming-blank-lines.patch
-do_task_stat-use-pid_alive.patch
-fix-ext2-ext3-memory-leak.patch
-uml-ramdisk-config-fix.patch
-shmctl-shm_lock-perms.patch
-vmlib-wrapped-executable-brk.patch
-vmlib-wrapped-mprotect-flags.patch
-ppc64-workaround-pci-issue-on-g5.patch
-ppc64-pseries-shared-processor-fixes.patch
-highmemc-fix-bio-error-propagation.patch
-documentation-for-ia64-serial-device-name-changes.patch
-add-missing-__kernel__-or-other-protections.patch
-scsi-imm-fix.patch
-gcc4-fixes.patch
-include-asm-x86_64-pgtableh-pgd_offset_gate.patch
-swsusp-bugfixes-do-not-oops-when-not-enough-memory-during-resume.patch
-swsusp-bugfixes-fix-memory-leak.patch
-swsusp-fixes-fix-confusing-printk.patch
-swsusp-fix-header-typo.patch
-swsusp-fix-types.patch
-ppc64-make-sure-lppaca-doesnt-cross-page-boundary.patch
-arcnet-fixes.patch
-x25-when-receiving-a-call-check-listening-sockets-for-matching-call-user-data.patch
-x25-remove-unused-header-files.patch
-net-socketc__sock_create-cleanup.patch
-remove-netfilter-warnings-on-copy_to_user.patch
-small-drivers-atm-cleanups.patch
-ppc64-fix-signal-mask-on-delivery-error.patch
-ppc64-sigmasking-fix.patch
-xen-vmm-4-alloc_skb_from_cache.patch
-sis-drm-bool-bitfields.patch
-allocate-sysfs_dirent-structures-from-their-own-slab.patch
-parenthesize-init_wait.patch
-fix-concurrent-access-to-dev-urandom.patch
-ide-cd-unable-to-read-multisession-dvds.patch
-fix-bogus-echild-return-from-wait-with-zombie-group-leader.patch
-code-to-register-amba-serial-console-is-missing.patch
-selinux-adds-a-private-inode-operation.patch
-reiserfs-private-inode-abstracted-to-static-inline.patch
-reiserfs-fixes-to-allow-reiserfs-to-use-selinux-attributes.patch
-reiserfs-cleaning-up-const-checks.patch
-selinux-hooks-cleanup.patch
-dvb-saa7146-driver-misc-updates.patch
-dvb-b2c2-driver-splitup.patch
-dvb-update-dib-usb-driver.patch
-dvb-dvb-core-update.patch
-dvb-frontend-update.patch
-dvb-av7110-driver-update.patch
-documentation-mem=.patch
-rocket-documentation-changes.patch
-remove-speedstep_coppermine-docs.patch
-final-polish-on-disk-ioctl-documentation.patch
-scsi-qla2xxx-qla_rscnc-remove-unused-functions-fwd.patch
Merged
+vmscan-total_scanned-fix.patch
Fix kswapd CPU utilisation problem
-iounmap-fix.patch
-pageattr-fix.patch
-pageattr-flush-tlb-fix.patch
-pageattr-guard-page.patch
These were conflicting with other patches
-4level-core-patch.patch
-4level-bogus-bug_on.patch
-4level-fix-vmalloc-overflow.patch
-4level-core-tweaks.patch
-4level-highpte-fix.patch
-4level-architecture-changes-for-alpha.patch
-4level-architecture-changes-for-arm.patch
-4level-fixes-arm.patch
-4level-architecture-changes-for-cris.patch
-4level-convert-drm-to-4levels.patch
-4level-add-asm-generic-support-for-emulating.patch
-4level-make-3level-fallback-more-type-safe.patch
-4level-ia64-support.patch
-4level-ia64-support-fix.patch
-pml4-ia64-build-fix.patch
-4level-architecture-changes-for-i386.patch
-4level-architecture-changes-for-i386-fix.patch
-4level-architecture-changes-for-m32r.patch
-4level-architecture-changes-for-ppc.patch
-4level-architecture-changes-for-ppc64.patch
-4level-architecture-changes-for-s390.patch
-4level-architecture-changes-for-s390-fix.patch
-4level-architecture-changes-for-sh.patch
-4level-architecture-changes-for-sh64.patch
-4level-architecture-changes-for-sparc.patch
-4level-architecture-changes-for-sparc64.patch
-4level-architecture-changes-for-x86_64.patch
-4level-architecture-changes-for-x86_64-pml4_offset_gate-fix.patch
-uml-pml4-support.patch
-uml-config_highmem-atomicity-fix.patch
Andi and Nick's 4-level-pagetable implementation was merged.
+ide-dev-build-fix.patch
Fix build error in bk-ide-dev.patch
+bk-kbuild-in_gate_area_no_task-warning-fix.patch
Fix build error in bk-kbuild.patch
-numa-policies-for-file-mappings-mpol_mf_move.patch
Dropped due to patch clashes. Is being redone.
+slab-add-more-arch-overrides-to-control-object-alignment.patch
Allow architecture to override slab minimum alignment.
+collect-page_states-only-from-online-cpus.patch
+collect-page_states-only-from-online-cpus-tidy.patch
get_page_state() SMP speedup.
+alloc_large_system_hash-numa-interleaving.patch
+filesystem-hashes-numa-interleaving.patch
+tcp-hashes-numa-interleaving.patch
Spread the large hashtables across NUMA nodes
-page-fault-scalability-patch-v11-ia64-atomic-pte-operations.patch
-page-fault-scalability-patch-v11-universal-cmpxchg-for-i386.patch
-page-fault-scalability-patch-v11-i386-atomic-pte-operations.patch
-page-fault-scalability-patch-v11-x86_64-atomic-pte-operations.patch
-page-fault-scalability-patch-v11-s390-atomic-pte-operations.patch
These were causing patch clashes and aren't a lot of use on their own.
+xircom_tulip_cb-build-fix-warning-fix.patch
Fix xircom_cb warning
+netfilter-fix-return-values-of-ipt_recent-checkentry.patch
+netfilter-fix-ip_conntrack_proto_sctp-exit-on-sysctl.patch
+netfilter-fix-ip_ct_selective_cleanup-and-rename.patch
+netfilter-add-comment-above-remove_expectations-in.patch
+netfilter-remove-ipchains-and-ipfwadm-compatibility.patch
+netfilter-remove-copy_to_user-warnings-in-netfilter.patch
+netfilter-fix-cleanup-in-ipt_recent-should-ipt_registrater_match-error.patch
+fix-broken-rst-handling-in-ip_conntrack.patch
netfilter fixes
+ppc32-add-uimage-to-default-targets.patch
+ppc32-fix-io_remap_page_range-for-36-bit-phys-platforms.patch
+ppc32-resurrect-documentation-powerpc-cpu_featurestxt.patch
ppc32 udpates
-remove-unnecessary-inclusions-of-asm-aouth.patch
This broke the build.
+gp-rel-data-support-vs-bk-kbuild-fix.patch
Fix gp-rel-data-support.patch versus bk-kbuild.
+frv-debugging-fixes.patch
+frv-minix-ext2-bitops-fixes.patch
+frv-perfctr_info-syscall.patch
+frv-update-the-trap-tables-comment.patch
+frv-accidental-tlb-entry-write-protect-fix.patch
+frv-pagetable-handling-fixes.patch
+frv-fr55x-cpu-support-fixes.patch
FRV arch updates
+implement-nommu-find_vma.patch
+fix-nommu-map_shared-handling.patch
+permit-nommu-map_shared-of-memory-backed-files.patch
+cross-reference-nommu-vmas-with-mappings.patch
nommu fixes
+trivial-cleanup-in-arch-i386-kernel-heads.patch
+remove-pfn_to_pgdat-on-x86.patch
+boot_ap_for_nondefault_kernel.patch
+i386-boot-loader-ids.patch
+proc-sys-kernel-bootloader_type.patch
x86 updates
-x86_64-cleanups-preparing-for-memory-hotplug.patch
THis broke and is being redone
+xen-vmm-4-return-code-for-arch_free_page-fix.patch
Fix xen-vmm-4-return-code-for-arch_free_page.patch
+arm26-remove-arm32-cruft.patch
+arm26-update-the-atomic-ops.patch
+arm26-build-system-updates.patch
+arm26-update-comments-headers-notes.patch
+arm26-necessary-compilation-fixes-for-2610.patch
+arm26cleanup-trap-handling-assembly.patch
+arm26-new-execve-code.patch
+arm26-move-some-files-to-better-locations.patch
+arm26-remove-shark-arm32-from-arm26.patch
+arm26-softirq-update.patch
+arm26-update-systemh-to-some-semblance-of-recentness.patch
+arm26-replace-arm32-time-handling-code-with-smaller-version.patch
+arm26-tlb-update.patch
+arm26-better-put_user-macros.patch
+arm26-better-unistdh-reimplemented-based-on-arm32.patch
arm26 architecture update
+fix-naming-in-swsusp.patch
+swsusp-kill-unused-variable.patch
+swsusp-kill-one-line-helpers-handle-read-errors.patch
+swsusp-small-cleanups.patch
+swsusp-kill-on2-algorithm-in-swsusp.patch
+swsusp-try_to_freeze-to-make-freezing-hooks-nicer.patch
+swsusp-try_to_freeze-to-make-freezing-hooks-nicer-fix.patch
swsusp update
+m32r-add-new-relocation-types-to-elfh.patch
+m32r-support-pgprot_noncached.patch
+m32r-update-ptracec-for-multithread.patch
+m32r-fix-not-to-execute-noexec-pages-0-3.patch
+m32r-cause-sigsegv-for-nonexec-page.patch
+m32r-dont-encode-ace_instruction-in.patch
+m32r-clean-up-arch-m32r-mm-faultc-3-3.patch
+m32r-clean-up-include-asm-m32r-pgtableh.patch
+m32r-support-page_none-1-3.patch
+m32r-remove-page_user-2-3.patch
+m32r-clean-up.patch
+m32r-include-asm-m32r-thread_infoh-minor.patch
+m32r-use-kmalloc-for-m32r-stacks-2-2.patch
+m32r-make-kernel-headers-for-mutual.patch
+m32r-use-generic-hardirq-framework.patch
+m32r-update-include-asm-m32r-systemh.patch
+m32r-update-include-asm-m32r-mmu_contexth.patch
m32r update
-uml-fix-__pgd_alloc-declaration.patch
Not needed any more
+s390-core-patches.patch
+s390-common-i-o-layer.patch
+s390-network-device-driver-patches.patch
+s390-dasd-driver.patch
+s390-character-device-drivers.patch
+s390-dcss-driver-cleanup-fix.patch
+s390-sclp-device-driver-cleanup.patch
S/390 update
-rcu-eliminate-rcu_datalast_qsctr.patch
+rcu-make-two-internal-structs-static.patch
+rcu-simplify-quiescent-state-detection.patch
rcu cleanups
-ioctl-cleanup.patch
-unlocked_ioctl.patch
+ioctl-rework.patch
New version of the dont-hold-BKL-across-ioctl patch.
+remove-rcu-abuse-in-cpu_idle-warning-fix.patch
RCU cleanup
+udf-simplify-udf_iget-fix-race.patch
+udf-fix-reservation-discarding.patch
UDF fixes
+remove-dead-ext3_put_inode-prototype.patch
ext3 cleanup
+compat-sigtimedwait.patch
+compat-sigtimedwait-sparc64-fix.patch
+compat-sigtimedwait-ppc64-fix.patch
compat signal fixes
+prio_tree-roll-call-to-prio_tree_first-into-prio_tree_next.patch
+prio_tree-generalization.patch
+prio_tree-move-general-code-from-mm-to-lib.patch
priority tree generalisation
+lcd-fix-memory-leak-code-cleanup.patch
Fix this char driver
+initramfs-unprivileged-image-creation.patch
initramfs permissions fix
+fix-conflicting-cpu_idle-declarations.patch
cleanup and fix up cpu_idle() declarations
+removes-redundant-sys_delete_module.patch
Remove unneeded function.
+task_structexit_state-usage.patch
Fix the handling of task_struct.state bits.
+trivial-uninline-kill-__exit_mm.patch
Code cleanup
+pcmcia-rename-pcmcia-devices.patch
+pcmcia-pd6729-e-mail-update.patch
+pcmcia-pd6729-cleanups.patch
+pcmcia-pd6729-isa_irq-handling.patch
+pcmcia-remove-obsolete-code.patch
+pcmcia-remove-pending_events.patch
+pcmcia-remove-client_attributes.patch
+pcmcia-remove-unneeded-parameter-from-rsrc_mgr.patch
+pcmcia-remove-dev_info-from-client.patch
+pcmcia-remove-mtd-and-bulkmem-replaced-by-pcmciamtd.patch
+pcmcia-per-socket-resource-database.patch
+pcmcia-validate_mem-only-for-non-statically-mapped-sockets.patch
+pcmcia-adjust_io_region-only-for-non-statically-mapped-sockets.patch
+pcmcia-find_io_region-only-for-non-statically-mapped-sockets.patch
+pcmcia-find_mem_region-only-for-non-statically-mapped-sockets.patch
+pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets.patch
+pcmcia-move-resource-handling-code-only-for-non-statically-mapped-sockets-to-other-file.patch
+pcmcia-make-rsrc_nonstatic-an-independend-module.patch
+pcmcia-allocate-resource-database-per-socket.patch
+pcmcia-remove-typedef.patch
+pcmcia-grab-lock-in-resource_release.patch
pcmcia update
+knfsd-move-nfserr_openmode-checking-from-nfsd_read-write-into-nfs4_preprocess_stateid_op-in-preperation-for-delegation-state.patch
+knfsd-check-the-callback-netid-in-gen_callback.patch
+knfsd-count-the-nfs4_client-structure-usage.patch
+knfsd-preparation-for-delegation-client-callback-probe.patch
+knfsd-preparation-for-delegation-client-callback-probe-warning-fixes.patch
+knfsd-probe-the-callback-path-upon-a-successful-setclientid_confirm.patch
+knfsd-check-for-existence-of-file_lock-parameter-inside-of-the-kernel-lock.patch
+knfsd-get-rid-of-the-special-delegation_stateid_t-use-the-existing-stateid_t.patch
+knfsd-add-structures-for-delegation-support.patch
+knfsd-allocate-and-initialize-the-delegation-structure.patch
+knfsd-find-a-delegation-for-a-file-given-a-stateid.patch
+knfsd-add-the-delegation-release-and-free-functions.patch
+knfsd-changes-to-expire_client.patch
+knfsd-delay-nfsd_colse-for-delegations-until-reaping.patch
+knfsd-delegation-recall-callback-rpc.patch
+knfsd-kernel-thread-for-delegation-callback.patch
+knfsd-helper-functions-for-deciding-to-grant-a-delegation.patch
+knfsd-attempt-to-hand-out-a-delegation.patch
+knfsd-remove-unnecessary-stateowner-existence-check.patch
+knfsd-check-for-openmode-violations-given-a-delegation-stateid.patch
+knfsd-add-checking-of-delegation-stateids-to-nfs4_preprocess_stateid_op.patch
+knfsd-add-the-delegreturn-operation.patch
+knfsd-add-to-the-laundromat-service-for-delegations.patch
+knfsd-clear-the-recall_lru-of-delegations-at-shutdown.patch
knfsd update
+export-sched_setscheduler-for-kernel-module-use.patch
Allow modules to set kernel thread scheduling policy
+sched-fix-scheduling-latencies-in-mttrc-reenables-interrupts.patch
Fix sched-fix-scheduling-latencies-in-mttrc.patch
+replace-numnodes-with-node_online_map-alpha.patch
+replace-numnodes-with-node_online_map-arm.patch
+replace-numnodes-with-node_online_map-i386.patch
+replace-numnodes-with-node_online_map-ia64.patch
+replace-numnodes-with-node_online_map-m32r.patch
+replace-numnodes-with-node_online_map-mips.patch
+replace-numnodes-with-node_online_map-parisc.patch
+replace-numnodes-with-node_online_map-ppc64.patch
+replace-numnodes-with-node_online_map-x86_64.patch
+replace-numnodes-with-node_online_map.patch
Clean up and fix numa node ID handling
-remove-rcu-abuse-in-cpu_idle-warning-fix.patch
Not needed
+ppc64-fix-cpu-hotplug.patch
Fix i386-cpu-hotplug-updated-for-mm.patch for ppc64
reiser4-export-inode_lock.patch
reiser4-export-pagevec-funcs.patch
reiser4-export-radix_tree_preload.patch
+reiser4-export-find_get_pages.patch
reiser4-radix-tree-tag.patch
reiser4-radix_tree_lookup_slot.patch
-reiser4-aliased-dir.patch
-reiser4-kobject-umount-race.patch
-reiser4-kobject-umount-race-cleanup.patch
+#reiser4-aliased-dir.patch
+#reiser4-kobject-umount-race.patch
+#reiser4-kobject-umount-race-cleanup.patch
reiser4-perthread-pages.patch
reiser4-unstatic-kswapd.patch
reiser4-include-reiser4.patch
reiser4-doc.patch
reiser4-only.patch
-reiser4-page_cache_readahead-fix.patch
-reiser4-fix-a-use-after-free-bug-in-reiser4_parse_options.patch
-reiser4-missing-context-creation-is-added.patch
-reiser4-crypto-update.patch
-reiser4-max_cbk_iteration-fix.patch
-reiser4-reduce-stack-usage.patch
-reiser4-fix-deadlock.patch
-reiser4-dont-use-shrink_dcache_anon.patch
-reiser4-kmap-atomic-fixes.patch
+reiser4-recover-read-performance.patch
+reiser4-export-find_get_pages_tag.patch
+reiser4-add-missing-context.patch
New reiser4 code drop
+fix-rom-enable-disable-in-r128-and-radeon-fb-drivers.patch
+fbdev-cleanup-i2c-code-of-rivafb.patch
+fbdev-revive-bios-less-booting-for-rage-xl-cards.patch
+fbdev-revive-global_mode_option.patch
+fbcon-fbdev-add-blanking-notification.patch
+fbcon-fbdev-add-blanking-notification-fix.patch
+fbdev-check-return-value-of-fb_add_videomode.patch
+fbdev-do-a-symbol_put-for-each-symbol_get-in-savagefb.patch
+fbdev-add-viewsonic-pf775a-to-broken-display-database.patch
+fbdev-fix-default-timings-in-vga16fb.patch
+fbdev-reduce-stack-usage-of-intelfb.patch
+zr36067-driver-correct-jpeg-app-com-markers.patch
+zr36067-driver-ppc-be-port.patch
+zr36067-driver-reduce-stack-size-usage.patch
fbdev updates
+moxa-update-status-of-moxa-smartio-driver.patch
+moxa-remove-ancient-changelog-readmemoxa.patch
+moxa-remove-readmemoxa-from-documentation-00-index.patch
+specialix-remove-bouncing-e-mail-address.patch
+stallion-update-to-documentation-stalliontxt.patch
+riscom8-update-staus-and-documentation-of-driver.patch
+pm-remove-outdated-docs.patch
+docs-add-sparse-howto.patch
+cciss-documentation-update.patch
+cciss-correct-mailing-list-address-in-source-code.patch
+cpqarray-correct-mailing-list-address-in-source-code.patch
+sh-remove-x86-specific-help-in-kconfig.patch
+cyclades-put-readmecycladez-in-documentation-serial.patch
+tipar-document-driver-options.patch
+tipar-code-cleanup.patch
Various documentaiton updates and char driver cleanups
+binfmt_scriptc-make-em86_format-static.patch
+remove-unused-include-asm-m68k-adb_mouseh.patch
+scsi-aic7xxx-remove-two-useless-variables.patch
+remove-in_string_c.patch
+remove-ct_to_secs-ct_to_usecs.patch
+bttv-driverc-make-some-variables-static.patch
+arch-alpha-kconfig-kill-stale-reference-to-documentation-smptex.patch
+init-initramfsc-make-unpack_to_rootfs-static.patch
+oss-misc-cleanups.patch
+inux-269-fs-proc-basec-array-size.patch
+linux-269-fs-proc-proc_ttyc-avoid-array.patch
+signalc-convert-assertion-to-bug_on.patch
+right-severity-level-for-fatal-message.patch
+remove-unused-drivers-char-rio-cdprotoh.patch
+remove-unused-drivers-char-rsf16fmih.patch
+mtd-added-nec-upd29f064115-support.patch
Various code cleanups
+optimize-prefetch-usage-in-list_for_each_xxx.patch
speed up list_for_each()
+waiting-10s-before-mounting-root-filesystem.patch
Retry the mount of the root filesytem during bootup.
number of patches in -mm: 896
number of changesets in external trees: 453
number of patches in -mm only: 879
total patches: 1332
All 896 patches:
linus.patch
expose-reiserfs_sync_fs.patch
Expose reiserfs_sync_fs()
fix-reiserfs-quota-debug-messages.patch
Fix reiserfs quota debug messages
fix-of-quota-deadlock-on-pagelock-quota-core.patch
Fix of quota deadlock on pagelock: quota core
vfs_quota_off-oops-fix.patch
vfs_quota_off-oops-fix
quota-umount-race-fix.patch
quota umount race fix
fix-of-quota-deadlock-on-pagelock-ext2.patch
Fix of quota deadlock on pagelock: ext2
fix-of-quota-deadlock-on-pagelock-ext2-tweaks.patch
fix-of-quota-deadlock-on-pagelock-ext2-tweaks
fix-of-quota-deadlock-on-pagelock-ext3.patch
Fix of quota deadlock on pagelock: ext3
fix-of-quota-deadlock-on-pagelock-ext3-tweaks.patch
fix-of-quota-deadlock-on-pagelock-ext3-tweaks
fix-of-quota-deadlock-on-pagelock-reiserfs.patch
Fix of quota deadlock on pagelock: reiserfs
fix-of-quota-deadlock-on-pagelock-reiserfs-fix.patch
fix-of-quota-deadlock-on-pagelock-reiserfs-fix
reiserfs-bug-fix-do-not-clear-ms_active-mount-flag.patch
reiserfs bug fix: do not clear MS_ACTIVE mount flag
allow-disabling-quota-messages-to-console.patch
Allow disabling quota messages to console
vmscan-total_scanned-fix.patch
vmscan: total_scanned fix
cs461x-gameport-code-isnt-being-included-in-build.patch
CS461x gameport code isn't being included in build
bk-acpi.patch
acpi-report-errors-in-fanc.patch
ACPI: report errors in fan.c
acpi-flush-tlb-when-pagetable-changed.patch
acpi: flush TLB when pagetable changed
bk-alsa.patch
bk-cifs.patch
bk-cpufreq.patch
bk-i2c.patch
bk-ide-dev.patch
ide-dev-build-fix.patch
ide-dev-build-fix
bk-input.patch
bk-dtor-input.patch
bk-jfs.patch
bk-kbuild.patch
bk-kbuild-in_gate_area_no_task-warning-fix.patch
bk-kbuild-in_gate_area_no_task-warning-fix
bk-kconfig.patch
bk-mtd.patch
bk-netdev.patch
via-rhine-warning-fix.patch
via-rhine warning fix
hostap-fix-kconfig-typos-and-missing-select-crypto.patch
hostap: fix Kconfig typos and missing select CRYPTO
ixgb-lr-card-support.patch
ixgb LR card support
bk-ntfs.patch
bk-pci.patch
bk-scsi.patch
mm.patch
add -mmN to EXTRAVERSION
fix-smm-failures-on-e750x-systems.patch
fix SMM failures on E750x systems
mm-keep-count-of-free-areas.patch
mm: keep count of free areas
mm-higher-order-watermarks.patch
mm: higher order watermarks
mm-higher-order-watermarks-fix.patch
higher order watermarks fix
mm-teach-kswapd-about-higher-order-areas.patch
mm: teach kswapd about higher order areas
simplified-readahead.patch
Simplified readahead
simplified-readahead-fix.patch
Simplified readahead fix
simplified-readahead-cleanups.patch
simplified-readahead-cleanups
readahead-congestion-control.patch
Simplified readahead
make-tree_lock-an-rwlock.patch
make mapping->tree_lock an rwlock
mempolicy-optimization.patch
mempolicy optimisation
mm-overcommit-updates.patch
mm: overcommit updates
kill-off-highmem_start_page.patch
kill off highmem_start_page
make-sure-ioremap-only-tests-valid-addresses.patch
make sure ioremap only tests valid addresses
mark_page_accessed-for-reads-on-non-page-boundaries.patch
mark_page_accessed() for read()s on non-page boundaries
do_anonymous_page-use-setpagereferenced.patch
do_anonymous_page() use SetPageReferenced
slab-add-more-arch-overrides-to-control-object-alignment.patch
slab: Add more arch overrides to control object alignment
collect-page_states-only-from-online-cpus.patch
collect page_states only from online cpus
collect-page_states-only-from-online-cpus-tidy.patch
collect-page_states-only-from-online-cpus-tidy
alloc_large_system_hash-numa-interleaving.patch
alloc_large_system_hash: NUMA interleaving
filesystem-hashes-numa-interleaving.patch
filesystem hashes: NUMA interleaving
tcp-hashes-numa-interleaving.patch
TCP hashes: NUMA interleaving
must-fix.patch
must fix lists update
must fix list update
mustfix update
must-fix update
mustfix lists
xircom_tulip_cb-build-fix.patch
xircom_tulip_cb.c build fix
xircom_tulip_cb-build-fix-warning-fix.patch
xircom_tulip_cb-build-fix warning fix
net-netconsole-poll-support-for-3c509.patch
net: Netconsole poll support for 3c509
pcnet32-79c976-with-fiber-optic.patch
pcnet32: 79c976 with fiber optic fix
multicast-filtering-for-tunc.patch
Multicast filtering for tun.c
r8169-missing-netif_poll_enable-and-irq-ack.patch
r8169: missing netif_poll_enable and irq ack
r8169-c-101.patch
r8169: C 101
r8169-large-send-enablement.patch
r8169: Large Send enablement
r8169-reduce-max-mtu-for-large-frames.patch
r8169: reduce max MTU for large frames
r8169-oversized-driver-field-for-ethtool.patch
r8169: oversized driver field for ethtool
fix-ibm_emac-autonegotiation-result-parsing.patch
EMAC: fix ibm_emac autonegotiation result parsing
netfilter-fix-return-values-of-ipt_recent-checkentry.patch
netfilter: fix return values of ipt_recent checkentry
netfilter-fix-ip_conntrack_proto_sctp-exit-on-sysctl.patch
netfilter: Fix ip_conntrack_proto_sctp exit on sysctl fail
netfilter-fix-ip_ct_selective_cleanup-and-rename.patch
netfilter: Fix ip_ct_selective_cleanup(), and rename ip_ct_iterate_cleanup()
netfilter-add-comment-above-remove_expectations-in.patch
netfilter: Add comment above remove_expectations in destroy_conntrack()
netfilter-remove-ipchains-and-ipfwadm-compatibility.patch
netfilter: Remove IPCHAINS and IPFWADM compatibility
netfilter-remove-copy_to_user-warnings-in-netfilter.patch
netfilter: Remove copy_to_user Warnings in Netfilter
netfilter-fix-cleanup-in-ipt_recent-should-ipt_registrater_match-error.patch
netfilter: Fix cleanup in ipt_recent should ipt_registrater_match error
fix-broken-rst-handling-in-ip_conntrack.patch
Fix broken RST handling in ip_conntrack
ppc32-freescale-book-e-mmu-cleanup.patch
ppc32: freescale Book-E MMU cleanup
ppc32-refactor-common-book-e-exception-code.patch
ppc32: refactor common book-e exception code
ppc32-switch-to-kbuild_defconfig.patch
ppc32: Switch to KBUILD_DEFCONFIG
ppc32-marvell-host-bridge-support-mv64x60.patch
ppc32: Marvell host bridge support (mv64x60)
ppc32-marvell-host-bridge-support-mv64x60-review-fixes.patch
ppc32-marvell-host-bridge-support-mv64x60 review fixes
ppc32-support-for-marvell-ev-64260-bp-eval-platform.patch
ppc32: support for Marvell EV-64260[ab]-BP eval platform
ppc32-support-for-force-cpci-690-board.patch
ppc32: support for Force CPCI-690 board
ppc32-support-for-artesyn-katana-cpci-boards.patch
ppc32: support for Artesyn Katana cPCI boards
ppc32-add-support-for-ibm-750fx-and-750gx-eval-boards.patch
ppc32: add Support for IBM 750FX and 750GX Eval Boards
ppc32-ppc4xx-pic-rewrite-cleanup.patch
ppc32: PPC4xx PIC rewrite/cleanup
ppc32-performance-monitor-oprofile-support-for-e500.patch
ppc32: performance Monitor/Oprofile support for e500
ppc32-performance-monitor-oprofile-support-for-e500-review-fixes.patch
Fix prototypes & externs in e500 oprofile support
ppc32-fix-ebonyc-warnings.patch
ppc32: fix ebony.c warnings
ppc32-remove-bogus-sprn_cpc0_gpio-define.patch
ppc32: remove bogus SPRN_CPC0_GPIO define
ppc32-debug-setcontext-syscall-implementation.patch
PPC debug setcontext syscall implementation.
ppc32-add-uimage-to-default-targets.patch
ppc32: add uImage to default targets
ppc32-fix-io_remap_page_range-for-36-bit-phys-platforms.patch
ppc32: fix io_remap_page_range for 36-bit phys platforms
ppc32-resurrect-documentation-powerpc-cpu_featurestxt.patch
ppc32: Resurrect Documentation/powerpc/cpu_features.txt
ppc64-kprobes-implementation.patch
ppc64: kprobes implementation
ppc64-tweaks-to-cpu-sysfs-information.patch
ppc64: tweaks to ppc64 cpu sysfs information
ppc64-reloc_hide.patch
kprobes-wrapper-to-define-jprobeentry.patch
Kprobes: wrapper to define jprobe.entry
termio-userspace-access-error-handling.patch
Termio userspace access error handling
ide_arch_obsolete_init-fix.patch
IDE_ARCH_OBSOLETE_INIT fix
out-of-line-implementation-of-find_next_bit.patch
out-of-line implementation of find_next_bit()
gp-rel-data-support.patch
GP-REL data support
gp-rel-data-support-vs-bk-kbuild-fix.patch
gp-rel-data-support-vs-bk-kbuild-fix
vm-routine-fixes.patch
VM routine fixes
vm-routine-fixes-CONFIG_SHMEM-fix.patch
vm-routine-fixes CONFIG_SHMEM fix
frv-fujitsu-fr-v-cpu-arch-maintainer-record.patch
FRV: Fujitsu FR-V CPU arch maintainer record
frv-fujitsu-fr-v-arch-documentation.patch
FRV: Fujitsu FR-V arch documentation
frv-fujitsu-fr-v-cpu-arch-implementation-part-1.patch
FRV: Fujitsu FR-V CPU arch implementation part 1
frv-fujitsu-fr-v-cpu-arch-implementation-part-2.patch
FRV: Fujitsu FR-V CPU arch implementation part 2
frv-fujitsu-fr-v-cpu-arch-implementation-part-3.patch
FRV: Fujitsu FR-V CPU arch implementation part 3
frv-fujitsu-fr-v-cpu-arch-implementation-part-4.patch
FRV: Fujitsu FR-V CPU arch implementation part 4
frv-fujitsu-fr-v-cpu-arch-implementation-part-5.patch
FRV: Fujitsu FR-V CPU arch implementation part 5
frv-fujitsu-fr-v-cpu-arch-implementation-part-6.patch
FRV: Fujitsu FR-V CPU arch implementation part 6
frv-fujitsu-fr-v-cpu-arch-implementation-part-7.patch
FRV: Fujitsu FR-V CPU arch implementation part 7
frv-fujitsu-fr-v-cpu-arch-implementation-part-8.patch
FRV: Fujitsu FR-V CPU arch implementation part 8
frv-fujitsu-fr-v-cpu-arch-implementation-part-9.patch
FRV: Fujitsu FR-V CPU arch implementation part 9
put-memory-in-dma-zone-not-normal-zone-in-frv-arch.patch
Put memory in DMA zone not Normal zone in FRV arch
frv-kill-off-highmem_start_page.patch
kill off highmem_start_page
frv-first-batch-of-fujitsu-fr-v-arch-include-files.patch
FRV: First batch of Fujitsu FR-V arch include files
frv-remove-obsolete-hardirq-stuff-from-includes.patch
frv: emove obsolete hardirq stuff from includes
frv-pci-dma-fixes.patch
frv: PCI DMA fixes
fix-frv-pci-config-space-write.patch
frv: Fix PCI config space write
frv-more-fujitsu-fr-v-arch-include-files.patch
FRV: More Fujitsu FR-V arch include files
convert-frv-to-use-remap_pfn_range.patch
convert FRV to use remap_pfn_range
frv-yet-more-fujitsu-fr-v-arch-include-files.patch
FRV: Yet more Fujitsu FR-V arch include files
frv-remaining-fujitsu-fr-v-arch-include-files.patch
FRV: Remaining Fujitsu FR-V arch include files
frv-make-calibrate_delay-optional.patch
FRV: Make calibrate_delay() optional
frv-better-mmap-support-in-uclinux.patch
FRV: Better mmap support in uClinux
frv-procfs-changes-for-nommu-changes.patch
FRV: procfs changes for nommu changes
frv-change-setup_arg_pages-to-take-stack-pointer.patch
FRV: change setup_arg_pages() to take stack pointer
frv-change-setup_arg_pages-to-take-stack-pointer-fixes.patch
Fix usage of setup_arg_pages() in IA64, MIPS, S390 and Sparc64
frv-add-fdpic-elf-binary-format-driver.patch
FRV: Add FDPIC ELF binary format driver
fix-some-elf-fdpic-binfmt-problems.patch
Fix some ELF-FDPIC binfmt problems
further-nommu-changes.patch
Further nommu changes
further-nommu-proc-changes.patch
Further nommu /proc changes
frv-arch-nommu-changes.patch
frv: nommu changes
make-more-syscalls-available-for-the-fr-v-arch.patch
Make more syscalls available for the FR-V arch
frv-debugging-fixes.patch
FRV: debugging fixes
frv-minix-ext2-bitops-fixes.patch
frv: Minix & ext2 bitops fixes
frv-perfctr_info-syscall.patch
frv: perfctr_info syscall
frv-update-the-trap-tables-comment.patch
frv: update the trap tables comment
frv-accidental-tlb-entry-write-protect-fix.patch
frv: accidental TLB entry write-protect fix
frv-pagetable-handling-fixes.patch
FRV: pagetable handling fixes
frv-fr55x-cpu-support-fixes.patch
FRV: FR55x CPU support fixes
implement-nommu-find_vma.patch
Implement nommu find_vma()
fix-nommu-map_shared-handling.patch
Fix nommu MAP_SHARED handling
permit-nommu-map_shared-of-memory-backed-files.patch
Permit nommu MAP_SHARED of memory backed files
cross-reference-nommu-vmas-with-mappings.patch
Cross-reference nommu VMAs with mappings
superhyway-bus-support.patch
SuperHyway bus support
assign-pkmap_base-dynamically.patch
Assign PKMAP_BASE dynamically
x86-remove-data-header-and-code-overlap-in-boot-setups.patch
x86: remove data-header and code overlap in boot/setup.S
cyrix-mii-cpuid-returns-stale-%ecx.patch
Cyrix MII cpuid returns stale %ecx
nx-fix-noexec-kernel-parameter.patch
NX: Fix noexec kernel parameter
nx-triple-fault-with-4k-kernel-mappings-and-pae.patch
NX: Triple fault with 4k kernel mappings and PAE
trivial-cleanup-in-arch-i386-kernel-heads.patch
Trivial cleanup in arch/i386/kernel/head.S
remove-pfn_to_pgdat-on-x86.patch
remove pfn_to_pgdat() on x86
boot_ap_for_nondefault_kernel.patch
Secondary cpus boot-up for non defalut location built kernels
i386-boot-loader-ids.patch
i386 boot loader IDs
proc-sys-kernel-bootloader_type.patch
/proc/sys/kernel/bootloader_type
intel-thermal-monitor-for-x86_64.patch
Intel thermal monitor for x86_64
x86_64-do_general_protection-retval-check.patch
x86_64: do_general_protection() retval check
x86_64-add-a-real-pfn_valid.patch
x86_64: Add a real pfn_valid
x86_64-fix-bugs-in-the-amd-k8-cmp-support-code.patch
x86_64: Fix bugs in the AMD K8 CMP support code.
x86_64-fix-bugs-in-the-amd-k8-cmp-support-code-fix.patch
x86_64: numa_add_cpu() fix
x86_64-reenable-mga-dri-on-x86-64.patch
x86_64: Reenable MGA DRI on x86-64
x86_64-remove-duplicated-fake_stack_frame-macro.patch
x86_64: Remove duplicated FAKE_STACK_FRAME macro.
x86_64-remove-bios-reboot-code.patch
x86_64: Remove BIOS reboot code
x86_64-add-reboot=force.patch
x86_64: Add reboot=force
x86_64-collected-ioremap-fixes.patch
x86_64: Collected ioremap fixes
x86_64-handle-nx-correctly-in-pageattr.patch
x86_64: Handle NX correctly in pageattr
x86_64-split-acpi-boot-table-parsing.patch
x86_64: Split ACPI boot table parsing
x86_64-split-acpi-boot-table-parsing-fix.patch
x86_64-split-acpi-boot-table-parsing-fix
x86_64-add-srat-numa-discovery-to-x86-64.patch
x86_64: Add SRAT NUMA discovery to x86-64.
x86_64-update-uptime-after-suspend.patch
x86_64: Update uptime after suspend
x86_64-allow-a-kernel-debugger-to-hide-single-steps-in.patch
x86_64: Allow a kernel debugger to hide single steps in more cases.
x86_64-remove-debug-information-for-vsyscalls.patch
x86_64: Remove debug information for vsyscalls
x86_64-rename-htvalid-to-cmp_legacy.patch
x86_64: Rename HTVALID to CMP_LEGACY
x86_64-scheduler-support-for-amd-cmp.patch
x86_64: Scheduler support for AMD CMP
x86_64-add-a-missing-__iomem-pointed-out-by-linus.patch
x86_64: Add a missing __iomem pointed out by Linus.
x86_64-add-a-missing-newline-in-proc-cpuinfo.patch
x86_64: Add a missing newline in /proc/cpuinfo
x86_64-always-print-segfaults-for-init.patch
x86_64: Always print segfaults for init.
x86_64-export-phys_proc_id.patch
x86_64: Export phys_proc_id
x86_64-allow-to-configure-more-cpus-and-nodes.patch
x86_64: Allow to configure more CPUs and nodes.
x86_64-allow-to-configure-more-cpus-and-nodes-fix.patch
x86_64-allow-to-configure-more-cpus-and-nodes fix
x86_64-fix-a-warning-in-the-cmp-support-code-for.patch
x86_64: Fix a warning in the CMP support code for !CONFIG_NUMA
x86_64-fix-some-outdated-assumptions-that-cpu-numbers.patch
x86_64: Fix some outdated assumptions that CPU numbers are equal numbers.
x86_64-fix-em64t-config-description.patch
x86_64: Fix EM64T config description
x86_64-remove-unneeded-ifdef-in-hardirqh.patch
x86_64: Remove unneeded ifdef in hardirq.h
x86_64-add-slit-inter-node-distance-information-to.patch
x86_64: Add SLIT (inter node distance) information to sysfs.
x86_64-add-x86_64-support-for-jack-steiners-slit-sysfs.patch
x86_64: Add x86_64 support for Jack Steiner's SLIT sysfs patch
x86_64-eliminate-some-useless-printks-in-acpi-numac.patch
x86_64: Eliminate some useless printks in ACPI numa.c
xen-vmm-4-add-ptep_establish_new-to-make-va-available.patch
Xen VMM #4: add ptep_establish_new to make va available
xen-vmm-4-return-code-for-arch_free_page.patch
Xen VMM #4: return code for arch_free_page
xen-vmm-4-return-code-for-arch_free_page-fix.patch
Get rid of arch_free_page() warning
xen-vmm-4-runtime-disable-of-vt-console.patch
Xen VMM #4: runtime disable of VT console
xen-vmm-4-has_arch_dev_mem.patch
Xen VMM #4: HAS_ARCH_DEV_MEM
xen-vmm-4-split-free_irq-into-teardown_irq.patch
Xen VMM #4: split free_irq into teardown_irq
h8-300-new-systemcall-support.patch
H8/300 new systemcall support
arm26-remove-arm32-cruft.patch
arm26: remove arm32 cruft
arm26-update-the-atomic-ops.patch
arm26: update the atomic ops
arm26-build-system-updates.patch
arm26 build system updates
arm26-update-comments-headers-notes.patch
arm26: update comments, headers, notes
arm26-necessary-compilation-fixes-for-2610.patch
arm26: necessary compilation fixes for 2.6.10
arm26cleanup-trap-handling-assembly.patch
arm26:cleanup trap handling assembly
arm26-new-execve-code.patch
arm26: new execve code
arm26-move-some-files-to-better-locations.patch
arm26: move some files to better locations
arm26-remove-shark-arm32-from-arm26.patch
arm26: remove shark (arm32) from arm26
arm26-softirq-update.patch
arm26: softirq update
arm26-update-systemh-to-some-semblance-of-recentness.patch
arm26: update system.h to some semblance of recentness.
arm26-replace-arm32-time-handling-code-with-smaller-version.patch
arm26: replace arm32 time handling code with smaller version
arm26-tlb-update.patch
arm26: TLB update
arm26-better-put_user-macros.patch
arm26: better put_user macros.
arm26-better-unistdh-reimplemented-based-on-arm32.patch
arm26: better unistd.h (reimplemented based on arm32)
ia64-remove-hcdp-support-for-early-printk.patch
ia64: remove HCDP support for early printk
typeofdev-powersaved_state.patch
typeof(dev->power.saved_state)
fix-naming-in-swsusp.patch
fix naming in swsusp
swsusp-kill-unused-variable.patch
swsusp: kill unused variable
swsusp-kill-one-line-helpers-handle-read-errors.patch
swsusp: kill one-line helpers, handle read errors
swsusp-small-cleanups.patch
From: Pavel Machek <[email protected]>
Subject: swsusp: Small cleanups
swsusp-kill-on2-algorithm-in-swsusp.patch
swsusp: Kill O(n^2) algorithm in swsusp
swsusp-try_to_freeze-to-make-freezing-hooks-nicer.patch
swsusp: try_to_freeze to make freezing hooks nicer
swsusp-try_to_freeze-to-make-freezing-hooks-nicer-fix.patch
swsusp-try_to_freeze-to-make-freezing-hooks-nicer fix
m32r-add-new-relocation-types-to-elfh.patch
m32r: Add new relocation types to elf.h
m32r-support-pgprot_noncached.patch
m32r: Support pgprot_noncached()
m32r-update-ptracec-for-multithread.patch
m32r: Update ptrace.c for multithread debugging
m32r-fix-not-to-execute-noexec-pages-0-3.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Fix not to execute noexec pages (0/3)
m32r-cause-sigsegv-for-nonexec-page.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Cause SIGSEGV for nonexec page execution (1/3)
m32r-dont-encode-ace_instruction-in.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Don't encode ACE_INSTRUCTION in address (2/3)
m32r-clean-up-arch-m32r-mm-faultc-3-3.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Clean up arch/m32r/mm/fault.c (3/3)
m32r-clean-up-include-asm-m32r-pgtableh.patch
Subject: [PATCH 2.6.10-rc3-mm1] m32r: Clean up include/asm-m32r/pgtable.h
m32r-support-page_none-1-3.patch
m32r: Support PAGE_NONE
m32r-remove-page_user-2-3.patch
m32r: Remove PAGE_USER
m32r-clean-up.patch
m32r: Clean up include/asm-m32r/pgtable-2level.h
m32r-include-asm-m32r-thread_infoh-minor.patch
m32r: include/asm-m32r/thread_info.h minor updates
m32r-use-kmalloc-for-m32r-stacks-2-2.patch
m32r: Use kmalloc for m32r stacks
m32r-make-kernel-headers-for-mutual.patch
m32r: Make kernel headers for mutual exclusion
m32r-use-generic-hardirq-framework.patch
m32r: Use generic hardirq framework
m32r-update-include-asm-m32r-systemh.patch
m32r: Update include/asm-m32r/system.h
m32r-update-include-asm-m32r-mmu_contexth.patch
m32r: Update include/asm-m32r/mmu_context.h
uml-remove-most-devfs_mk_symlink-calls.patch
uml: remove most devfs_mk_symlink calls
uml-fix-__wrap_free-comment.patch
uml: fix __wrap_free comment
uml-fix-some-ptrace-functions-returns-values.patch
uml: fix some ptrace functions returns values
uml-redo-the-signal-delivery-mechanism.patch
uml: redo the signal delivery mechanism
uml-make-restorer-match-i386.patch
uml: make restorer match i386
uml-unistdh-cleanup.patch
uml: unistd.h cleanup
uml-remove-a-quilt-induced-duplicity.patch
uml: remove a quilt-induced duplicity
uml-fix-sigreturn-to-not-copy_user-under-a-spinlock.patch
uml: fix sigreturn to not copy_user under a spinlock
uml-close-host-file-descriptors-properly.patch
uml: close host file descriptors properly
uml-free-host-resources-associated-with-freed-irqs.patch
uml: free host resources associated with freed IRQs
uml-unregister-signal-handlers-at-reboot.patch
uml: unregister signal handlers at reboot
hostfs-uml-set-sendfile-to-generic_file_sendfile.patch
hostfs: uml: set .sendfile to generic_file_sendfile
hostfs-uml-add-some-other-pagecache-methods.patch
hostfs: uml: add some other pagecache methods
uml-terminal-cleanup.patch
uml: terminal cleanup
uml-first-part-rework-of-run_helper-and-users.patch
Uml: first part rework of run_helper() and users.
uml-finish-fixing-run_helper-failure-path.patch
uml: finish fixing run_helper failure path
uml-add-elf-vsyscall-support.patch
uml: add elf vsyscall support
uml-make-vsyscall-page-into-process-page-tables.patch
uml: make vsyscall page into process page tables
uml-include-vsyscall-page-in-core-dumps.patch
uml: include vsyscall page in core dumps
uml-add-tracesysgood-support.patch
uml: Add TRACESYSGOOD support
uml-kill-host-processes-properly.patch
uml: kill host processes properly
uml-defconfig-update.patch
uml: defconfig update
uml-small-vsyscall-fixes.patch
uml: small vsyscall fixes
uml-export-end_iomem.patch
uml: export end_iomem
uml-system-call-restart-fixes.patch
uml: system call restart fixes
uml-fix-setting-of-tif_sigpending.patch
uml: Fix setting of TIF_SIGPENDING
uml-allow-vsyscall-code-to-build-on-24.patch
uml: Allow vsyscall code to build on 2.4
uml-sysemu-fixes.patch
uml: SYSEMU fixes
uml-correctly-restore-extramask-in-sigreturn.patch
uml: correctly restore extramask in sigreturn
uml-fix-update_process_times-call.patch
uml: fix update_process_times call
uml-detect-sysemu_singlestep.patch
uml: detect SYSEMU_SINGLESTEP
uml-use-sysemu_singlestep.patch
uml: use SYSEMU_SINGLESTEP
uml-declare-ptrace_setfpregs.patch
uml: declare ptrace_setfpregs
uml-remove-bogus-__nr_sigreturn-check.patch
uml: Remove bogus __NR_sigreturn check
uml-fix-highmem-compilation.patch
uml: Fix highmem compilation
uml-symbol-export.patch
uml: symbol export
uml-fix-umldir-init-order.patch
uml: fix umldir init order
uml-raise-tty-limit.patch
uml: raise tty limit
uml-sysfs-support-for-uml-network-driver.patch
uml: sysfs support for uml network driver.
uml-sysfs-support-for-the-uml-block-devices.patch
uml: sysfs support for the uml block devices.
s390-remove-compat-setup_arg_pages32.patch
s390: remove compat setup_arg_pages32
s390-core-patches.patch
s390: core patches
s390-common-i-o-layer.patch
s390: Common I/O layer
s390-network-device-driver-patches.patch
s390: Network device driver patches
s390-dasd-driver.patch
s390: DASD driver
s390-character-device-drivers.patch
s390: Character device drivers
s390-dcss-driver-cleanup-fix.patch
s390: DCSS driver cleanup fix
s390-sclp-device-driver-cleanup.patch
From: Heiko Carstens <[email protected]>
Subject: [PATCH 8/8] s390: SCLP device driver cleanup
enhanced-i-o-accounting-data-patch.patch
enhanced I/O accounting data patch
enhanced-memory-accounting-data-collection.patch
enhanced Memory accounting data collection
enhanced-memory-accounting-data-collection-tidy.patch
enhanced-memory-accounting-data-collection-tidy
wacom-tablet-driver.patch
wacom tablet driver
force-feedback-support-for-uinput.patch
Force feedback support for uinput
kmap_atomic-takes-char.patch
kmap_atomic takes char*
kmap_atomic-takes-char-fix.patch
kmap_atomic-takes-char-fix
kmap_atomic-fallout.patch
kmap_atomic fallout
kunmap-fallout-more-fixes.patch
kunmap-fallout-more-fixes
4-4gb-incorrect-bound-check-in-do_getname.patch
4/4GB: Incorrect bound check in do_getname()
handle-quoted-module-parameters.patch
handle quoted module parameters
CONFIG_SOUND_VIA82CXXX_PROCFS.patch
Add CONFIG_SOUND_VIA82CXXX_PROCFS
make-sysrq-f-call-oom_kill.patch
make sysrq-F call oom_kill()
allow-admin-to-enable-only-some-of-the-magic-sysrq-functions.patch
Allow admin to enable only some of the Magic-Sysrq functions
gen_init_cpio-symlink-pipe-socket-support.patch
gen_init_cpio symlink, pipe and socket support
gen_init_cpio-slink_pipe_sock_2.patch
gen_init_cpio-slink_pipe_sock_2
initramfs-allow-no-trailer.patch
INITRAMFS: allow no trailer
move-irq_enter-and-irq_exit-to-common-code.patch
move irq_enter and irq_exit to common code
remove-unused-irq_cpustat-fields.patch
remove unused irq_cpustat fields
hold-bkl-for-shorter-period-in-generic_shutdown_super.patch
Hold BKL for shorter period in generic_shutdown_super().
cleanups-for-the-ipmi-driver.patch
Cleanups for the IPMI driver
htree-telldir-fix.patch
ext3 htree telldir() fix
kill-blkh.patch
kill blk.h
ext3-cleanup-handling-of-aborted-transactions.patch
ext3: cleanup handling of aborted transactions.
ext3-handle-attempted-delete-of-bitmap-blocks.patch
ext3: handle attempted delete of bitmap blocks.
ext3-handle-attempted-double-delete-of-metadata.patch
ext3: handle attempted double-delete of metadata.
cpumask_t-initializers.patch
cpumask_t initializers
time-run-too-fast-after-s3.patch
time runx too fast after S3
fork-total_forks-not-counted-under-tasklist_lock.patch
fork: total_forks not counted under tasklist_lock
suppress-might_sleep-if-oopsing.patch
suppress might_sleep() if oopsing
file-sync-no-i_sem.patch
Reduce i_sem usage during file sync operations
ext3-support-for-ea-in-inode.patch
ext3: support for EA in inode
ext3-support-for-ea-in-inode-warning-fix.patch
ext3-xattr-warning-fix
off-by-one-in-drivers-parport-probec.patch
Off by one in drivers/parport/probe.c
compile-with-ffreestanding.patch
compile with -ffreestanding
sys_stime-needs-a-compat-function.patch
sys_stime needs a compat function
sys_stime-needs-a-compat-function-update.patch
sync-in-core-time-granuality-with-filesystems.patch
Sync in core time granuality with filesystems
sync-in-core-time-granuality-with-filesystems-sonypi-fix.patch
sync-in-core-time-granuality-with-filesystems-sonypi-fix
remove-ip2-programs.patch
remove ip2 programs
rcu-eliminate-rcu_ctrlblklock.patch
rcu: eliminate rcu_ctrlblk.lock
rcu-make-two-internal-structs-static.patch
rcu: make two internal structs static
rcu-simplify-quiescent-state-detection.patch
rcu: simplify quiescent state detection
smb_file_open-retval-fix.patch
smb_file_open() retval fix
sys_sched_setaffinity-on-up-should-fail-for-non-zero.patch
sys_sched_setaffinity() on UP should fail for non-zero CPUs.
make-gconfig-work-with-gtk-24.patch
make gconfig work with gtk-2.4
edd-add-edd=off-and-edd=skipmbr-options.patch
EDD: add edd=off and edd=skipmbr options
panic_timeout-move-to-kernelh.patch
panic_timeout: move to kernel.h
add-pr_get_name.patch
Add PR_GET_NAME
fix-alt-sysrq-deadlock.patch
fix alt-sysrq deadlock
cpumask-range-check-before-using-value.patch
cpumask: range check before using value
noop-iosched-make-code-static.patch
noop iosched: make code static
noop-iosched-remove-unused-includes.patch
noop iosched: remove unused includes
loop-device-recursion-avoidance.patch
loop device resursion avoidance
noone-uses-have_arch_si_codes-or-have_arch_sigevent_t.patch
noone uses HAVE_ARCH_SI_CODES or HAVE_ARCH_SIGEVENT_T
get_blkdev_list-cleanup.patch
get_blkdev_list() cleanup
ext-apply-umask-to-symlinks-with-acls-configured-out.patch
Ext[23]: apply umask to symlinks with ACLs configured out
fix-missing-wakeup-in-ipc-sem.patch
fix missing wakeup in ipc/sem
irq-resource-deallocation-acpi.patch
IRQ resource deallocation: ACPI
irq-resource-deallocation-ia64.patch
IRQ resource deallocation: ia64
ioctl-rework.patch
ioctl rework
__getblk_slow-can-loop-forever-when-pages-are-partially.patch
__getblk_slow can loop forever when pages are partially mapped
remove-rcu-abuse-in-cpu_idle.patch
Remove RCU abuse in cpu_idle()
remove-rcu-abuse-in-cpu_idle-warning-fix.patch
remove-rcu-abuse-in-cpu_idle-warning-fix
udf-simplify-udf_iget-fix-race.patch
udf: simplify udf_iget, fix race
udf-fix-reservation-discarding.patch
udf: fix reservation discarding
remove-dead-ext3_put_inode-prototype.patch
remove dead ext3_put_inode prototype
compat-sigtimedwait.patch
compat: sigtimedwait
compat-sigtimedwait-sparc64-fix.patch
compat-sigtimedwait-sparc64-fix
compat-sigtimedwait-ppc64-fix.patch
compat-sigtimedwait ppc64 fix
msync-set-PF_SYNCWRITE.patch
msync(): set PF_SYNCWRITE
prio_tree-roll-call-to-prio_tree_first-into-prio_tree_next.patch
prio_tree: roll call to prio_tree_first into prio_tree_next
prio_tree-generalization.patch
prio_tree: generalization
prio_tree-move-general-code-from-mm-to-lib.patch
prio_tree: move general code from mm/ to lib/
lcd-fix-memory-leak-code-cleanup.patch
lcd: fix memory leak, code cleanup
initramfs-unprivileged-image-creation.patch
initramfs: unprivileged image creation
fix-conflicting-cpu_idle-declarations.patch
fix conflicting cpu_idle() declarations
removes-redundant-sys_delete_module.patch
remove redundant sys_delete_module()
fix-stop-signal-race.patch
fix stop signal race
move-group_exit-flag-into-signal_structflags-word.patch
move group_exit flag into signal_struct.flags word
fix-ptracer-death-race-yielding-bogus-bug_on.patch
fix ptracer death race yielding bogus BUG_ON
move-waitchld_exit-from-task_struct-to-signal_struct.patch
move waitchld_exit from task_struct to signal_struct
task_structexit_state-usage.patch
task_struct.exit_state usage
trivial-uninline-kill-__exit_mm.patch
uninline/kill __exit_mm()
selinux-scalability-add-spin_trylock_irq-and.patch
SELinux scalability: add spin_trylock_irq and spin_trylock_irqsave
selinux-scalability-convert-avc-to-rcu.patch
SELinux scalability: convert AVC to RCU
selinux-scalability-convert-avc-to-rcu-fix.patch
SELinux: fix bug in avc_update_node()
selinux-atomic_dec_and_test-bug.patch
SELinux: atomic_dec_and_test() bug
selinux-scalability-avc-statistics-and-tuning.patch
SELinux scalability: AVC statistics and tuning
selinux-regenerate-selinux-module-headers.patch
SELinux: regenerate SELinux module headers
selinux-update-selinux_task_setscheduler.patch
SELinux: update selinux_task_setscheduler
selinux-audit-task-comm-if-exe-cannot-be-determined.patch
SELinux: audit task comm if exe cannot be determined
selinux-add-dynamic-context-transition-support-to-selinux.patch
SELinux: add dynamic context transition support to SELinux
selinux-enhance-selinux-control-of-executable-mappings.patch
SELinux: enhance SELinux control of executable mappings
selinux-add-member-node-to-selinuxfs.patch
SELinux: add member node to selinuxfs
selinux-eliminate-unaligned-accesses-by-policy-loading-code.patch
SELinux: eliminate unaligned accesses by policy loading code
oprofile-add-check_user_page_readable.patch
oprofile: add check_user_page_readable()
oprofile-arch-independent-code-for-stack-trace.patch
oprofile: arch-independent code for stack trace sampling
oprofile-arch-independent-code-for-stack-trace-rename-timer_init.patch
oprofile-arch-independent-code-for-stack-trace: rename timer_init
oprofile-timer-backtrace-fix-2.patch
oprofile: backtrace operation does not initialized
oprofile-i386-support-for-stack-trace-sampling.patch
oprofile: i386 support for stack trace sampling
oprofile-i386-support-for-stack-trace-sampling-cleanup.patch
oprofile-i386-support-for-stack-trace-sampling-cleanup
oprofile-i386-support-for-stack-trace-sampling-fix.patch
oprofile-i386-support-for-stack-trace-sampling x86_64 fix
oprofile-ia64-support-for-oprofile-stack-trace.patch
oprofile: ia64 support for oprofile stack trace sampling
oprofile-update-alpha-for-api-changes.patch
oprofile: update alpha for api changes
oprofile-update-arm-for-api-changes.patch
oprofile: update arm for api changes
oprofile-update-ppc-for-api-changes.patch
oprofile: update ppc for api changes
oprofile-update-parisc-for-api-changes.patch
oprofile: update parisc for api changes
oprofile-update-s390-for-api-changes.patch
oprofile: update s390 for api changes
oprofile-update-sh-for-api-changes.patch
oprofile: update sh for api changes
oprofile-update-sparc64-for-api-changes.patch
oprofile: update sparc64 for api changes
oprofile-minor-cleanups.patch
oprofile: minor cleanups
pcmcia-new-ds-cs-interface.patch
pcmcia: new ds - cs interface
pcmcia-call-device-drivers-from-ds-not-from-cs.patch
pcmcia: call device drivers from ds, not from cs
pcmcia-unify-bind_mtd-and-pcmcia_bind_mtd.patch
pcmcia: unify bind_mtd and pcmcia_bind_mtd
pcmcia-unfiy-bind_device-and-pcmcia_bind_device.patch
pcmcia: unfiy bind_device and pcmcia_bind_device
pcmcia-device-model-integration-can-only-be-submitted-under-gpl.patch
pcmcia: device model integration can only be submitted under GPL
pcmcia-add-pcmcia_devices.patch
pcmcia: add pcmcia_device(s)
pcmcia-remove-socket_bind_t-use-pcmcia_devices-instead.patch
pcmcia: remove socket_bind_t, use pcmcia_devices instead
pcmcia-remove-internal-module-use-count-use-module_refcount-instead.patch
pcmcia: remove internal module use count, use module_refcount instead
pcmcia-set-drivers-owner-field.patch
pcmcia: set driver's .owner field
pcmcia-move-pcmcia_unregister_client-to-ds.patch
pcmcia: move pcmcia_(un,)register_client to ds
pcmcia-device-model-integration-can-only-be-submitted-under-gpl-part-2.patch
pcmcia: device model integration can only be submitted under GPL, part 2
pcmcia-use-kref-instead-of-native-atomic-counter.patch
pcmcia: use kref instead of native atomic counter
pcmcia-add-pcmcia_putget_socket.patch
pcmcia: add pcmcia_(put,get)_socket
pcmcia-grab-a-reference-to-the-cs-socket-in-ds.patch
pcmcia: grab a reference to the cs-socket in ds
pcmcia-get-a-reference-to-ds-socket-for-each-pcmcia_device.patch
pcmcia: get a reference to ds-socket for each pcmcia_device
pcmcia-add-a-pointer-to-client-in-struct-pcmcia_device.patch
pcmcia: add a pointer to client in struct pcmcia_device
pcmcia-use-pcmcia_device-in-send_event.patch
pcmcia: use pcmcia_device in send_event
pcmcia-use-pcmcia_device-to-mark-clients-as-stale.patch
pcmcia: use pcmcia_device to mark clients as stale
pcmcia-code-moving-in-ds.patch
pcmcia: code moving in ds
pcmcia-use-pcmcia_device-in-register_client.patch
pcmcia: use pcmcia_device in register_client
pcmcia-direct-ordered-unbind-of-devices.patch
pcmcia: direct-ordered unbind of devices
pcmcia-bug-on-dev_list-=-null.patch
pcmcia: BUG on dev_list != NULL
pcmcia-bug-if-clients-are-kept-too-long.patch
pcmcia: BUG() if clients are kept too long
pcmcia-move-struct-client_t-inside-struct-pcmcia_device.patch
pcmcia: move struct client_t inside struct pcmcia_device
pcmcia-use-driver_find-in-ds.patch
pcmcia: use driver_find in ds
pcmcia-set_netdev-for-network-devices.patch
pcmcia: SET_NETDEV for network devices
pcmcia-set_netdev-for-wireless-network-devices.patch
pcmcia: SET_NETDEV for wireless network devices
pcmcia-reduce-stack-usage-in-ds_ioctl-randy-dunlap.patch
pcmcia: reduce stack usage in ds_ioctl (Randy Dunlap)
pcmcia-add-disable_clkrun-option.patch
pcmcia: Add disable_clkrun option
pcmcia-rename-pcmcia-devices.patch
pcmcia: rename PCMCIA devices
pcmcia-pd6729-e-mail-update.patch
pcmcia: pd6729: e-mail update
pcmcia-pd6729-cleanups.patch
pcmcia: pd6729: cleanups
pcmcia-pd6729-isa_irq-handling.patch
pcmcia: pd6729: isa_irq handling
pcmcia-remove-obsolete-code.patch
pcmcia: remove obsolete code
pcmcia-remove-pending_events.patch
pcmcia: remove pending_events
pcmcia-remove-client_attributes.patch
pcmcia: remove client_attributes
pcmcia-remove-unneeded-parameter-from-rsrc_mgr.patch
pcmcia: remove unneeded parameter from rsrc_mgr
pcmcia-remove-dev_info-from-client.patch
pcmcia: remove dev_info from client
pcmcia-remove-mtd-and-bulkmem-replaced-by-pcmciamtd.patch
pcmcia: remove mtd and bulkmem (replaced by pcmciamtd)
pcmcia-per-socket-resource-database.patch
pcmcia: per-socket resource database
pcmcia-validate_mem-only-for-non-statically-mapped-sockets.patch
pcmcia: validate_mem only for non-statically mapped sockets
pcmcia-adjust_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_io_region only for non-statically mapped sockets
pcmcia-find_io_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_io_region only for non-statically mapped sockets
pcmcia-find_mem_region-only-for-non-statically-mapped-sockets.patch
pcmcia: find_mem_region only for non-statically mapped sockets
pcmcia-adjust_-and-release_resources-only-for-non-statically-mapped-sockets.patch
pcmcia: adjust_ and release_resources only for non-statically mapped sockets
pcmcia-move-resource-handling-code-only-for-non-statically-mapped-sockets-to-other-file.patch
pcmcia: move resource handling code only for non-statically mapped sockets to other file
pcmcia-make-rsrc_nonstatic-an-independend-module.patch
pcmcia: make rsrc_nonstatic an independend module
pcmcia-allocate-resource-database-per-socket.patch
pcmcia: allocate resource database per-socket
pcmcia-remove-typedef.patch
pcmcia: remove typedef
pcmcia-grab-lock-in-resource_release.patch
pcmcia: grab lock in resource_release
knfsd-nfsd_translate_wouldblocks.patch
knfsd: nfsd_translate_wouldblocks
knfsd-svcrpc-auth_null-fixes.patch
knfsd: svcrpc: auth_null fixes
knfsd-svcrpc-share-code-duplicated-between-auth_unix-and-auth_null.patch
knfsd: svcrpc: share code duplicated between auth_unix and auth_null
knfsd-nfsd4-fix-open_downgrade-decode-error.patch
knfsd: nfsd4: fix open_downgrade decode error.
knfsd-rpcsec_gss-comparing-pointer-to-0-instead-of-null.patch
knfsd: rpcsec_gss: comparing pointer to 0 instead of NULL
knfsd-nfsd4-fix-fileid-in-readdir-responses.patch
knfsd: nfsd4: fix fileid in readdir responses
knfsd-nfsd4-use-the-fsid-export-option-when-returning-the-fsid-attribute.patch
knfsd: nfsd4: use the fsid export option when returning the fsid attribute
knfsd-nfsd4-encode_dirent-cleanup.patch
knfsd: nfsd4 encode_dirent cleanup
knfsd-nfsd4-encode_dirent-superfluous-assignment.patch
knfsd: nfsd4: encode_dirent: superfluous assignment
knfsd-nfsd4-encode_dirent-superfluous-local-variables.patch
knfsd: nfsd4: encode_dirent: superfluous local variables
knfsd-nfsd4-encode_dirent-more-readdir-attribute-encoding-to-new-function.patch
knfsd: nfsd4: encode_dirent: more readdir attribute encoding to new function
knfsd-nfsd4-encode_dirent-simplify-nfs4_encode_dirent_fattr.patch
knfsd: nfsd4: encode_dirent: simplify nfs4_encode_dirent_fattr
knfsd-nfsd4-encode_dirent-move-rdattr_error-code-to-new-function.patch
knfsd: nfsd4: encode_dirent: move rdattr_error code to new function
knfsd-nfsd4-encode_dirent-simplify-error-handling.patch
knfsd: nfsd4: encode_dirent: simplify error handling
knfsd-nfsd4-encode_dirent-simplify-control-flow.patch
knfsd: nfsd4: encode_dirent: simplify control flow
knfsd-nfsd4-encode_dirent-fix-dropit-return.patch
knfsd: nfsd4: encode_dirent: fix dropit return
knfsd-nfsd4-encode_dirent-trivial-cleanup.patch
knfsd: nfsd4: encode_dirent: trivial cleanup
knfsd-move-nfserr_openmode-checking-from-nfsd_read-write-into-nfs4_preprocess_stateid_op-in-preperation-for-delegation-state.patch
knfsd: move nfserr_openmode checking from nfsd_read/write into nfs4_preprocess_stateid_op() in preperation for delegation state.
knfsd-check-the-callback-netid-in-gen_callback.patch
knfsd: check the callback netid in gen_callback.
knfsd-count-the-nfs4_client-structure-usage.patch
knfsd: count the nfs4_client structure usage
knfsd-preparation-for-delegation-client-callback-probe.patch
knfsd: preparation for delegation: client callback probe
knfsd-preparation-for-delegation-client-callback-probe-warning-fixes.patch
knfsd-preparation-for-delegation-client-callback-probe-warning-fixes
knfsd-probe-the-callback-path-upon-a-successful-setclientid_confirm.patch
knfsd: probe the callback path upon a successful setclientid_confirm
knfsd-check-for-existence-of-file_lock-parameter-inside-of-the-kernel-lock.patch
knfsd: check for existence of file_lock parameter inside of the kernel lock.
knfsd-get-rid-of-the-special-delegation_stateid_t-use-the-existing-stateid_t.patch
knfsd: get rid of the special delegation_stateid_t, use the existing stateid_t.
knfsd-add-structures-for-delegation-support.patch
knfsd: add structures for delegation support
knfsd-allocate-and-initialize-the-delegation-structure.patch
knfsd: allocate and initialize the delegation structure.
knfsd-find-a-delegation-for-a-file-given-a-stateid.patch
knfsd: find a delegation for a file given a stateid.
knfsd-add-the-delegation-release-and-free-functions.patch
knfsd: add the delegation release and free functions
knfsd-changes-to-expire_client.patch
knfsd: changes to expire_client
knfsd-delay-nfsd_colse-for-delegations-until-reaping.patch
knfsd: delay nfsd_colse for delegations until reaping
knfsd-delegation-recall-callback-rpc.patch
knfsd: delegation recall callback rpc.
knfsd-kernel-thread-for-delegation-callback.patch
knfsd: kernel thread for delegation callback
knfsd-helper-functions-for-deciding-to-grant-a-delegation.patch
knfsd: helper functions for deciding to grant a delegation.
knfsd-attempt-to-hand-out-a-delegation.patch
knfsd: attempt to hand out a delegation
knfsd-remove-unnecessary-stateowner-existence-check.patch
knfsd: remove unnecessary stateowner existence check.
knfsd-check-for-openmode-violations-given-a-delegation-stateid.patch
knfsd: check for openmode violations given a delegation stateid.
knfsd-add-checking-of-delegation-stateids-to-nfs4_preprocess_stateid_op.patch
knfsd: add checking of delegation stateids to nfs4_preprocess_stateid_op.
knfsd-add-the-delegreturn-operation.patch
knfsd: add the DELEGRETURN operation.
knfsd-add-to-the-laundromat-service-for-delegations.patch
knfsd: add to the laundromat service for delegations.
knfsd-clear-the-recall_lru-of-delegations-at-shutdown.patch
knfsd: clear the recall_lru of delegations at shutdown
kgdb-ga.patch
kgdb stub for ia32 (George Anzinger's one)
kgdbL warning fix
kgdb buffer overflow fix
kgdbL warning fix
kgdb: CONFIG_DEBUG_INFO fix
x86_64 fixes
correct kgdb.txt Documentation link (against 2.6.1-rc1-mm2)
kgdb: fix for recent gcc
kgdb warning fixes
THREAD_SIZE fixes for kgdb
Fix stack overflow test for non-8k stacks
kgdb-ga.patch fix for i386 single-step into sysenter
fix TRAP_BAD_SYSCALL_EXITS on i386
add TRAP_BAD_SYSCALL_EXITS config for i386
kgdb-is-incompatible-with-kprobes
kgdb-ga-build-fix
kgdb-ga-fixes
kgdb-kill-off-highmem_start_page.patch
kgdb: kill off highmem_start_page
kgdboe-netpoll.patch
kgdb-over-ethernet via netpoll
kgdboe: fix configuration of MAC address
kgdb-x86_64-support.patch
kgdb-x86_64-support.patch for 2.6.2-rc1-mm3
kgdb-x86_64-warning-fixes
kgdb-x86_64-fix
kgdb-x86_64-serial-fix
kprobes exception notifier fix
invalidate_inodes-speedup.patch
invalidate_inodes speedup
more invalidate_inodes speedup fixes
dev-mem-restriction-patch.patch
/dev/mem restriction patch
dev-mem-restriction-patch-allow-reads.patch
dev-mem-restriction-patch: allow reads
jbd-remove-livelock-avoidance.patch
JBD: remove livelock avoidance code in journal_dirty_data()
journal_add_journal_head-debug.patch
journal_add_journal_head-debug
list_del-debug.patch
list_del debug check
unplug-can-sleep.patch
unplug functions can sleep
firestream-warnings.patch
firestream warnings
perfctr-core.patch
perfctr: core
perfctr-i386.patch
perfctr: i386
perfctr-x86-core-updates.patch
perfctr x86 core updates
perfctr-x86-driver-updates.patch
perfctr x86 driver updates
perfctr-x86-driver-cleanup.patch
perfctr: x86 driver cleanup
perfctr-prescott-fix.patch
Prescott fix for perfctr
perfctr-x86-update-2.patch
perfctr x86 update 2
perfctr-x86_64.patch
perfctr: x86_64
perfctr-x86_64-core-updates.patch
perfctr x86_64 core updates
perfctr-ppc.patch
perfctr: PowerPC
perfctr-ppc32-driver-update.patch
perfctr: ppc32 driver update
perfctr-ppc32-mmcr0-handling-fixes.patch
perfctr ppc32 MMCR0 handling fixes
perfctr-ppc32-update.patch
perfctr ppc32 update
perfctr-ppc32-update-2.patch
perfctr ppc32 update
perfctr-virtualised-counters.patch
perfctr: virtualised counters
perfctr-remap_page_range-fix.patch
virtual-perfctr-illegal-sleep.patch
virtual perfctr illegal sleep
make-perfctr_virtual-default-in-kconfig-match-recommendation.patch
Make PERFCTR_VIRTUAL default in Kconfig match recommendation in help text
perfctr-ifdef-cleanup.patch
perfctr ifdef cleanup
perfctr-update-2-6-kconfig-related-updates.patch
perfctr: Kconfig-related updates
perfctr-virtual-updates.patch
perfctr virtual updates
perfctr-virtual-cleanup.patch
perfctr: virtual cleanup
perfctr-ppc32-preliminary-interrupt-support.patch
perfctr ppc32 preliminary interrupt support
perfctr-update-5-6-reduce-stack-usage.patch
perfctr: reduce stack usage
perfctr-interrupt-support-kconfig-fix.patch
perfctr interrupt_support Kconfig fix
perfctr-low-level-documentation.patch
perfctr low-level documentation
perfctr-inheritance-1-3-driver-updates.patch
perfctr inheritance: driver updates
perfctr-inheritance-2-3-kernel-updates.patch
perfctr inheritance: kernel updates
perfctr-inheritance-3-3-documentation-updates.patch
perfctr inheritance: documentation updates
perfctr-inheritance-locking-fix.patch
perfctr inheritance locking fix
perfctr-api-changes-first-step.patch
perfctr API changes: first step
perfctr-virtual-update.patch
perfctr virtual update
perfctr-x86-64-ia32-emulation-fix.patch
perfctr x86-64 ia32 emulation fix
perfctr-sysfs-update-1-4-core.patch
perfctr sysfs update: core
perfctr-sysfs-update.patch
Perfctr sysfs update
perfctr-sysfs-update-2-4-x86.patch
perfctr sysfs update: x86
perfctr-sysfs-update-3-4-x86-64.patch
perfctr sysfs update: x86-64
perfctr-sysfs-update-4-4-ppc32.patch
perfctr sysfs update: ppc32
sched-more-agressive-wake_idle.patch
sched: more agressive wake_idle()
sched-can_migrate-exception-for-idle-cpus.patch
sched: can_migrate exception for idle cpus
sched-newidle-fix.patch
sched: newidle fix
sched-active_load_balance-fixlet.patch
sched: active_load_balance() fixlet
sched-reset-cache_hot_time.patch
sched: reset cache_hot_time
schedc-whitespace-mangler.patch
sched.c whitespace mangler
sched-alter_kthread_prio.patch
sched: alter_kthread_prio
sched-adjust_timeslice_granularity.patch
sched: adjust_timeslice_granularity
sched-add_requeue_task.patch
sched: add_requeue_task
requeue_granularity.patch
sched: requeue_granularity
sched-remove_interactive_credit.patch
sched: remove_interactive_credit
sched-use-cached-current-value.patch
sched: use cached current value
dont-hide-thread_group_leader-from-grep.patch
don't hide thread_group_leader() from grep
sched-no-need-to-recalculate-rq.patch
sched: no need to recalculate rq
export-sched_setscheduler-for-kernel-module-use.patch
export sched_setscheduler() for kernel module use
add-do_proc_doulonglongvec_minmax-to-sysctl-functions.patch
Add do_proc_doulonglongvec_minmax to sysctl functions
add-do_proc_doulonglongvec_minmax-to-sysctl-functions-fix
add-do_proc_doulonglongvec_minmax-to-sysctl-functions fix 2
add-sysctl-interface-to-sched_domain-parameters.patch
Add sysctl interface to sched_domain parameters
preempt-smp.patch
improve preemption on SMP
preempt-smp-_raw_read_trylock-bias-fix.patch
preempt-smp _raw_read_trylock bias fix
preempt-cleanup.patch
preempt cleanup
preempt-cleanup-fix.patch
preempt-cleanup-fix
add-lock_need_resched.patch
add lock_need_resched()
sched-add-cond_resched_softirq.patch
sched: add cond_resched_softirq()
sched-ext3-fix-scheduling-latencies-in-ext3.patch
sched: ext3: fix scheduling latencies in ext3
break-latency-in-invalidate_list.patch
break latency in invalidate_list()
sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent.patch
sched: vfs: fix scheduling latencies in prune_dcache() and select_parent()
sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent-fix.patch
sched-vfs-fix-scheduling-latencies-in-prune_dcache-and-select_parent fix
sched-net-fix-scheduling-latencies-in-netstat.patch
sched: net: fix scheduling latencies in netstat
sched-net-fix-scheduling-latencies-in-__release_sock.patch
sched: net: fix scheduling latencies in __release_sock
sched-mm-fix-scheduling-latencies-in-unmap_vmas.patch
sched: mm: fix scheduling latencies in unmap_vmas()
sched-mm-fix-scheduling-latencies-in-get_user_pages.patch
sched: mm: fix scheduling latencies in get_user_pages()
sched-mm-fix-scheduling-latencies-in-filemap_sync.patch
sched: mm: fix scheduling latencies in filemap_sync()
fix-keventd-execution-dependency.patch
fix keventd execution dependency
sched-fix-scheduling-latencies-in-mttrc.patch
sched: fix scheduling latencies in mttr.c
sched-fix-scheduling-latencies-in-mttrc-reenables-interrupts.patch
sched-fix-scheduling-latencies-in-mttrc reenables interrupts
sched-fix-scheduling-latencies-in-vgaconc.patch
sched: fix scheduling latencies in vgacon.c
sched-fix-scheduling-latencies-for-preempt-kernels.patch
sched: fix scheduling latencies for !PREEMPT kernels
idle-thread-preemption-fix.patch
idle thread preemption fix
oprofile-smp_processor_id-fixes.patch
oprofile smp_processor_id() fixes
fix-smp_processor_id-warning-in-numa_node_id.patch
Fix smp_processor_id() warning in numa_node_id()
replace-numnodes-with-node_online_map-alpha.patch
Subject: [RFC PATCH 1/10] Replace 'numnodes' with 'node_online_map' - alpha
replace-numnodes-with-node_online_map-arm.patch
Subject: [RFC PATCH 2/10] Replace 'numnodes' with 'node_online_map' - arm
replace-numnodes-with-node_online_map-i386.patch
Subject: [RFC PATCH 3/10] Replace 'numnodes' with 'node_online_map' - i386
replace-numnodes-with-node_online_map-ia64.patch
Subject: [RFC PATCH 4/10] Replace 'numnodes' with 'node_online_map' - ia64
replace-numnodes-with-node_online_map-m32r.patch
Subject: [RFC PATCH 5/10] Replace 'numnodes' with 'node_online_map' - m32r
replace-numnodes-with-node_online_map-mips.patch
Subject: [RFC PATCH 6/10] Replace 'numnodes' with 'node_online_map' - mips
replace-numnodes-with-node_online_map-parisc.patch
Subject: [RFC PATCH 7/10] Replace 'numnodes' with 'node_online_map' - parisc
replace-numnodes-with-node_online_map-ppc64.patch
Subject: [RFC PATCH 8/10] Replace 'numnodes' with 'node_online_map' - ppc64
replace-numnodes-with-node_online_map-x86_64.patch
Subject: [RFC PATCH 9/10] Replace 'numnodes' with 'node_online_map' - x86_64
replace-numnodes-with-node_online_map.patch
Subject: [RFC PATCH 10/10] Replace 'numnodes' with 'node_online_map' - arch-independent
vmtrunc-truncate_count-not-atomic.patch
vmtrunc: truncate_count not atomic
vmtrunc-restore-unmap_vmas-zap_bytes.patch
vmtrunc: restore unmap_vmas zap_bytes
vmtrunc-unmap_mapping_range_tree.patch
vmtrunc: unmap_mapping_range_tree
vmtrunc-unmap_mapping-dropping-i_mmap_lock.patch
vmtrunc: unmap_mapping dropping i_mmap_lock
vmtrunc-vm_truncate_count-race-caution.patch
vmtrunc: vm_truncate_count race caution
vmtrunc-bug-if-page_mapped.patch
vmtrunc: bug if page_mapped
vmtrunc-restart_addr-in-truncate_count.patch
vmtrunc: restart_addr in truncate_count
remove-the-bkl-by-turning-it-into-a-semaphore.patch
remove the BKL by turning it into a semaphore
oprofile-preempt-warning-fixes.patch
oprofile preempt warning fixes
smp_processor_id-commentary.patch
smp_processor_id() commentary
cpu_down-warning-fix.patch
cpu_down() warning fix
linux-2.6.8.1-49-rpc_workqueue.patch
nfs: RPC: Convert rpciod into a work queue for greater flexibility
linux-2.6.8.1-50-rpc_queue_lock.patch
nfs: RPC: Remove the rpc_queue_lock global spinlock
allow-modular-ide-pnp.patch
allow modular ide-pnp
allow-x86_64-to-reenable-interrupts-on-contention.patch
Allow x86_64 to reenable interrupts on contention
i386-cpu-hotplug-updated-for-mm.patch
i386 CPU hotplug updated for -mm
ppc64-fix-cpu-hotplug.patch
ppc64: fix hotplug cpu
serialize-access-to-ide-devices.patch
serialize access to ide devices
disable-atykb-warning.patch
disable atykb "too many keys pressed" warning
export-file_ra_state_init-again.patch
Export file_ra_state_init() again
cachefs-filesystem.patch
CacheFS filesystem
numa-policies-for-file-mappings-mpol_mf_move-cachefs.patch
numa-policies-for-file-mappings-mpol_mf_move for cachefs
cachefs-release-search-records-lest-they-return-to-haunt-us.patch
CacheFS: release search records lest they return to haunt us
fix-64-bit-problems-in-cachefs.patch
Fix 64-bit problems in cachefs
cachefs-fixed-typos-that-cause-wrong-pointer-to-be-kunmapped.patch
cachefs: fixed typos that cause wrong pointer to be kunmapped
cachefs-return-the-right-error-upon-invalid-mount.patch
CacheFS: return the right error upon invalid mount
fix-cachefs-barrier-handling-and-other-kernel-discrepancies.patch
Fix CacheFS barrier handling and other kernel discrepancies
remove-error-from-linux-cachefsh.patch
Remove #error from linux/cachefs.h
cachefs-warning-fix-2.patch
cachefs warning fix 2
cachefs-linkage-fix-2.patch
cachefs linkage fix
cachefs-build-fix.patch
cachefs build fix
cachefs-documentation.patch
CacheFS documentation
add-page-becoming-writable-notification.patch
Add page becoming writable notification
add-page-becoming-writable-notification-fix.patch
do_wp_page_mk_pte_writable() fix
provide-a-filesystem-specific-syncable-page-bit.patch
Provide a filesystem-specific sync'able page bit
provide-a-filesystem-specific-syncable-page-bit-fix.patch
provide-a-filesystem-specific-syncable-page-bit-fix
provide-a-filesystem-specific-syncable-page-bit-fix-2.patch
provide-a-filesystem-specific-syncable-page-bit-fix-2
make-afs-use-cachefs.patch
Make AFS use CacheFS
afs-cachefs-dependency-fix.patch
afs-cachefs-dependency-fix
split-general-cache-manager-from-cachefs.patch
Split general cache manager from CacheFS
turn-cachefs-into-a-cache-backend.patch
Turn CacheFS into a cache backend
rework-the-cachefs-documentation-to-reflect-fs-cache-split.patch
Rework the CacheFS documentation to reflect FS-Cache split
update-afs-client-to-reflect-cachefs-split.patch
Update AFS client to reflect CacheFS split
assign_irq_vector-section-fix.patch
assign_irq_vector __init section fix
kexec-i8259-shutdowni386.patch
kexec: i8259-shutdown.i386
kexec-i8259-shutdown-x86_64.patch
kexec: x86_64 i8259 shutdown
kexec-apic-virtwire-on-shutdowni386patch.patch
kexec: apic-virtwire-on-shutdown.i386.patch
kexec-apic-virtwire-on-shutdownx86_64.patch
kexec: apic-virtwire-on-shutdown.x86_64
kexec-ioapic-virtwire-on-shutdowni386.patch
kexec: ioapic-virtwire-on-shutdown.i386
kexec-apic-virt-wire-fix.patch
kexec: apic-virt-wire fix
kexec-ioapic-virtwire-on-shutdownx86_64.patch
kexec: ioapic-virtwire-on-shutdown.x86_64
kexec-e820-64bit.patch
kexec: e820-64bit
kexec-kexec-generic.patch
kexec: kexec-generic
kexec-ide-spindown-fix.patch
kexec-ide-spindown-fix
kexec-ifdef-cleanup.patch
kexec ifdef cleanup
kexec-machine_shutdownx86_64.patch
kexec: machine_shutdown.x86_64
kexec-kexecx86_64.patch
kexec: kexec.x86_64
kexec-kexecx86_64-4level-fix.patch
kexec-kexecx86_64-4level-fix
kexec-machine_shutdowni386.patch
kexec: machine_shutdown.i386
kexec-kexeci386.patch
kexec: kexec.i386
kexec-use_mm.patch
kexec: use_mm
kexec-loading-kernel-from-non-default-offset.patch
kexec: loading kernel from non-default offset
kexec-loading-kernel-from-non-default-offset-fix.patch
kdump: fix bss compile error
kexec-enabling-co-existence-of-normal-kexec-kernel-and-panic-kernel.patch
kexec: nabling co-existence of normal kexec kernel and panic kernel
kexec-ppc-support.patch
kexec: ppc support
crashdump-documentation.patch
crashdump: documentation
crashdump-memory-preserving-reboot-using-kexec.patch
crashdump: memory preserving reboot using kexec
crashdump-memory-preserving-reboot-using-kexec-fix.patch
kdump: Fix for boot problems on SMP
kdump-config_discontigmem-fix.patch
kdump: CONFIG_DISCONTIGMEM fix
crashdump-routines-for-copying-dump-pages.patch
crashdump: routines for copying dump pages
crashdump-routines-for-copying-dump-pages-kmap-fiddle.patch
crashdump-routines-for-copying-dump-pages-kmap-fiddle
crashdump-kmap-build-fix.patch
crashdump kmap build fix
crashdump-register-snapshotting-before-kexec-boot.patch
crashdump: register snapshotting before kexec boot
crashdump-elf-format-dump-file-access.patch
crashdump: ELF format dump file access
crashdump-linear-raw-format-dump-file-access.patch
crashdump: linear/raw format dump file access
crashdump-minor-bug-fixes-to-kexec-crashdump-code.patch
crashdump: minor bug fixes to kexec crashdump code
crashdump-cleanups-to-the-kexec-based-crashdump-code.patch
crashdump: cleanups to the kexec based crashdump code
x86-rename-apic_mode_exint.patch
x86: rename APIC_MODE_EXINT
x86-local-apic-fix.patch
x86: local apic fix
new-bitmap-list-format-for-cpusets.patch
new bitmap list format (for cpusets)
cpusets-big-numa-cpu-and-memory-placement.patch
cpusets - big numa cpu and memory placement
cpusets-fix-cpuset_get_dentry.patch
cpusets : fix cpuset_get_dentry()
cpusets-fix-race-in-cpuset_add_file.patch
cpusets: fix race in cpuset_add_file()
cpusets-remove-more-casts.patch
cpusets: remove more casts
cpusets-make-config_cpusets-the-default-in-sn2_defconfig.patch
cpusets: make CONFIG_CPUSETS the default in sn2_defconfig
cpusets-document-proc-status-allowed-fields.patch
cpusets: document proc status allowed fields
cpusets-dont-export-proc_cpuset_operations.patch
Cpusets - Dont export proc_cpuset_operations
cpusets-display-allowed-masks-in-proc-status.patch
cpusets: display allowed masks in proc status
cpusets-simplify-cpus_allowed-setting-in-attach.patch
cpusets: simplify cpus_allowed setting in attach
cpusets-remove-useless-validation-check.patch
cpusets: remove useless validation check
cpusets-config_cpusets-depends-on-smp.patch
Cpusets: CONFIG_CPUSETS depends on SMP
cpusets-tasks-file-simplify-format-fixes.patch
Cpusets tasks file: simplify format, fixes
cpusets-simplify-memory-generation.patch
Cpusets: simplify memory generation
cpusets-interoperate-with-hotplug-online-maps.patch
cpusets: interoperate with hotplug online maps
cpusets-alternative-fix-for-possible-race-in.patch
cpusets: alternative fix for possible race in cpuset_tasks_read()
cpusets-remove-casts.patch
cpusets: remove void* typecasts
reiser4-sb_sync_inodes.patch
reiser4: vfs: add super_operations.sync_inodes()
reiser4-allow-drop_inode-implementation.patch
reiser4: export vfs inode.c symbols
reiser4-truncate_inode_pages_range.patch
reiser4: vfs: add truncate_inode_pages_range()
reiser4-export-remove_from_page_cache.patch
reiser4: export pagecache add/remove functions to modules
reiser4-export-page_cache_readahead.patch
reiser4: export page_cache_readahead to modules
reiser4-reget-page-mapping.patch
reiser4: vfs: re-check page->mapping after calling try_to_release_page()
reiser4-rcu-barrier.patch
reiser4: add rcu_barrier() synchronization point
reiser4-export-inode_lock.patch
reiser4: export inode_lock to modules
reiser4-export-pagevec-funcs.patch
reiser4: export pagevec functions to modules
reiser4-export-radix_tree_preload.patch
reiser4: export radix_tree_preload() to modules
reiser4-export-find_get_pages.patch
reiser4-radix-tree-tag.patch
reiser4: add new radix tree tag
reiser4-radix_tree_lookup_slot.patch
reiser4: add radix_tree_lookup_slot()
reiser4-perthread-pages.patch
reiser4: per-thread page pools
reiser4-unstatic-kswapd.patch
reiser4: make kswapd() unstatic for debug
reiser4-include-reiser4.patch
reiser4: add to build system
reiser4-doc.patch
reiser4: documentation
reiser4-only.patch
reiser4: main fs
reiser4-recover-read-performance.patch
reiser4: recover read performance
reiser4-export-find_get_pages_tag.patch
reiser4-export-find_get_pages_tag
reiser4-add-missing-context.patch
add-acpi-based-floppy-controller-enumeration.patch
Add ACPI-based floppy controller enumeration.
possible-dcache-bug-debugging-patch.patch
Possible dcache BUG: debugging patch
3c59x-reload-eeprom-values-at-rmmod-for-needy-cards.patch
3c59x: reload EEPROM values at rmmod for needy cards
3c59x-remove-eeprom_reset-for-3c905b.patch
3c59x: remove EEPROM_RESET for 3c905B
3c59x-add-eeprom_reset-for-3c900-boomerang.patch
3c59x: Add EEPROM_RESET for 3c900 Boomerang
3c59x-pm-fix.patch
3c59x: enable power management unconditionally
3c59x-missing-pci_disable_device.patch
3c59x: missing pci_disable_device
3c59x-use-netdev_priv.patch
3c59x: use netdev_priv
3c59x-make-use-of-generic_mii_ioctl.patch
3c59x: Make use of generic_mii_ioctl
3c59x-vortex-select-mii.patch
3c59x: VORTEX select MII
3c59x-support-more-ethtool_ops.patch
3c59x: support more ethtool_ops
serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
serial: add support for non-standard XTALs to 16c950 driver
add-support-for-possio-gcc-aka-pcmcia-siemens-mc45.patch
Add support for Possio GCC AKA PCMCIA Siemens MC45
new-serial-flow-control.patch
new serial flow control
mpsc-driver-patch.patch
serial: MPSC driver
vm-pageout-throttling.patch
vm: pageout throttling
revert-allow-oem-written-modules-to-make-calls-to-ia64-oem-sal-functions.patch
revert "allow OEM written modules to make calls to ia64 OEM SAL functions"
md-improve-hash-code-in-linearc.patch
md: improve 'hash' code in linear.c
md-add-interface-for-userspace-monitoring-of-events.patch
md: add interface for userspace monitoring of events.
make-acpi_bus_register_driver-consistent-with-pci_register_driver-again.patch
make acpi_bus_register_driver() consistent with pci_register_driver()
enforce-a-gap-between-heap-and-stack.patch
Enforce a gap between heap and stack
remove-lock_section-from-x86_64-spin_lock-asm.patch
remove LOCK_SECTION from x86_64 spin_lock asm
kfree_skb-dump_stack.patch
kfree_skb-dump_stack
for-mm-only-remove-remap_page_range-completely.patch
vm: for -mm only: remove remap_page_range() completely
cancel_rearming_delayed_work.patch
cancel_rearming_delayed_work()
make cancel_rearming_delayed_workqueue static
ipvs-deadlock-fix.patch
ipvs deadlock fix
minimal-ide-disk-updates.patch
Minimal ide-disk updates
no-buddy-bitmap-patch-revist-intro-and-includes.patch
no buddy bitmap patch revist: intro and includes
no-buddy-bitmap-patch-revisit-for-mm-page_allocc.patch
no buddy bitmap patch revisit: for mm/page_alloc.c
no-buddy-bitmap-patch-revisit-for-mm-page_allocc-fix.patch
no-buddy-bitmap-patch-revisit-for-mm-page_allocc fix
no-buddy-bitmap-patch-revist-for-ia64.patch
no buddy bitmap patch revist: for ia64
no-buddy-bitmap-patch-revist-for-ia64-fix.patch
no-buddy-bitmap-patch-revist-for-ia64 fix
use-find_trylock_page-in-free_swap_and_cache-instead-of-hand-coding.patch
use find_trylock_page in free_swap_and_cache instead of hand coding
fbdev-sis-framebuffer-driver-update-1717.patch
fbdev: SiS framebuffer driver update 1.7.17
fbdev-sysfs-fix.patch
fbdev: sysfs fix
pm2fb-module-parameters-and-module-conditional-code.patch
pm2fb: module parameters and module-conditional code
pm2fb-save-restore-memory-config.patch
pm2fb: save/restore memory config
pm2fb-use-modedb-in-modules.patch
pm2fb: use modedb in modules
pm2fb-fix-big-endian-sparc-support.patch
pm2fb: fix big-endian (Sparc) support
pm2fb-fix-fbi-image-display-on-24-bit-depth-big-endian.patch
pm2fb: fix fbi image display on 24 bit depth big endian
fix-rom-enable-disable-in-r128-and-radeon-fb-drivers.patch
fix ROM enable/disable in r128 and radeon fb drivers
fbdev-cleanup-i2c-code-of-rivafb.patch
fbdev: Cleanup i2c code of rivafb
fbdev-revive-bios-less-booting-for-rage-xl-cards.patch
fbdev: Revive BIOS-less booting for Rage XL cards
fbdev-revive-global_mode_option.patch
fbdev: Revive global_mode_option
fbcon-fbdev-add-blanking-notification.patch
fbcon/fbdev: Add blanking notification
fbcon-fbdev-add-blanking-notification-fix.patch
fbcon-fbdev-add-blanking-notification-fix
fbdev-check-return-value-of-fb_add_videomode.patch
fbdev: Check return value of fb_add_videomode
fbdev-do-a-symbol_put-for-each-symbol_get-in-savagefb.patch
fbdev: Do a symbol_put for each symbol_get in savagefb
fbdev-add-viewsonic-pf775a-to-broken-display-database.patch
fbdev: Add Viewsonic PF775a to broken display database
fbdev-fix-default-timings-in-vga16fb.patch
fbdev: Fix default timings in vga16fb
fbdev-reduce-stack-usage-of-intelfb.patch
fbdev: Reduce stack usage of intelfb
zr36067-driver-correct-jpeg-app-com-markers.patch
zr36067 driver - correct jpeg app/com markers
zr36067-driver-ppc-be-port.patch
zr36067 driver - ppc/be port
zr36067-driver-reduce-stack-size-usage.patch
zr36067 driver - reduce stack size usage
raid6-altivec-support.patch
raid6: altivec support
remove-export_symbol_novers.patch
Remove EXPORT_SYMBOL_NOVERS
figure-out-who-is-inserting-bogus-modules.patch
Figure out who is inserting bogus modules
use-mmiowb-in-qla1280c.patch
use mmiowb in qla1280.c
readpage-vs-invalidate-fix.patch
readpage-vs-invalidate fix
invalidate_inode_pages-mmap-coherency-fix.patch
invalidate_inode_pages2() mmap coherency fix
cputime-introduce-cputime.patch
cputime: introduce cputime
cputime-fix-do_setitimer.patch
cputime: fix do_setitimer.
cputime-missing-pieces.patch
cputime: missing pieces.
mm-check_rlimit-oops-on-p-signal.patch
check_rlimit oops on p->signal
cputime-microsecond-based-cputime-for-s390.patch
cputime: microsecond based cputime for s390
detect-atomic-counter-underflows.patch
detect atomic counter underflows
lock-initializer-unifying-batch-2-alpha.patch
Lock initializer unifying: ALPHA
lock-initializer-unifying-batch-2-ia64.patch
Lock initializer unifying: IA64
lock-initializer-unifying-batch-2-m32r.patch
Lock initializer unifying: M32R
lock-initializer-unifying-batch-2-mips.patch
Lock initializer unifying: MIPS
lock-initializer-unifying-batch-2-misc-drivers.patch
Lock initializer unifying: Misc drivers
lock-initializer-unifying-batch-2-block-devices.patch
Lock initializer unifying: Block devices
lock-initializer-unifying-batch-2-drm.patch
Lock initializer unifying: DRM
lock-initializer-unifying-batch-2-character-devices.patch
Lock initializer unifying: character devices
lock-initializer-unifying-batch-2-rio.patch
Lock initializer unifying: RIO
lock-initializer-unifying-batch-2-firewire.patch
Lock initializer unifying: Firewire
lock-initializer-unifying-batch-2-isdn.patch
Lock initializer unifying: ISDN
lock-initializer-unifying-batch-2-raid.patch
Lock initializer unifying: Raid
lock-initializer-unifying-batch-2-media-drivers.patch
Lock initializer unifying: media drivers
lock-initializer-unifying-batch-2-drivers-serial.patch
Lock initializer unifying: drivers/serial
lock-initializer-unifying-batch-2-filesystems.patch
Lock initializer unifying: Filesystems
lock-initializer-unifying-batch-2-video.patch
Lock initializer unifying: Video
lock-initializer-unifying-batch-2-sound.patch
Lock initializer unifying: sound
lock-initializer-cleanup-common-headers.patch
Lock initializer cleanup (common headers)
lock-initializer-cleanup-character-devices.patch
Lock initializer cleanup (character devices)
lock-initializer-cleanup-core.patch
Lock initializer cleanup (Core)
moxa-update-status-of-moxa-smartio-driver.patch
moxa: Update status of Moxa Smartio driver
moxa-remove-ancient-changelog-readmemoxa.patch
moxa: Remove ancient changelog README.moxa
moxa-remove-readmemoxa-from-documentation-00-index.patch
moxa: Remove README.moxa from Documentation/00-INDEX
specialix-remove-bouncing-e-mail-address.patch
specialix: remove bouncing e-mail address
stallion-update-to-documentation-stalliontxt.patch
stallion: Update to Documentation/stallion.txt
riscom8-update-staus-and-documentation-of-driver.patch
riscom8: Update staus and documentation of driver
pm-remove-outdated-docs.patch
From: Pavel Machek <[email protected]>
Subject: pm: remove outdated docs
docs-add-sparse-howto.patch
From: Pavel Machek <[email protected]>
Subject: docs: add sparse howto
cciss-documentation-update.patch
cciss: Documentation update
cciss-correct-mailing-list-address-in-source-code.patch
cciss: Correct mailing list address in source code
cpqarray-correct-mailing-list-address-in-source-code.patch
cpqarray: Correct mailing list address in source code
sh-remove-x86-specific-help-in-kconfig.patch
sh: Remove x86-specific help in Kconfig
cyclades-put-readmecycladez-in-documentation-serial.patch
cyclades: Put README.cycladeZ in Documentation/serial
tipar-document-driver-options.patch
tipar: Document driver options
tipar-code-cleanup.patch
tipar: Code cleanup
eth1394-module_parm-conversion.patch
eth1394 MODULE_PARM conversion
isapnp-module_param-conversion.patch
isapnp module_param conversion
sr-module_param-conversion.patch
sr module_param conversion
media-video-module_param-conversion.patch
media/video module_param conversion
btaudio-module_param-conversion.patch
btaudio module_param conversion
small-drivers-char-rio-cleanups-fwd.patch
small drivers/char/rio/ cleanups
small-char-generic_serialc-cleanup-fwd.patch
small char/generic_serial.c cleanup
debug_bugverbose-for-i386-fwd.patch
DEBUG_BUGVERBOSE for i386
telephony-ixjc-cleanup-fwd.patch
telephony/ixj.c cleanup
char-cycladesc-remove-unused-code-fwd.patch
char/cyclades.c: remove unused code
oss-ac97-quirk-facility.patch
oss: AC97 quirk facility
oss-ac97-quirk-facility-fix.patch
oss-ac97-quirk-facility fix
ext3-use-generic_open_file-to-fix-possible-preemption-bugs.patch
ext3: use generic_open_file to fix possible preemption bugs
bttv-i2cc-make-two-functions-static.patch
bttv-i2c.c: make two functions static
bttv-riscc-make-some-functions-static.patch
bttv-risc.c: make some functions static
bttv-help-fix.patch
bttv help fix
zoran_driverc-make-zoran_num_formats-static.patch
zoran_driver.c: make zoran_num_formats static
media-video-msp3400c-remove-unused-struct-d1.patch
media/video/msp3400.c: remove unused struct d1
zoran_devicec-make-zr36057_init_vfe-static.patch
zoran_device.c: make zr36057_init_vfe static
drivers-media-video-the-easy-cleanups.patch
drivers/media/video: the easy cleanups
small-ftape-cleanups-fwd.patch
small ftape cleanups
reiser3-cleanups.patch
reiser3 cleanups
cdromc-make-several-functions-static.patch
cdrom.c: make several functions static (fwd)
fs-coda-psdevc-shouldnt-include-lph.patch
fs/coda/psdev.c shouldn't include lp.h
remove-early_param-tests.patch
remove early_param test code
MODULE_PARM-allmod.patch
MODULE_PARM conversions
MODULE_PARM-allyes.patch
MODULE_PARM conversions
lockd-fix-two-struct-definitions.patch
lockd: fix two struct definitions
small-mca-cleanups-fwd.patch
small MCA cleanups
small-drivers-media-radio-cleanups-fwd.patch
small drivers/media/radio/ cleanups
ifdef-typos-arch_ppc_platforms_prep_setupc.patch
ifdef typos: arch_ppc_platforms_prep_setup.c
ifdef-typos-arch_ppc_platforms_prep_setupc-another-one.patch
ifdef typos: arch_ppc_platforms_prep_setup.c -another one
ifdef-typos-arch_ppc_syslib_ppc4xx_dmac.patch
ifdef typos: arch_ppc_syslib_ppc4xx_dma.c
ifdef-typos-arch_sh_boards_renesas_hs7751rvoip_ioc.patch
ifdef typos: arch_sh_boards_renesas_hs7751rvoip_io.c
ifdef-typos-drivers_char_ipmi_ipmi_si_intfc.patch
ifdef typos: drivers_char_ipmi_ipmi_si_intf.c
ifdef-typos-drivers_net_wireless_wavelan_csc.patch
ifdef typos: drivers_net_wireless_wavelan_cs.c
ifdef-typos-drivers_usb_net_usbnetc.patch
ifdef typos: drivers_usb_net_usbnet.c
ifdef-typos-mips-au100_usb_device.patch
ifdef typos mips: AU1[0X]00_USB_DEVICE
ipmi-use-c99-struct-inits.patch
IPMI: use C99 struct inits.
drm-remove-unused-functions-fwd.patch
DRM: remove unused functions
floppyc-remove-an-unused-function-fwd.patch
floppy.c: remove an unused function
media-video-ir-kbd-i2cc-remove-an-unused-function-fwd.patch
media/video/ir-kbd-i2c.c: remove an unused function
nfs-remove-an-unused-function-fwd.patch
NFS: remove an unused function
watchdog-machzwdc-remove-unused-functions-fwd.patch
watchdog/machzwd.c: remove unused functions
video-drivers-remove-unused-functions-fwd.patch
video drivers: remove unused functions
isdn-b1pcmciac-remove-an-unused-variable-fwd.patch
ISDN b1pcmcia.c: remove an unused variable
binfmt_scriptc-make-struct-script_format-static-fwd.patch
binfmt_script.c: make struct script_format static
bioc-make-bio_destructor-static-fwd.patch
bio.c: make bio_destructor static
devpts-inodec-make-one-struct-static-fwd.patch
devpts/inode.c: make one struct static
small-proc_fs-cleanups-fwd.patch
small proc_fs cleanups
kernel-timerc-comment-typo.patch
Fix kernel/timer.c comment typo
mark-qnx4fs_rw-as-broken-fwd.patch
mark QNX4FS_RW as BROKEN
oss-remove-unused-functions-fwd.patch
OSS: remove unused functions
dvb-av7110_hwc-remove-unused-functions-fwd.patch
DVB av7110_hw.c: remove unused functions
schedc-remove-an-unused-macro-fwd.patch
sched.c: remove an unused macro
scsi-ahcic-remove-an-unused-function-fwd.patch
scsi/ahci.c: remove an unused function
scsi-aic7xxx-aic79xx_osmc-remove-an-unused-function-fwd.patch
scsi/aic7xxx/aic79xx_osm.c: remove an unused function
schedc-remove-an-unused-function-fwd.patch
sched.c: remove an unused function
prism54-small-prismcompat-cleanup-fwd.patch
prism54: small prismcompat cleanup
some-parport_pcc-cleanups-fwd.patch
some parport_pc.c cleanups
fix-typo-and-email-in-saktxt.patch
fix typo and email in SAK.txt
cris-remove-kernel-20-ifdefs-fwd.patch
cris: remove kernel 2.0 #ifdef's
afs-afs_voltypes-isnt-always-required-fwd.patch
AFS: afs_voltypes isn't always required
befs-if-0-two-unused-global-functions-fwd.patch
befs: #if 0 two unused global functions
binfmt_scriptc-make-em86_format-static.patch
binfmt_script.c: make em86_format static
remove-unused-include-asm-m68k-adb_mouseh.patch
remove unused include/asm-m68k/adb_mouse.h
scsi-aic7xxx-remove-two-useless-variables.patch
scsi/aic7xxx/: remove two useless variables
remove-in_string_c.patch
remove IN_STRING_C
remove-ct_to_secs-ct_to_usecs.patch
remove CT_TO_SECS()/CT_TO_USECS()
bttv-driverc-make-some-variables-static.patch
bttv-driver.c: make some variables static
arch-alpha-kconfig-kill-stale-reference-to-documentation-smptex.patch
arch/alpha/Kconfig: Kill stale reference to Documentation/smp.tex
init-initramfsc-make-unpack_to_rootfs-static.patch
init/initramfs.c: make unpack_to_rootfs static
oss-misc-cleanups.patch
OSS: misc cleanups
inux-269-fs-proc-basec-array-size.patch
fs/proc/base.c: array size
linux-269-fs-proc-proc_ttyc-avoid-array.patch
fs/proc/proc_tty.c: avoid array
optimize-prefetch-usage-in-list_for_each_xxx.patch
optimize prefetch() usage in list_for_each_xxx
signalc-convert-assertion-to-bug_on.patch
signal.c: convert assertion to BUG_ON()
right-severity-level-for-fatal-message.patch
Right severity level for fatal message
remove-unused-drivers-char-rio-cdprotoh.patch
remove unused drivers/char/rio/cdproto.h
remove-unused-drivers-char-rsf16fmih.patch
remove unused drivers/char/rsf16fmi.h
mtd-added-nec-upd29f064115-support.patch
mtd: added NEC uPD29F064115 support
waiting-10s-before-mounting-root-filesystem.patch
retry mounting the root filesystem at boot time
> add-page-becoming-writable-notification.patch
> Add page becoming writable notification
David, this still has the bogus address_space operation in addition to
the vm_operation. page_mkwrite only fits into the vm_operations scheme,
so please remove the address_space op. Also the code will be smaller
and faster witout that indirection..
> -ioctl-cleanup.patch
> -unlocked_ioctl.patch
> +ioctl-rework.patch
>
> New version of the dont-hold-BKL-across-ioctl patch.
For the native case the new naming is stupid. The old ioctl_unlocked
made perfect sense while ioctl_native doesn't - after all ->ioctl is
native aswell. Also this still has the useless inode * paramater in
the method signature.
> reiser4-export-inode_lock.patch
Han,s how'as the work progressing on removing these and other fishy
core changes?
> reiser4-unstatic-kswapd.patch
Andrew, could you please finally drop this one? It's not needed for
reiser4 operation at all just for some of their stranger debugging
features.
>
> reiser4-include-reiser4.patch
What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is
the logical place for it and makes dropping in a new version of the fs
easier.
> reiser4-only.patch
Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.
> remove-the-bkl-by-turning-it-into-a-semaphore.patch
> remove the BKL by turning it into a semaphore
This _smp_processor_id() mess is horribly ugly. Do you really need that
debug check?
On Mon, Jan 03, 2005 at 10:25:35AM +0000, Christoph Hellwig wrote:
> > -ioctl-cleanup.patch
> > -unlocked_ioctl.patch
> > +ioctl-rework.patch
> >
> > New version of the dont-hold-BKL-across-ioctl patch.
>
> For the native case the new naming is stupid. The old ioctl_unlocked
> made perfect sense while ioctl_native doesn't - after all ->ioctl is
> native aswell. Also this still has the useless inode * paramater in
> the method signature.
Here's a better and much simpler patch:
- add ->unlocked_ioctl method and a do_ioctl wrapper in ioctl.c so all
places calling ->ioctl get it.
- add ->compat_ioctl method and call it in compat_sys_ioctl before doing
the hash lookup for registered handlers.
- streamline compat_sys_ioctl and move the complex error reporting into
a function of it's own
--- 1.52/Documentation/filesystems/Locking 2004-10-25 11:41:20 +02:00
+++ edited/Documentation/filesystems/Locking 2005-01-03 12:23:34 +01:00
@@ -350,6 +350,8 @@
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int,
unsigned long);
+ long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+ long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
@@ -383,6 +385,8 @@
readdir: no
poll: no
ioctl: yes (see below)
+unlocked_ioctl: no (see below)
+compat_ioctl: no
mmap: no
open: maybe (see below)
flush: no
@@ -427,6 +431,9 @@
->ioctl() or kill the latter completely. One of the problems is that for
anything that resembles union-mount we won't have a struct file for all
components. And there are other reasons why the current interface is a mess...
+
+->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
+doesn't take the BKL.
->read on directories probably must go away - we should just enforce -EISDIR
in sys_read() and friends.
--- 1.47/fs/compat.c 2004-12-10 18:57:46 +01:00
+++ edited/fs/compat.c 2005-01-03 13:58:00 +01:00
@@ -397,77 +397,87 @@
}
EXPORT_SYMBOL(unregister_ioctl32_conversion);
+static void compat_ioctl_error(struct file *filp, unsigned int fd,
+ unsigned int cmd, unsigned long arg)
+{
+ char buf[10];
+ char *fn = "?";
+ char *path;
+
+ /* find the name of the device. */
+ path = (char *)__get_free_page(GFP_KERNEL);
+ if (path) {
+ fn = d_path(filp->f_dentry, filp->f_vfsmnt, path, PAGE_SIZE);
+ if (IS_ERR(fn))
+ fn = "?";
+ }
+
+ sprintf(buf,"'%c'", (cmd>>24) & 0x3f);
+ if (!isprint(buf[1]))
+ sprintf(buf, "%02x", buf[1]);
+ printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
+ "cmd(%08x){%s} arg(%08x) on %s\n",
+ current->comm, current->pid,
+ (int)fd, (unsigned int)cmd, buf,
+ (unsigned int)arg, fn);
+
+ if (path)
+ free_page((unsigned long)path);
+}
+
asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
unsigned long arg)
{
- struct file * filp;
+ struct file *filp;
int error = -EBADF;
struct ioctl_trans *t;
filp = fget(fd);
- if(!filp)
- goto out2;
-
- if (!filp->f_op || !filp->f_op->ioctl) {
- error = sys_ioctl (fd, cmd, arg);
+ if (!filp)
goto out;
+
+ if (!filp->f_op) {
+ if (!filp->f_op->ioctl)
+ goto do_ioctl;
+ } else if (filp->f_op->compat_ioctl) {
+ error = filp->f_op->compat_ioctl(filp, cmd, arg);
+ goto out_fput;
}
down_read(&ioctl32_sem);
+ for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
+ if (t->cmd == cmd)
+ goto found_handler;
+ }
+ up_read(&ioctl32_sem);
- t = ioctl32_hash_table[ioctl32_hash (cmd)];
-
- while (t && t->cmd != cmd)
- t = t->next;
- if (t) {
- if (t->handler) {
- lock_kernel();
- error = t->handler(fd, cmd, arg, filp);
- unlock_kernel();
- up_read(&ioctl32_sem);
- } else {
- up_read(&ioctl32_sem);
- error = sys_ioctl(fd, cmd, arg);
- }
+ if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
+ error = siocdevprivate_ioctl(fd, cmd, arg);
} else {
+ static int count;
+
+ if (++count <= 50)
+ compat_ioctl_error(filp, fd, cmd, arg);
+ error = -EINVAL;
+ }
+
+ goto out_fput;
+
+ found_handler:
+ if (t->handler) {
+ lock_kernel();
+ error = t->handler(fd, cmd, arg, filp);
+ unlock_kernel();
up_read(&ioctl32_sem);
- if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
- error = siocdevprivate_ioctl(fd, cmd, arg);
- } else {
- static int count;
- if (++count <= 50) {
- char buf[10];
- char *fn = "?";
- char *path;
-
- path = (char *)__get_free_page(GFP_KERNEL);
-
- /* find the name of the device. */
- if (path) {
- fn = d_path(filp->f_dentry,
- filp->f_vfsmnt, path,
- PAGE_SIZE);
- if (IS_ERR(fn))
- fn = "?";
- }
-
- sprintf(buf,"'%c'", (cmd>>24) & 0x3f);
- if (!isprint(buf[1]))
- sprintf(buf, "%02x", buf[1]);
- printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
- "cmd(%08x){%s} arg(%08x) on %s\n",
- current->comm, current->pid,
- (int)fd, (unsigned int)cmd, buf,
- (unsigned int)arg, fn);
- if (path)
- free_page((unsigned long)path);
- }
- error = -EINVAL;
- }
+ goto out_fput;
}
-out:
+
+ up_read(&ioctl32_sem);
+ do_ioctl:
+ error = sys_ioctl(fd, cmd, arg);
+ out_fput:
fput(filp);
-out2:
+ out:
return error;
}
--- 1.14/fs/ioctl.c 2004-10-19 07:26:38 +02:00
+++ edited/fs/ioctl.c 2005-01-03 14:01:24 +01:00
@@ -16,7 +16,29 @@
#include <asm/uaccess.h>
#include <asm/ioctls.h>
-static int file_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
+static long do_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg)
+{
+ int error = -ENOTTY;
+
+ if (!filp->f_op)
+ goto out;
+
+ if (filp->f_op->unlocked_ioctl) {
+ error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
+ } else if (filp->f_op->ioctl) {
+ lock_kernel();
+ error = filp->f_op->ioctl(filp->f_dentry->d_inode,
+ filp, cmd, arg);
+ unlock_kernel();
+ }
+
+ out:
+ return error;
+}
+
+static int file_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg)
{
int error;
int block;
@@ -36,7 +58,9 @@
if ((error = get_user(block, p)) != 0)
return error;
+ lock_kernel();
res = mapping->a_ops->bmap(mapping, block);
+ unlock_kernel();
return put_user(res, p);
}
case FIGETBSZ:
@@ -46,14 +70,13 @@
case FIONREAD:
return put_user(i_size_read(inode) - filp->f_pos, p);
}
- if (filp->f_op && filp->f_op->ioctl)
- return filp->f_op->ioctl(inode, filp, cmd, arg);
- return -ENOTTY;
+
+ return do_ioctl(filp, cmd, arg);
}
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
-{
+{
struct file * filp;
unsigned int flag;
int on, error = -EBADF;
@@ -63,12 +86,9 @@
goto out;
error = security_file_ioctl(filp, cmd, arg);
- if (error) {
- fput(filp);
- goto out;
- }
+ if (error)
+ goto out_fput;
- lock_kernel();
switch (cmd) {
case FIOCLEX:
set_close_on_exec(fd, 1);
@@ -100,8 +120,11 @@
/* Did FASYNC state change ? */
if ((flag ^ filp->f_flags) & FASYNC) {
- if (filp->f_op && filp->f_op->fasync)
+ if (filp->f_op && filp->f_op->fasync) {
+ lock_kernel();
error = filp->f_op->fasync(fd, filp, on);
+ unlock_kernel();
+ }
else error = -ENOTTY;
}
if (error != 0)
@@ -124,16 +147,15 @@
error = -ENOTTY;
break;
default:
- error = -ENOTTY;
if (S_ISREG(filp->f_dentry->d_inode->i_mode))
error = file_ioctl(filp, cmd, arg);
- else if (filp->f_op && filp->f_op->ioctl)
- error = filp->f_op->ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
+ else
+ error = do_ioctl(filp, cmd, arg);
+ break;
}
- unlock_kernel();
+ out_fput:
fput(filp);
-
-out:
+ out:
return error;
}
--- 1.362/include/linux/fs.h 2004-10-29 10:14:03 +02:00
+++ edited/include/linux/fs.h 2005-01-03 11:38:01 +01:00
@@ -902,8 +902,8 @@
/*
* NOTE:
- * read, write, poll, fsync, readv, writev can be called
- * without the big kernel lock held in all filesystems.
+ * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl
+ * can be called without the big kernel lock held in all filesystems.
*/
struct file_operations {
struct module *owner;
@@ -915,6 +915,8 @@
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+ long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+ long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: 2.6.10-mm1":
> > -ioctl-cleanup.patch
> > -unlocked_ioctl.patch
> > +ioctl-rework.patch
> >
> > New version of the dont-hold-BKL-across-ioctl patch.
>
> For the native case the new naming is stupid. The old ioctl_unlocked
> made perfect sense while ioctl_native doesn't - after all ->ioctl is
> native aswell. Also this still has the useless inode * paramater in
> the method signature.
Regarding the inode* parameter, the change to remove it would be trivial,
though I personally dont care and I didnt see anyone else comment on that.
Anyone?
MST
On Mon, Jan 03, 2005 at 01:11:13AM -0800, Andrew Morton wrote:
> +m32r-fix-not-to-execute-noexec-pages-0-3.patch
This patch appears to be empty. Also, quilt barfs on such things.
The patch as it appeared in broken-out/ is attached.
-- wli
On Monday, January 3, 2005 1:11 am, you wrote:
> +replace-numnodes-with-node_online_map-ia64.patch
Here are some compile fixes for this patch. Looks like simple typos. Note
that the kernel won't boot even with these fixes, I'm debugging that now
(suspect nodemask related stuff is causing the hang too).
Signed-off-by: Jesse Barnes <[email protected]>
Jesse
On Monday, January 3, 2005 2:07 am, Christoph Hellwig wrote:
> > add-page-becoming-writable-notification.patch
> > Add page becoming writable notification
>
> David, this still has the bogus address_space operation in addition to
> the vm_operation. page_mkwrite only fits into the vm_operations scheme,
> so please remove the address_space op. Also the code will be smaller
> and faster witout that indirection..
And apparently it's broken on NUMA. I couldn't find
generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA
enabled.
Jesse
When I was editing cdrom.h, I noticed that fs/isofs/compress.c was
recompiled. This patch removes the useless #include that caused the
unnecessary recompilation.
Signed-off-by: Peter Osterlund <[email protected]>
---
linux-petero/fs/isofs/compress.c | 1 -
1 files changed, 1 deletion(-)
diff -puN fs/isofs/compress.c~isofs-useless-include fs/isofs/compress.c
--- linux/fs/isofs/compress.c~isofs-useless-include 2005-01-02 22:27:41.290407816 +0100
+++ linux-petero/fs/isofs/compress.c 2005-01-02 22:27:41.292407512 +0100
@@ -28,7 +28,6 @@
#include <linux/string.h>
#include <linux/slab.h>
#include <linux/errno.h>
-#include <linux/cdrom.h>
#include <linux/init.h>
#include <linux/nls.h>
#include <linux/ctype.h>
_
--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
Make two needlessly global functions static.
Signed-off-by: Adrian Bunk <[email protected]>
Signed-off-by: Peter Osterlund <[email protected]>
---
linux-petero/drivers/block/pktcdvd.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff -puN drivers/block/pktcdvd.c~pktcdvd-static drivers/block/pktcdvd.c
--- linux/drivers/block/pktcdvd.c~pktcdvd-static 2005-01-02 22:27:26.000000000 +0100
+++ linux-petero/drivers/block/pktcdvd.c 2005-01-03 21:39:56.985007024 +0100
@@ -2627,7 +2627,7 @@ static struct miscdevice pkt_misc = {
.fops = &pkt_ctl_fops
};
-int pkt_init(void)
+static int pkt_init(void)
{
int ret;
@@ -2663,7 +2663,7 @@ out2:
return ret;
}
-void pkt_exit(void)
+static void pkt_exit(void)
{
remove_proc_entry("pktcdvd", proc_root_driver);
misc_deregister(&pkt_misc);
_
--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
Mention that a new DVD+RW disc has to be formatted before first use.
Signed-off-by: Peter Osterlund <[email protected]>
---
linux-petero/Documentation/cdrom/packet-writing.txt | 3 +++
1 files changed, 3 insertions(+)
diff -puN Documentation/cdrom/packet-writing.txt~packet-doc-fix Documentation/cdrom/packet-writing.txt
--- linux/Documentation/cdrom/packet-writing.txt~packet-doc-fix 2005-01-02 22:27:34.795395208 +0100
+++ linux-petero/Documentation/cdrom/packet-writing.txt 2005-01-02 22:27:34.798394752 +0100
@@ -43,6 +43,8 @@ shall implement "true random writes with
that it should be possible to put any filesystem with a block size >=
2KB on such a disc. For example, it should be possible to do:
+ # dvd+rw-format /dev/hdc (only needed if the disc has never
+ been formatted)
# mkudffs /dev/hdc
# mount /dev/hdc /cdrom -t udf -o rw,noatime
@@ -54,6 +56,7 @@ writes are not 32KB aligned.
Both problems can be solved by using the pktcdvd driver, which always
generates aligned writes.
+ # dvd+rw-format /dev/hdc
# pktsetup dev_name /dev/hdc
# mkudffs /dev/pktcdvd/dev_name
# mount /dev/pktcdvd/dev_name /cdrom -t udf -o rw,noatime
_
--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
Put function prototypes on a single source line to make them more
grep-friendly.
Signed-off-by: Peter Osterlund <[email protected]>
---
linux-petero/drivers/block/pktcdvd.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff -puN drivers/block/pktcdvd.c~pktcdvd-whitespace drivers/block/pktcdvd.c
--- linux/drivers/block/pktcdvd.c~pktcdvd-whitespace 2005-01-02 22:27:28.636331528 +0100
+++ linux-petero/drivers/block/pktcdvd.c 2005-01-02 22:27:28.641330768 +0100
@@ -607,8 +607,7 @@ static int pkt_set_segment_merging(struc
/*
* Copy CD_FRAMESIZE bytes from src_bio into a destination page
*/
-static void pkt_copy_bio_data(struct bio *src_bio, int seg, int offs,
- struct page *dst_page, int dst_offs)
+static void pkt_copy_bio_data(struct bio *src_bio, int seg, int offs, struct page *dst_page, int dst_offs)
{
unsigned int copy_size = CD_FRAMESIZE;
@@ -1301,8 +1300,7 @@ static void pkt_print_settings(struct pk
printk("Mode-%c disc\n", pd->settings.block_mode == 8 ? '1' : '2');
}
-static int pkt_mode_sense(struct pktcdvd_device *pd, struct packet_command *cgc,
- int page_code, int page_control)
+static int pkt_mode_sense(struct pktcdvd_device *pd, struct packet_command *cgc, int page_code, int page_control)
{
memset(cgc->cmd, 0, sizeof(cgc->cmd));
_
--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
This patch removes an unused variable in the synaptics_data struct and
deletes a no longer helpful comment. I don't think this has been used
since the very first synaptics kernel patch I submitted that did all
processing in kernel space instead of delegating most of it to the X
server.
Signed-off-by: Peter Osterlund <[email protected]>
---
linux-petero/drivers/input/mouse/synaptics.h | 2 --
1 files changed, 2 deletions(-)
diff -puN drivers/input/mouse/synaptics.h~synaptics-unused-var drivers/input/mouse/synaptics.h
--- linux/drivers/input/mouse/synaptics.h~synaptics-unused-var 2005-01-03 21:14:50.995952160 +0100
+++ linux-petero/drivers/input/mouse/synaptics.h 2005-01-03 21:14:51.011949728 +0100
@@ -101,8 +101,6 @@ struct synaptics_data {
unsigned long int ext_cap; /* Extended Capabilities */
unsigned long int identity; /* Identification */
- /* Data for normal processing */
- int old_w; /* Previous w value */
unsigned char pkt_type; /* packet type - old, new, etc */
unsigned char mode; /* current mode byte */
};
_
--
Peter Osterlund - [email protected]
http://web.telia.com/~u89404340
Hi,
While at it...
On 03 Jan 2005 21:42:09 +0100, Peter Osterlund <[email protected]> wrote:
> Make two needlessly global functions static.
>
> Signed-off-by: Adrian Bunk <[email protected]>
> Signed-off-by: Peter Osterlund <[email protected]>
> ---
>
> linux-petero/drivers/block/pktcdvd.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff -puN drivers/block/pktcdvd.c~pktcdvd-static drivers/block/pktcdvd.c
> --- linux/drivers/block/pktcdvd.c~pktcdvd-static 2005-01-02 22:27:26.000000000 +0100
> +++ linux-petero/drivers/block/pktcdvd.c 2005-01-03 21:39:56.985007024 +0100
> @@ -2627,7 +2627,7 @@ static struct miscdevice pkt_misc = {
> .fops = &pkt_ctl_fops
> };
>
> -int pkt_init(void)
> +static int pkt_init(void)
> {
> int ret;
>
__init
> @@ -2663,7 +2663,7 @@ out2:
> return ret;
> }
>
> -void pkt_exit(void)
> +static void pkt_exit(void)
> {
> remove_proc_entry("pktcdvd", proc_root_driver);
> misc_deregister(&pkt_misc);
> _
__exit
I was looking to compare RT latency between this kernel and the latest from
Ingo and I had the following warnings / errors building 2.6.10-mm1:
[no apparent compile / link errors]
*** Warning: "snd_ac97_restore_iec958" [sound/pci/ac97/snd-ac97-codec.ko]
undefined!
*** Warning: "snd_ac97_restore_status" [sound/pci/ac97/snd-ac97-codec.ko]
undefined!
*** Warning: "del_mtd_partitions" [drivers/mtd/maps/scx200_docflash.ko]
undefined!
*** Warning: "add_mtd_partitions" [drivers/mtd/maps/scx200_docflash.ko]
undefined!
...
if [ -r System.map ]; then /sbin/depmod -ae -F System.map -b
/var/tmp/kernel-2.6.10mm1-root -r 2.6.10-mm1; fi
WARNING: /var/tmp/kernel-2.6.10
mm1-root/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/snd-ac97-codec.ko
needs unknown sy
mbol snd_ac97_restore_status
WARNING: /var/tmp/kernel-2.6.10
mm1-root/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/snd-ac97-codec.ko
needs unknown sy
mbol snd_ac97_restore_iec958
WARNING: /var/tmp/kernel-2.6.10
mm1-root/lib/modules/2.6.10-mm1/kernel/drivers/mtd/maps/scx200_docflash.ko
needs unknown
symbol del_mtd_partitions
WARNING: /var/tmp/kernel-2.6.10
mm1-root/lib/modules/2.6.10-mm1/kernel/drivers/mtd/maps/scx200_docflash.ko
needs unknown
symbol add_mtd_partitions
...
The following messages after rebooting...
...
Jan 3 16:42:00 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_status
Jan 3 16:42:00 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_iec958
Jan 3 16:42:00 dws77 modprobe: WARNING: Error inserting snd_ac97_codec
(/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/
snd-ac97-codec.ko): Unknown symbol in module, or unknown parameter (see
dmesg)
Jan 3 16:42:01 dws77 modprobe: FATAL: Error inserting snd_ens1371
(/lib/modules/2.6.10-mm1/kernel/sound/pci/snd-ens137
1.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_mixer
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_bus
Jan 3 16:42:01 dws77 modprobe: WARNING: Error inserting snd_ac97_codec
(/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/
snd-ac97-codec.ko): Unknown symbol in module, or unknown parameter (see
dmesg)
Jan 3 16:42:01 dws77 modprobe: FATAL: Error inserting snd_ens1371
(/lib/modules/2.6.10-mm1/kernel/sound/pci/snd-ens137
1.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_status
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_iec958
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_mixer
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_bus
Jan 3 16:42:01 dws77 modprobe: WARNING: Error inserting snd_ac97_codec
(/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/
snd-ac97-codec.ko): Unknown symbol in module, or unknown parameter (see
dmesg)
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_status
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_iec958
Jan 3 16:42:01 dws77 modprobe: FATAL: Error inserting snd_ens1371
(/lib/modules/2.6.10-mm1/kernel/sound/pci/snd-ens137
1.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_mixer
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_bus
Jan 3 16:42:01 dws77 modprobe: WARNING: Error inserting snd_ac97_codec
(/lib/modules/2.6.10-mm1/kernel/sound/pci/ac97/
snd-ac97-codec.ko): Unknown symbol in module, or unknown parameter (see
dmesg)
Jan 3 16:42:01 dws77 modprobe: FATAL: Error inserting snd_ens1371
(/lib/modules/2.6.10-mm1/kernel/sound/pci/snd-ens137
1.ko): Unknown symbol in module, or unknown parameter (see dmesg)
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_status
Jan 3 16:42:01 dws77 kernel: snd_ac97_codec: Unknown symbol
snd_ac97_restore_iec958
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_mixer
Jan 3 16:42:01 dws77 kernel: snd_ens1371: Unknown symbol snd_ac97_bus
...
and in dmesg, the following repeated a few times:
snd_ac97_codec: Unknown symbol snd_ac97_restore_status
snd_ac97_codec: Unknown symbol snd_ac97_restore_iec958
snd_ens1371: Unknown symbol snd_ac97_mixer
snd_ens1371: Unknown symbol snd_ac97_bus
At this point, the system fails to work with my sound card.
The .config is basically the same as used previously with
2.6.10-rc3-mm1-V0.7.33-04 (Ingo's realtime patches) without problems.
[though I expected & saw plenty of unused symbols when I did
make mrproper / xconfig for 2.6.10-mm1]
To fix this, should I just add the EXPORT_SYMBOL lines for these symbols
snd_ac97_restore_status snd_ac97_restore_iec958
or is something more needed?
Thanks.
--Mark Johnson <mailto:[email protected]>
[email protected] wrote:
>
> To fix this, should I just add the EXPORT_SYMBOL lines for these symbols
> snd_ac97_restore_status snd_ac97_restore_iec958
> or is something more needed?
Probably. If that fixes it, please send the patch.
On Monday, 3 of January 2005 18:19, Jesse Barnes wrote:
> On Monday, January 3, 2005 2:07 am, Christoph Hellwig wrote:
> > > add-page-becoming-writable-notification.patch
> > > Add page becoming writable notification
> >
> > David, this still has the bogus address_space operation in addition to
> > the vm_operation. page_mkwrite only fits into the vm_operations scheme,
> > so please remove the address_space op. Also the code will be smaller
> > and faster witout that indirection..
>
> And apparently it's broken on NUMA. I couldn't find
> generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA
> enabled.
On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the
kernel, but it does not boot. It only prints this to the serial console:
Bootdata ok (command line is root=/dev/sdb3 vga=792 earlyprintk=ttyS0,57600
console=ttyS0,57600 console=tty0)
Linux version 2.6.10-mm1 (rafael@chimera) (gcc version 3.3.4 (pre 3.3.5
20040809)) #1 SMP Mon Jan 3 23:09:30 CET 2005
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
BIOS-e820: 000000003fff0000 - 000000003ffff000 (ACPI data)
BIOS-e820: 000000003ffff000 - 0000000040000000 (ACPI NVS)
BIOS-e820: 00000000ff7c0000 - 0000000100000000 (reserved)
kernel direct mapping tables upto ffff810100000000 @ 8000-c000
Scanning NUMA topology in Northbridge 24
Number of nodes 2 (10010)
Node 0 already present. Skipping
Node 1 already present. Skipping
No NUMA configuration found
Faking a node at 0000000000000000-000000003fff0000
Bootmem setup node 0 0000000000000000-000000003fff0000
No mptable found.
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:5 APIC version 16
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
Processor #1 15:5 APIC version 16
ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
ACPI: IOAPIC (id[0x03] address[0xfc9fe000] gsi_base[24])
IOAPIC[1]: apic_id 3, version 17, address 0xfc9fe000, GSI 24-27
ACPI: IOAPIC (id[0x04] address[0xfc9ff000] gsi_base[28])
IOAPIC[2]: apic_id 4, version 17, address 0xfc9ff000, GSI 28-31
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
Setting APIC routing to flat
Using ACPI (MADT) for SMP configuration information
Checking aperture...
CPU 0: aperture @ f0000000 size 128 MB
CPU 1: aperture @ f0000000 size 128 MB
and then it goes into an infinite loop that writes some garbage to the
framebuffer (yellow lines on top of the screen).
On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE
startup the box hangs for a while and I get the message like "The process for
the file protocol has terminated unexpectedly" and desktop icons are not
displayed, and I get a "cpu overload" message from arts etc.).
Please let me know if you need more information.
Greets,
RJW
--
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
-- Lewis Carroll "Alice's Adventures in Wonderland"
On Mon, Jan 03, 2005 at 05:07:08PM -0600, [email protected] wrote:
> I was looking to compare RT latency between this kernel and the latest from
> Ingo and I had the following warnings / errors building 2.6.10-mm1:
>
> [no apparent compile / link errors]
> *** Warning: "snd_ac97_restore_iec958" [sound/pci/ac97/snd-ac97-codec.ko]
> undefined!
> *** Warning: "snd_ac97_restore_status" [sound/pci/ac97/snd-ac97-codec.ko]
> undefined!
>...
> To fix this, should I just add the EXPORT_SYMBOL lines for these symbols
> snd_ac97_restore_status snd_ac97_restore_iec958
> or is something more needed?
That's not the problem, since function and definition are in the same
module.
You didn't send your .config, but looking at the code it seems
CONFIG_PM=n was the culprit.
As a workaround, it should work after enabling the following option:
Power management options (ACPI, APM)
Power Management support
This is only a workaround, I've Cc'ed the ALSA maintainers for a real
fix.
> Thanks.
> --Mark Johnson <mailto:[email protected]>
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
On Mon, Jan 03, 2005 at 05:07:08PM -0600, [email protected] wrote:
> I was looking to compare RT latency between this kernel and the latest from
> Ingo and I had the following warnings / errors building 2.6.10-mm1:
>
> [no apparent compile / link errors]
>...
> *** Warning: "del_mtd_partitions" [drivers/mtd/maps/scx200_docflash.ko]
> undefined!
> *** Warning: "add_mtd_partitions" [drivers/mtd/maps/scx200_docflash.ko]
> undefined!
>...
Known bug, fix below:
<-- snip -->
Date: Mon, 27 Dec 2004 23:50:15 +0100
From: Adrian Bunk <[email protected]>
To: "Michael S. Tsirkin" <[email protected]>
Cc: [email protected], [email protected]
Subject: [2.6 patch] add missing dependencies on MTD_PARTITIONS
On Tue, Dec 28, 2004 at 12:23:48AM +0200, Michael S. Tsirkin wrote:
> Hello!
Hi Michael!
> Sorry, I had a wrong subject.
>
> It seems that you can disable MTD partitioning support
> but enable , e.g. NAND.
> And, if you are upgrading from and older kernel without
> the paritioning option, and do oldconfig and are not careful,
> thats what you end up with.
> But, lots of code is calling del_mtd_partitions now, so you get
> unresolved del_mtd_partitions.
>
> Its easy to work around this by enabling partitioning, but
> should not the dependency be added in the relevant KConfig?
First of all thanks for your report.
You didn't send the exact error mesage.
I'm able to reproduce the following in 2.6.10-rc3-mm1:
<-- snip -->
...
LD .tmp_vmlinux1
drivers/built-in.o(.init.text+0x6464b): In function `init_scx200_docflash':
: undefined reference to `add_mtd_partitions'
drivers/built-in.o(.init.text+0x66ab8): In function `ns_init_module':
: undefined reference to `add_mtd_partitions'
drivers/built-in.o(.exit.text+0x8bf4): In function `cleanup_scx200_docflash':
: undefined reference to `del_mtd_partitions'
make: *** [.tmp_vmlinux1] Error 1
<-- snip -->
The patch below fixes them.
Please tell whether this fixes the problems you observed.
> Cc me directly, I'm not on the list.
> Thanks,
> MST
cu
Adrian
diffstat output:
drivers/mtd/maps/Kconfig | 2 +-
drivers/mtd/nand/Kconfig | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
Signed-off-by: Adrian Bunk <[email protected]>
--- linux-2.6.10-rc3-mm1-full/drivers/mtd/maps/Kconfig.old 2004-12-27 23:43:00.000000000 +0100
+++ linux-2.6.10-rc3-mm1-full/drivers/mtd/maps/Kconfig 2004-12-27 23:44:01.000000000 +0100
@@ -159,7 +159,7 @@
config MTD_SCx200_DOCFLASH
tristate "Flash device mapped with DOCCS on NatSemi SCx200"
- depends on X86 && MTD_CFI
+ depends on X86 && MTD_CFI && MTD_PARTITIONS
help
Enable support for a flash chip mapped using the DOCCS signal on a
National Semiconductor SCx200 processor.
--- linux-2.6.10-rc3-mm1-full/drivers/mtd/nand/Kconfig.old 2004-12-27 23:44:44.000000000 +0100
+++ linux-2.6.10-rc3-mm1-full/drivers/mtd/nand/Kconfig 2004-12-27 23:45:37.000000000 +0100
@@ -198,7 +198,7 @@
config MTD_NAND_NANDSIM
bool "Support for NAND Flash Simulator"
- depends on MTD_NAND
+ depends on MTD_NAND && MTD_PARTITIONS
help
The simulator may simulate verious NAND flash chips for the
On Monday, January 3, 2005 3:29 pm, Rafael J. Wysocki wrote:
> On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the
> kernel, but it does not boot. It only prints this to the serial console:
>
> Bootdata ok (command line is root=/dev/sdb3 vga=792 earlyprintk=ttyS0,57600
> console=ttyS0,57600 console=tty0)
> Linux version 2.6.10-mm1 (rafael@chimera) (gcc version 3.3.4 (pre 3.3.5
> 20040809)) #1 SMP Mon Jan 3 23:09:30 CET 2005
> BIOS-provided physical RAM map:
> BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
> BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
> BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
> BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
> BIOS-e820: 000000003fff0000 - 000000003ffff000 (ACPI data)
> BIOS-e820: 000000003ffff000 - 0000000040000000 (ACPI NVS)
> BIOS-e820: 00000000ff7c0000 - 0000000100000000 (reserved)
> kernel direct mapping tables upto ffff810100000000 @ 8000-c000
> Scanning NUMA topology in Northbridge 24
> Number of nodes 2 (10010)
> Node 0 already present. Skipping
> Node 1 already present. Skipping
> No NUMA configuration found
> Faking a node at 0000000000000000-000000003fff0000
> Bootmem setup node 0 0000000000000000-000000003fff0000
> No mptable found.
> ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
> Processor #0 15:5 APIC version 16
> ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
> Processor #1 15:5 APIC version 16
> ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])
> IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
> ACPI: IOAPIC (id[0x03] address[0xfc9fe000] gsi_base[24])
> IOAPIC[1]: apic_id 3, version 17, address 0xfc9fe000, GSI 24-27
> ACPI: IOAPIC (id[0x04] address[0xfc9ff000] gsi_base[28])
> IOAPIC[2]: apic_id 4, version 17, address 0xfc9ff000, GSI 28-31
> ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
> Setting APIC routing to flat
> Using ACPI (MADT) for SMP configuration information
> Checking aperture...
> CPU 0: aperture @ f0000000 size 128 MB
> CPU 1: aperture @ f0000000 size 128 MB
>
> and then it goes into an infinite loop that writes some garbage to the
> framebuffer (yellow lines on top of the screen).
>
> On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE
> startup the box hangs for a while and I get the message like "The process
> for the file protocol has terminated unexpectedly" and desktop icons are
> not displayed, and I get a "cpu overload" message from arts etc.).
>
> Please let me know if you need more information.
Try wli's patch, subject "[bootfix] pass used_node_mask by reference in
2.6.10-mm1".
Jesse
* Christoph Hellwig <[email protected]> wrote:
> > remove-the-bkl-by-turning-it-into-a-semaphore.patch
> > remove the BKL by turning it into a semaphore
>
> This _smp_processor_id() mess is horribly ugly. Do you really need
> that debug check?
wrt. necessity, it's quite handy: check out the 2.6.10 changelog, almost
all preemption bugs wrt. smp_processor_id() were found this way.
what precisely is the 'mess' you are referring to?
is it the way the include file falls back to the original
smp_processor_id() definition if an arch doesnt define
__smp_processor_id()? I could get rid of that and just require every
arch to define __smp_processor_id().
or is it the addition of _smp_processor_id() as a way to signal 'this
smp_processor_id() call in a preemptible region is fine, trust me'? We
could do smp_processor_id_preempt() or some other name - any better
suggestions?
Ingo
bogus chunk generating a standalone ip_conntrack_proto_tcp.c.orig:
--- /dev/null 2003-09-15 06:40:47.000000000 -0700
+++ 25/net/ipv4/netfilter/ip_conntrack_proto_tcp.c.orig 2004-12-24 17:10:34.000000000 -0800
@@ -0,0 +1,1091 @@
Ingo
On Tue, Jan 04, 2005 at 10:04:08AM +0100, Ingo Molnar wrote:
> or is it the addition of _smp_processor_id() as a way to signal 'this
> smp_processor_id() call in a preemptible region is fine, trust me'?
Yes.
> We
> could do smp_processor_id_preempt() or some other name - any better
> suggestions?
I'd just kill the debug check and rely on the eye of the review to not
let new users of smp_processor_id slip in.
* Christoph Hellwig <[email protected]> wrote:
> On Tue, Jan 04, 2005 at 10:04:08AM +0100, Ingo Molnar wrote:
> > or is it the addition of _smp_processor_id() as a way to signal 'this
> > smp_processor_id() call in a preemptible region is fine, trust me'?
>
> Yes.
>
> > We
> > could do smp_processor_id_preempt() or some other name - any better
> > suggestions?
>
> I'd just kill the debug check and rely on the eye of the review to not
> let new users of smp_processor_id slip in.
relying on that is quite futile. E.g. in the block IO code it needed 3-4
iterations even after the first instance was found to get all the cases
right. There are functions that are always called from under a lock then
some unlocked call happens and we've got trouble. Often the bug is some
very rare and obscure corruption of a statistics value, nobody really
notices that.
by today i think we've identified most of the places that can safely do
smp_processor_id() in a preemptible section (in x86 and x64) - it's only
around 3% of the total smp_processor_id() use. I'd rather allow these
exceptions and flag new exceptions as they get added - they are added at
least an order of magnitude more rarely than smp_processor_id() gets
added.
Ingo
On Tue, 4 Jan 2005, Rafael J. Wysocki wrote:
> On a UP AMD64 it boots, but then it does not work appropriately (eg. at KDE
> startup the box hangs for a while and I get the message like "The process for
> the file protocol has terminated unexpectedly" and desktop icons are not
> displayed, and I get a "cpu overload" message from arts etc.).
I also tried it on an AMD64 system (3500+ on A8V Deluxe) and did not
observe any anomalies, but I am using Gnome, not KDE.
I saw a message that latency tests were wanted, but I don't normally have
a workload in which this can be observed. Perhaps someone could provide a
suggestion? I did try some dvd-burning sessions. Subjectively speaking,
there didn't seem to be any improvement over 2.6.10, and it may have been
a bit worse.
"Rafael J. Wysocki" <[email protected]> writes:
> On Monday, 3 of January 2005 18:19, Jesse Barnes wrote:
>> On Monday, January 3, 2005 2:07 am, Christoph Hellwig wrote:
>> > > add-page-becoming-writable-notification.patch
>> > > Add page becoming writable notification
>> >
>> > David, this still has the bogus address_space operation in addition to
>> > the vm_operation. page_mkwrite only fits into the vm_operations scheme,
>> > so please remove the address_space op. Also the code will be smaller
>> > and faster witout that indirection..
>>
>> And apparently it's broken on NUMA. I couldn't find
>> generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA
>> enabled.
>
> On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the
> kernel, but it does not boot. It only prints this to the serial console:
I suspect it is fixed by Bill Irwin's patch from the
"[bootfix] pass used_node_mask by reference .." thread. Can you test that?
-Andi
On Tuesday, 4 of January 2005 12:23, Thomas Molina wrote:
> On Tue, 4 Jan 2005, Rafael J. Wysocki wrote:
>
> > On a UP AMD64 it boots, but then it does not work appropriately (eg. at
KDE
> > startup the box hangs for a while and I get the message like "The process
for
> > the file protocol has terminated unexpectedly" and desktop icons are not
> > displayed, and I get a "cpu overload" message from arts etc.).
>
> I also tried it on an AMD64 system (3500+ on A8V Deluxe) and did not
> observe any anomalies, but I am using Gnome, not KDE.
Now I'm not seeing anything wrong either, so it must have been accidental. I
suspect that the problem was with artsd.
Greets,
RJW
--
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
-- Lewis Carroll "Alice's Adventures in Wonderland"
Some ACPI error msgs show on dmesg:
DMI 2.3 present.
__iounmap: bad address c00f0000
ACPI: Subsystem revision 20041210
ACPI-1138: *** Error: Method execution failed [\STRC] (Node
c18eb1c0), AE_AML_BUFFER_LIMIT
ACPI-1138: *** Error: Method execution failed [\_SB_.PCI0._INI]
(Node c18f4f60), AE_AML_BUFFER_LIMIT
dmesg & .config attached
Thanks,
Paul
--
FreeBSD the Power to Serve!
>That's not the problem, since function and definition are in the same
>module.
>
>You didn't send your .config, but looking at the code it seems
>CONFIG_PM=n was the culprit.
Yes. CONFIG_PM=N in my .config.
>As a workaround, it should work after enabling the following option:
> Power management options (ACPI, APM)
> Power Management support
Hmm. I don't want to do that for my real time testing. I turned that off
to eliminate a class of possible latencies.
>This is only a workaround, I've Cc'ed the ALSA maintainers for a real
>fix.
How about the attached patch instead (which moves the #ifdef CONFIG_PM
and snd_ac97_suspend after the two functions I am having problems with).
Apparently the use of snd_ac97_restore_status and snd_ac97_restore_iec958
is in ac97_patch.c as well as in the power management code. I have not
run the code yet a quick build didn't find any problems with it. I have
a full build / test coming later today.
--Mark
PS: On the other message you sent related to [add|del]_mtd_partitions
applies with the 2nd hunk failing (that code not present) but the first
hunk makes the build problem I had go away. Thanks.
On Tuesday, 4 of January 2005 13:22, Andi Kleen wrote:
> "Rafael J. Wysocki" <[email protected]> writes:
>
> > On Monday, 3 of January 2005 18:19, Jesse Barnes wrote:
> >> On Monday, January 3, 2005 2:07 am, Christoph Hellwig wrote:
> >> > > add-page-becoming-writable-notification.patch
> >> > > Add page becoming writable notification
> >> >
> >> > David, this still has the bogus address_space operation in addition to
> >> > the vm_operation. page_mkwrite only fits into the vm_operations
scheme,
> >> > so please remove the address_space op. Also the code will be smaller
> >> > and faster witout that indirection..
> >>
> >> And apparently it's broken on NUMA. I couldn't find
> >> generic_file_get/set_policy in my tree, which builds with CONFIG_NUMA
> >> enabled.
> >
> > On a dual-Opteron w/ NUMA I had to apply the Jesse's patch to compile the
> > kernel, but it does not boot. It only prints this to the serial console:
>
> I suspect it is fixed by Bill Irwin's patch from the
> "[bootfix] pass used_node_mask by reference .." thread. Can you test that?
Sure. It fixes the problem.
Greets,
RJW
--
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
-- Lewis Carroll "Alice's Adventures in Wonderland"
A follow up on this patch. This fixed my build / module load problem when
using CONFIG_PM=N on my system. The audio worked OK (except as noted
below). Do you want Andrew Morton to pick this up (or will you incorporate
the fix into another ALSA patch)?
I did have some other minor problems during my testing but I have seen
these before. Perhaps one of the ALSA developers could comment on the
correct / incorrect behavior of the audio system. The testing is done on a
Fedora Core 2 system with the 2.6.10-mm1 kernel (with the patch below). Let
me know if you need more information on the system configuration, and
.config.
[1] After system start up & log in, I do the sequence:
su -
(password entered)
system-config-soundcard
Simple mixer control 'PCM',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Front Left: Playback 23 [74%] [on]
Front Right: Playback 23 [74%] [on]
sox: Can't open output file '/dev/dsp': Device or resource busy
At this point, I get the window asking if I heard the sound (I did not). If
I repeat the test after waiting a short period, it eventually succeeds.
I get basically the same error message from latencytest when it says...
ERROR: open /dev/dsp: Device or resource busy
[even after I had a successful play of the test sound in
system-config-soundcard]
I realize this may be some KDE or GNOME background application hogging the
sound output, but it is extremely annoying since I never had this problem
with the 2.4 kernels I have used. Is that the likely cause or would
something else cause this problem?
[2] When running latencytest (from
http://www.gardena.net/benno/linux/audio/) the sound is not consistent
(like it was on 2.4 with OSS) and occasionally I hear "rapid playback"
where the repeating audio pattern is much faster than it should be. In
addition, the charts generated by latencytest show at least two different
patterns:
a. The time between write() calls to the audio interface varies from
roughly 1.16 msec to 2.0 msec. If you add code to dump out the durations
you can see it is a sawtooth pattern, some periods it returns too quickly
and some periods it returns too slowly.
b. The time between write() calls is roughly 1.2 msec. I believe this
behavior occurs at the same time the audio pattern repeats too quickly.
In all cases, the between write() calls should be 1.45 msec (the length of
the audio fragment) as I measured on a consistent basis with 2.4 kernels. I
can somewhat understand the behavior of (a) if the driver is queueing up
audio fragments in the write() call. I do not necessarily agree that the
audio driver should do that but I can understand why it may do that. The
behavior of (b) sounds broken to me.
Let me know if you want to see a copy of the charts - I should be able to
email (or post on an ftp site temporarily) to individuals who want to view
them [and compare with the 2.4 results].
--Mark H Johnson
<mailto:[email protected]>
Mark H Johnson
To: Adrian Bunk <[email protected]>
01/04/2005 11:01 cc: [email protected], Andrew Morton <[email protected]>, lkml
AM <[email protected]>, [email protected], Takashi Iwai <[email protected]>,
[email protected]
Subject: Re: 2.6.10-mm1: ALSA ac97 compile error with CONFIG_PM=n(Document link: Mark
the Maniac)
>That's not the problem, since function and definition are in the same
>module.
>
>You didn't send your .config, but looking at the code it seems
>CONFIG_PM=n was the culprit.
Yes. CONFIG_PM=N in my .config.
>As a workaround, it should work after enabling the following option:
> Power management options (ACPI, APM)
> Power Management support
Hmm. I don't want to do that for my real time testing. I turned that off
to eliminate a class of possible latencies.
>This is only a workaround, I've Cc'ed the ALSA maintainers for a real
>fix.
How about the attached patch instead (which moves the #ifdef CONFIG_PM
and snd_ac97_suspend after the two functions I am having problems with).
Apparently the use of snd_ac97_restore_status and snd_ac97_restore_iec958
is in ac97_patch.c as well as in the power management code. I have not
run the code yet a quick build didn't find any problems with it. I have
a full build / test coming later today.
--Mark
PS: On the other message you sent related to [add|del]_mtd_partitions
applies with the 2nd hunk failing (that code not present) but the first
hunk makes the build problem I had go away. Thanks.
At Tue, 4 Jan 2005 01:11:30 +0100,
Adrian Bunk wrote:
>
> On Mon, Jan 03, 2005 at 05:07:08PM -0600, [email protected] wrote:
> > I was looking to compare RT latency between this kernel and the latest from
> > Ingo and I had the following warnings / errors building 2.6.10-mm1:
> >
> > [no apparent compile / link errors]
> > *** Warning: "snd_ac97_restore_iec958" [sound/pci/ac97/snd-ac97-codec.ko]
> > undefined!
> > *** Warning: "snd_ac97_restore_status" [sound/pci/ac97/snd-ac97-codec.ko]
> > undefined!
> >...
> > To fix this, should I just add the EXPORT_SYMBOL lines for these symbols
> > snd_ac97_restore_status snd_ac97_restore_iec958
> > or is something more needed?
>
> That's not the problem, since function and definition are in the same
> module.
>
> You didn't send your .config, but looking at the code it seems
> CONFIG_PM=n was the culprit.
Yes, it's because of lack of #ifdef CONFIG_PM in ac97_patch.c.
It was already fixed in the linux-sound bk tree.
Takashi
At Tue, 4 Jan 2005 13:25:40 -0600,
[email protected] wrote:
>
> A follow up on this patch. This fixed my build / module load problem when
> using CONFIG_PM=N on my system. The audio worked OK (except as noted
> below). Do you want Andrew Morton to pick this up (or will you incorporate
> the fix into another ALSA patch)?
It was already fixed in the recent ALSA tree.
So, just syncing bk-alsa patch would suffice.
> I did have some other minor problems during my testing but I have seen
> these before. Perhaps one of the ALSA developers could comment on the
> correct / incorrect behavior of the audio system. The testing is done on a
> Fedora Core 2 system with the 2.6.10-mm1 kernel (with the patch below). Let
> me know if you need more information on the system configuration, and
> .config.
>
> [1] After system start up & log in, I do the sequence:
> su -
> (password entered)
> system-config-soundcard
> Simple mixer control 'PCM',0
> Capabilities: pvolume pswitch pswitch-joined
> Playback channels: Front Left - Front Right
> Limits: Playback 0 - 31
> Front Left: Playback 23 [74%] [on]
> Front Right: Playback 23 [74%] [on]
> sox: Can't open output file '/dev/dsp': Device or resource busy
>
> At this point, I get the window asking if I heard the sound (I did not). If
> I repeat the test after waiting a short period, it eventually succeeds.
The default blocking behavior of OSS devices was changed recently.
When the device is in use, open returns -EBUSY immediately in the
latest version while it was blocked until released in the former
version.
> [2] When running latencytest (from
> http://www.gardena.net/benno/linux/audio/) the sound is not consistent
> (like it was on 2.4 with OSS) and occasionally I hear "rapid playback"
> where the repeating audio pattern is much faster than it should be.
It's hard to tell. The cause could be in the general interrupt
handling, the difference of HZ, the driver's interrupt setting, or
whatever. This must depend on the hardware, anyway.
Takashi
Hello, Andrew, all!
Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
here is a patch to deprecate (un)register_ioctl32_conversion.
Signed-off-by: Michael S. Tsirkin <[email protected]>
diff -ruI -u linux-2.6.10/include/linux/ioctl32.h linux-2.6.10-ioctls/include/linux/ioctl32.h
--- linux-2.6.10/include/linux/ioctl32.h 2004-12-24 23:33:49.000000000 +0200
+++ linux-2.6.10-ioctls/include/linux/ioctl32.h 2005-01-05 20:19:46.716664232 +0200
@@ -23,9 +23,12 @@
*/
#ifdef CONFIG_COMPAT
-extern int register_ioctl32_conversion(unsigned int cmd,
+
+/* The following two calls trigger an unfixable module unload race. */
+/* Deprecated in favor of ioctl_compat in struct file_operations. */
+extern int __deprecated register_ioctl32_conversion(unsigned int cmd,
ioctl_trans_handler_t handler);
-extern int unregister_ioctl32_conversion(unsigned int cmd);
+extern int __deprecated unregister_ioctl32_conversion(unsigned int cmd);
#else
On Wed, Jan 05, 2005 at 04:40:43PM +0200, Michael S. Tsirkin wrote:
> Hello, Andrew, all!
>
> Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> here is a patch to deprecate (un)register_ioctl32_conversion.
Sorry, but this is a lot too early. Once there's a handfull users left
in _mainline_ you can start deprecating it (or better remove it completely).
So far we have a non-final version of the replacement in -mm and no single
user converted.
Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> On Wed, Jan 05, 2005 at 04:40:43PM +0200, Michael S. Tsirkin wrote:
> > Hello, Andrew, all!
> >
> > Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> > here is a patch to deprecate (un)register_ioctl32_conversion.
>
> Sorry, but this is a lot too early. Once there's a handfull users left
> in _mainline_ you can start deprecating it (or better remove it completely).
I dont know. So how will people know they are supposed to convert then?
> So far we have a non-final version of the replacement in -mm and no single
> user converted.
Christoph, I know you want to remove the inode parameter :)
Otherwise I think -mm1 has the final version of the replacement.
MST
On Wed, Jan 05, 2005 at 05:03:10PM +0200, Michael S. Tsirkin wrote:
> I dont know. So how will people know they are supposed to convert then?
Tell the janitors about it - or do it yourself. Except for taking care
of the BKL going away it's a trivial conversion.
Christoph Hellwig <[email protected]> writes:
> On Wed, Jan 05, 2005 at 04:40:43PM +0200, Michael S. Tsirkin wrote:
>> Hello, Andrew, all!
>>
>> Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
>> here is a patch to deprecate (un)register_ioctl32_conversion.
>
> Sorry, but this is a lot too early. Once there's a handfull users left
> in _mainline_ you can start deprecating it (or better remove it completely).
There were never more than a handful users of it anyways. So I think
Michael's suggestion to deprecate it early is very reasonable.
> So far we have a non-final version of the replacement in -mm and no single
> user converted.
For me it looks quite final.
-Andi
On Wed, Jan 05, 2005 at 04:19:16PM +0100, Andi Kleen wrote:
> Christoph Hellwig <[email protected]> writes:
>
> > On Wed, Jan 05, 2005 at 04:40:43PM +0200, Michael S. Tsirkin wrote:
> >> Hello, Andrew, all!
> >>
> >> Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> >> here is a patch to deprecate (un)register_ioctl32_conversion.
> >
> > Sorry, but this is a lot too early. Once there's a handfull users left
> > in _mainline_ you can start deprecating it (or better remove it completely).
>
> There were never more than a handful users of it anyways. So I think
> Michael's suggestion to deprecate it early is very reasonable.
It's 72 callers in mainline. Aka 72 new warnings for an allmodconfig
build. This isn't reasonable just because the interface got out of
fashion.
Christoph Hellwig wrote:
>> reiser4-export-inode_lock.patch
>>
>>
>
>Han,s how'as the work progressing on removing these and other fishy
>core changes?
>
>
Vladimir is writing code to reduce the number of patches needed. This
code is causing bugs that have not yet been fixed. His email is not
working today, hopefully it will work tomorrow. This is the russian
holiday season....
>
>
>> reiser4-unstatic-kswapd.patch
>>
>>
>
>Andrew, could you please finally drop this one? It's not needed for
>reiser4 operation at all just for some of their stranger debugging
>features.
>
>
I'll let vs comment.
>
>
>>
>> reiser4-include-reiser4.patch
>>
>>
>
>What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is
>the logical place for it and makes dropping in a new version of the fs
>easier.
>
>
Ok.
>
>
>> reiser4-only.patch
>>
>>
>
>Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.
>
>
Ok.
>-
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to [email protected]
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/
>
>
>
>
What are the other ones you object to?
At Wed, 5 Jan 2005 16:40:43 +0200,
Michael S. Tsirkin wrote:
>
> Hello, Andrew, all!
>
> Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> here is a patch to deprecate (un)register_ioctl32_conversion.
Good to see that ioctl_native and ioctl_compat ops are already there!
Will it be merged to 2.6.11? If so, I'll prepare the patch to convert
the ALSA compat32 stuff, too...
Takashi
Takashi Iwai <[email protected]> wrote:
>
> The default blocking behavior of OSS devices was changed recently.
> When the device is in use, open returns -EBUSY immediately in the
> latest version while it was blocked until released in the former
> version.
>
whoa. That's a significant change in user-visible behaviour. Why was this
done?
Takashi Iwai <[email protected]> wrote:
>
> At Wed, 5 Jan 2005 16:40:43 +0200,
> Michael S. Tsirkin wrote:
> >
> > Hello, Andrew, all!
> >
> > Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> > here is a patch to deprecate (un)register_ioctl32_conversion.
>
> Good to see that ioctl_native and ioctl_compat ops are already there!
>
> Will it be merged to 2.6.11?
It should be, unless there's some problem. In maybe a week or so.
"Michael S. Tsirkin" <[email protected]> wrote:
>
> Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> > On Wed, Jan 05, 2005 at 04:40:43PM +0200, Michael S. Tsirkin wrote:
> > > Hello, Andrew, all!
> > >
> > > Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> > > here is a patch to deprecate (un)register_ioctl32_conversion.
> >
> > Sorry, but this is a lot too early. Once there's a handfull users left
> > in _mainline_ you can start deprecating it (or better remove it completely).
>
> I dont know. So how will people know they are supposed to convert then?
>
> > So far we have a non-final version of the replacement in -mm and no single
> > user converted.
>
> Christoph, I know you want to remove the inode parameter :)
>
> Otherwise I think -mm1 has the final version of the replacement.
I merged Christoph's verion of the patch into -mm.
--- 25/Documentation/filesystems/Locking~ioctl-rework-2 Tue Jan 4 15:08:56 2005
+++ 25-akpm/Documentation/filesystems/Locking Tue Jan 4 15:08:56 2005
@@ -350,6 +350,8 @@ prototypes:
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int,
unsigned long);
+ long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+ long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
@@ -383,6 +385,8 @@ aio_write: no
readdir: no
poll: no
ioctl: yes (see below)
+unlocked_ioctl: no (see below)
+compat_ioctl: no
mmap: no
open: maybe (see below)
flush: no
@@ -428,6 +432,9 @@ move ->readdir() to inode_operations and
anything that resembles union-mount we won't have a struct file for all
components. And there are other reasons why the current interface is a mess...
+->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
+doesn't take the BKL.
+
->read on directories probably must go away - we should just enforce -EISDIR
in sys_read() and friends.
diff -puN fs/compat.c~ioctl-rework-2 fs/compat.c
--- 25/fs/compat.c~ioctl-rework-2 Tue Jan 4 15:08:56 2005
+++ 25-akpm/fs/compat.c Tue Jan 4 15:08:56 2005
@@ -397,77 +397,87 @@ out:
}
EXPORT_SYMBOL(unregister_ioctl32_conversion);
+static void compat_ioctl_error(struct file *filp, unsigned int fd,
+ unsigned int cmd, unsigned long arg)
+{
+ char buf[10];
+ char *fn = "?";
+ char *path;
+
+ /* find the name of the device. */
+ path = (char *)__get_free_page(GFP_KERNEL);
+ if (path) {
+ fn = d_path(filp->f_dentry, filp->f_vfsmnt, path, PAGE_SIZE);
+ if (IS_ERR(fn))
+ fn = "?";
+ }
+
+ sprintf(buf,"'%c'", (cmd>>24) & 0x3f);
+ if (!isprint(buf[1]))
+ sprintf(buf, "%02x", buf[1]);
+ printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
+ "cmd(%08x){%s} arg(%08x) on %s\n",
+ current->comm, current->pid,
+ (int)fd, (unsigned int)cmd, buf,
+ (unsigned int)arg, fn);
+
+ if (path)
+ free_page((unsigned long)path);
+}
+
asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
unsigned long arg)
{
- struct file * filp;
+ struct file *filp;
int error = -EBADF;
struct ioctl_trans *t;
filp = fget(fd);
- if(!filp)
- goto out2;
-
- if (!filp->f_op || !filp->f_op->ioctl) {
- error = sys_ioctl (fd, cmd, arg);
+ if (!filp)
goto out;
+
+ if (!filp->f_op) {
+ if (!filp->f_op->ioctl)
+ goto do_ioctl;
+ } else if (filp->f_op->compat_ioctl) {
+ error = filp->f_op->compat_ioctl(filp, cmd, arg);
+ goto out_fput;
}
down_read(&ioctl32_sem);
+ for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
+ if (t->cmd == cmd)
+ goto found_handler;
+ }
+ up_read(&ioctl32_sem);
- t = ioctl32_hash_table[ioctl32_hash (cmd)];
-
- while (t && t->cmd != cmd)
- t = t->next;
- if (t) {
- if (t->handler) {
- lock_kernel();
- error = t->handler(fd, cmd, arg, filp);
- unlock_kernel();
- up_read(&ioctl32_sem);
- } else {
- up_read(&ioctl32_sem);
- error = sys_ioctl(fd, cmd, arg);
- }
+ if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
+ error = siocdevprivate_ioctl(fd, cmd, arg);
} else {
+ static int count;
+
+ if (++count <= 50)
+ compat_ioctl_error(filp, fd, cmd, arg);
+ error = -EINVAL;
+ }
+
+ goto out_fput;
+
+ found_handler:
+ if (t->handler) {
+ lock_kernel();
+ error = t->handler(fd, cmd, arg, filp);
+ unlock_kernel();
up_read(&ioctl32_sem);
- if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) {
- error = siocdevprivate_ioctl(fd, cmd, arg);
- } else {
- static int count;
- if (++count <= 50) {
- char buf[10];
- char *fn = "?";
- char *path;
-
- path = (char *)__get_free_page(GFP_KERNEL);
-
- /* find the name of the device. */
- if (path) {
- fn = d_path(filp->f_dentry,
- filp->f_vfsmnt, path,
- PAGE_SIZE);
- if (IS_ERR(fn))
- fn = "?";
- }
-
- sprintf(buf,"'%c'", (cmd>>24) & 0x3f);
- if (!isprint(buf[1]))
- sprintf(buf, "%02x", buf[1]);
- printk("ioctl32(%s:%d): Unknown cmd fd(%d) "
- "cmd(%08x){%s} arg(%08x) on %s\n",
- current->comm, current->pid,
- (int)fd, (unsigned int)cmd, buf,
- (unsigned int)arg, fn);
- if (path)
- free_page((unsigned long)path);
- }
- error = -EINVAL;
- }
+ goto out_fput;
}
-out:
+
+ up_read(&ioctl32_sem);
+ do_ioctl:
+ error = sys_ioctl(fd, cmd, arg);
+ out_fput:
fput(filp);
-out2:
+ out:
return error;
}
diff -puN fs/ioctl.c~ioctl-rework-2 fs/ioctl.c
--- 25/fs/ioctl.c~ioctl-rework-2 Tue Jan 4 15:08:56 2005
+++ 25-akpm/fs/ioctl.c Tue Jan 4 15:08:56 2005
@@ -16,7 +16,29 @@
#include <asm/uaccess.h>
#include <asm/ioctls.h>
-static int file_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
+static long do_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg)
+{
+ int error = -ENOTTY;
+
+ if (!filp->f_op)
+ goto out;
+
+ if (filp->f_op->unlocked_ioctl) {
+ error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
+ } else if (filp->f_op->ioctl) {
+ lock_kernel();
+ error = filp->f_op->ioctl(filp->f_dentry->d_inode,
+ filp, cmd, arg);
+ unlock_kernel();
+ }
+
+ out:
+ return error;
+}
+
+static int file_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg)
{
int error;
int block;
@@ -36,7 +58,9 @@ static int file_ioctl(struct file *filp,
if ((error = get_user(block, p)) != 0)
return error;
+ lock_kernel();
res = mapping->a_ops->bmap(mapping, block);
+ unlock_kernel();
return put_user(res, p);
}
case FIGETBSZ:
@@ -46,14 +70,13 @@ static int file_ioctl(struct file *filp,
case FIONREAD:
return put_user(i_size_read(inode) - filp->f_pos, p);
}
- if (filp->f_op && filp->f_op->ioctl)
- return filp->f_op->ioctl(inode, filp, cmd, arg);
- return -ENOTTY;
+
+ return do_ioctl(filp, cmd, arg);
}
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
-{
+{
struct file * filp;
unsigned int flag;
int on, error = -EBADF;
@@ -63,12 +86,9 @@ asmlinkage long sys_ioctl(unsigned int f
goto out;
error = security_file_ioctl(filp, cmd, arg);
- if (error) {
- fput(filp);
- goto out;
- }
+ if (error)
+ goto out_fput;
- lock_kernel();
switch (cmd) {
case FIOCLEX:
set_close_on_exec(fd, 1);
@@ -100,8 +120,11 @@ asmlinkage long sys_ioctl(unsigned int f
/* Did FASYNC state change ? */
if ((flag ^ filp->f_flags) & FASYNC) {
- if (filp->f_op && filp->f_op->fasync)
+ if (filp->f_op && filp->f_op->fasync) {
+ lock_kernel();
error = filp->f_op->fasync(fd, filp, on);
+ unlock_kernel();
+ }
else error = -ENOTTY;
}
if (error != 0)
@@ -124,16 +147,15 @@ asmlinkage long sys_ioctl(unsigned int f
error = -ENOTTY;
break;
default:
- error = -ENOTTY;
if (S_ISREG(filp->f_dentry->d_inode->i_mode))
error = file_ioctl(filp, cmd, arg);
- else if (filp->f_op && filp->f_op->ioctl)
- error = filp->f_op->ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
+ else
+ error = do_ioctl(filp, cmd, arg);
+ break;
}
- unlock_kernel();
+ out_fput:
fput(filp);
-
-out:
+ out:
return error;
}
diff -puN include/linux/fs.h~ioctl-rework-2 include/linux/fs.h
--- 25/include/linux/fs.h~ioctl-rework-2 Tue Jan 4 15:08:56 2005
+++ 25-akpm/include/linux/fs.h Tue Jan 4 15:08:56 2005
@@ -907,8 +907,8 @@ typedef int (*read_actor_t)(read_descrip
/*
* NOTE:
- * read, write, poll, fsync, readv, writev can be called
- * without the big kernel lock held in all filesystems.
+ * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl
+ * can be called without the big kernel lock held in all filesystems.
*/
struct file_operations {
struct module *owner;
@@ -920,6 +920,8 @@ struct file_operations {
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+ long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
+ long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
_
On Wed, 2005-01-05 at 13:27 -0800, Andrew Morton wrote:
> Takashi Iwai <[email protected]> wrote:
> >
> > The default blocking behavior of OSS devices was changed recently.
> > When the device is in use, open returns -EBUSY immediately in the
> > latest version while it was blocked until released in the former
> > version.
> >
>
> whoa. That's a significant change in user-visible behaviour. Why was this
> done?
http://sourceforge.net/mailarchive/message.php?msg_id=10011826
Lee
On Mon, 2005-01-03 at 09:17, Jesse Barnes wrote:
> On Monday, January 3, 2005 1:11 am, you wrote:
> > +replace-numnodes-with-node_online_map-ia64.patch
>
> Here are some compile fixes for this patch. Looks like simple typos. Note
> that the kernel won't boot even with these fixes, I'm debugging that now
> (suspect nodemask related stuff is causing the hang too).
>
> Signed-off-by: Jesse Barnes <[email protected]>
>
> Jesse
Those 2 fixes look good. Thanks for the catch, Jesse!
-Matt
On Mon, Jan 03, 2005 at 10:07:25AM +0000, Christoph Hellwig wrote:
> > add-page-becoming-writable-notification.patch
> > Add page becoming writable notification
>
> David, this still has the bogus address_space operation in addition to
> the vm_operation. page_mkwrite only fits into the vm_operations scheme,
> so please remove the address_space op. Also the code will be smaller
> and faster witout that indirection..
Here's the fix:
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/fs/afs/file.c linux-2.6.10-mm2/fs/afs/file.c
--- linux-2.6.10-mm2.orig/fs/afs/file.c 2005-01-06 11:40:18.727916000 +0100
+++ linux-2.6.10-mm2/fs/afs/file.c 2005-01-06 12:27:59.088000048 +0100
@@ -33,8 +33,10 @@ static int afs_file_releasepage(struct p
static ssize_t afs_file_write(struct file *file, const char __user *buf,
size_t size, loff_t *off);
+static int afs_file_mmap(struct file * file, struct vm_area_struct * vma);
+
#ifdef CONFIG_AFS_FSCACHE
-static int afs_file_page_mkwrite(struct page *page);
+static int afs_file_page_mkwrite(struct vm_area_struct *vma, struct page *page);
#endif
struct inode_operations afs_file_inode_operations = {
@@ -44,7 +46,7 @@ struct inode_operations afs_file_inode_o
struct file_operations afs_file_file_operations = {
.read = generic_file_read,
.write = afs_file_write,
- .mmap = generic_file_mmap,
+ .mmap = afs_file_mmap,
#if 0
.open = afs_file_open,
.release = afs_file_release,
@@ -58,6 +60,11 @@ struct address_space_operations afs_fs_a
.set_page_dirty = __set_page_dirty_nobuffers,
.releasepage = afs_file_releasepage,
.invalidatepage = afs_file_invalidatepage,
+};
+
+struct vm_operations_struct afs_fs_vm_operations = {
+ .nopage = filemap_nopage,
+ .populate = filemap_populate,
#ifdef CONFIG_AFS_FSCACHE
.page_mkwrite = afs_file_page_mkwrite,
#endif
@@ -79,6 +86,13 @@ static ssize_t afs_file_write(struct fil
return -EIO;
} /* end afs_file_write() */
+static int afs_file_mmap(struct file * file, struct vm_area_struct * vma)
+{
+ file_accessed(file);
+ vma->vm_ops = &afs_fs_vm_operations;
+ return 0;
+}
+
/*****************************************************************************/
/*
* deal with notification that a page was read from the cache
@@ -321,7 +335,7 @@ static int afs_file_releasepage(struct p
* wait for the disc cache to finish writing before permitting
*/
#ifdef CONFIG_AFS_FSCACHE
-static int afs_file_page_mkwrite(struct page *page)
+static int afs_file_page_mkwrite(struct vm_area_struct *vma, struct page *page)
{
wait_on_page_fs_misc(page);
return 0;
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/include/linux/fs.h linux-2.6.10-mm2/include/linux/fs.h
--- linux-2.6.10-mm2.orig/include/linux/fs.h 2005-01-06 11:40:20.124973000 +0100
+++ linux-2.6.10-mm2/include/linux/fs.h 2005-01-06 11:49:55.144888912 +0100
@@ -330,9 +330,6 @@ struct address_space_operations {
int (*releasepage) (struct page *, int);
ssize_t (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
loff_t offset, unsigned long nr_segs);
-
- /* notification that a page is about to become writable */
- int (*page_mkwrite)(struct page *page);
};
struct backing_dev_info;
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/include/linux/mm.h linux-2.6.10-mm2/include/linux/mm.h
--- linux-2.6.10-mm2.orig/include/linux/mm.h 2005-01-06 11:40:20.168966000 +0100
+++ linux-2.6.10-mm2/include/linux/mm.h 2005-01-06 11:49:11.645979744 +0100
@@ -762,7 +762,10 @@ extern void truncate_inode_pages_range(s
loff_t lstart, loff_t lend);
/* generic vm_area_ops exported for stackable file systems */
-struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
+extern struct page *filemap_nopage(struct vm_area_struct *,
+ unsigned long, int *);
+extern int filemap_populate(struct vm_area_struct *, unsigned long,
+ unsigned long, pgprot_t, unsigned long, int);
/* mm/page-writeback.c */
int write_one_page(struct page *page, int wait);
diff -uNr -X dontdiff -p linux-2.6.10-mm2.orig/mm/filemap.c linux-2.6.10-mm2/mm/filemap.c
--- linux-2.6.10-mm2.orig/mm/filemap.c 2005-01-06 11:40:20.443924000 +0100
+++ linux-2.6.10-mm2/mm/filemap.c 2005-01-06 11:49:29.311957792 +0100
@@ -1477,7 +1477,7 @@ err:
return NULL;
}
-static int filemap_populate(struct vm_area_struct *vma,
+int filemap_populate(struct vm_area_struct *vma,
unsigned long addr,
unsigned long len,
pgprot_t prot,
@@ -1524,26 +1524,13 @@ repeat:
return 0;
}
-
-/*
- * pass notification that a page is becoming writable up to the filesystem
- */
-static int filemap_page_mkwrite(struct vm_area_struct *vma, struct page *page)
-{
- return page->mapping->a_ops->page_mkwrite(page);
-}
+EXPORT_SYMBOL(filemap_populate);
struct vm_operations_struct generic_file_vm_ops = {
.nopage = filemap_nopage,
.populate = filemap_populate,
};
-struct vm_operations_struct generic_file_vm_mkwr_ops = {
- .nopage = filemap_nopage,
- .populate = filemap_populate,
- .page_mkwrite = filemap_page_mkwrite,
-};
-
/* This is used for a general mmap of a disk file */
int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
@@ -1553,10 +1540,7 @@ int generic_file_mmap(struct file * file
if (!mapping->a_ops->readpage)
return -ENOEXEC;
file_accessed(file);
- if (!mapping->a_ops->page_mkwrite)
- vma->vm_ops = &generic_file_vm_ops;
- else
- vma->vm_ops = &generic_file_vm_mkwr_ops;
+ vma->vm_ops = &generic_file_vm_ops;
return 0;
}
Christoph Hellwig <[email protected]> wrote:
> > > add-page-becoming-writable-notification.patch
> > > Add page becoming writable notification
> >
> > David, this still has the bogus address_space operation in addition to
> > the vm_operation. page_mkwrite only fits into the vm_operations scheme,
> > so please remove the address_space op. Also the code will be smaller
> > and faster witout that indirection..
>
> Here's the fix:
That's not right either. Filesystems really shouldn't be overloading the
vm_ops on memory mappings (as has been made clear to me) and the VM low-level
paging routines shouldn't be touching a_ops (as has also been made clear to
me). I also have other reasons I don't want to have ordinary files with
specialised vm_ops.
I suppose I could try and build a little knowledge about fscache into the
VM... that might be reasonable.
Remember also that your change is going to affect NFS too eventually, assuming
NFS caching support ends up being done this way. It may also affect other
filesystems, such as SMB/CIFS and Coda eventually should they partake of
fscache services too.
David
On Thu, Jan 06, 2005 at 01:04:04PM +0000, David Howells wrote:
> That's not right either. Filesystems really shouldn't be overloading the
> vm_ops on memory mappings (as has been made clear to me)
yes, they should. And various filesystems do.
Hello
On Wed, 2005-01-05 at 20:27, Hans Reiser wrote:
> Christoph Hellwig wrote:
>
> >> reiser4-export-inode_lock.patch
> >>
> >>
> >
> >Han,s how'as the work progressing on removing these and other fishy
> >core changes?
> >
The work is in progress. Here is list of patches.
reiser4-sb_sync_inodes.patch
reiser4-allow-drop_inode-implementation.patch - will either try to do
what Christoph suggested or find something else
reiser4-truncate_inode_pages_range.patch
reiser4-export-remove_from_page_cache.patch
reiser4-export-page_cache_readahead.patch
reiser4-reget-page-mapping.patch
reiser4-rcu-barrier.patch
reiser4-export-inode_lock.patch - trying to change to go
without this
reiser4-export-pagevec-funcs.patch
reiser4-export-radix_tree_preload.patch
reiser4-export-find_get_pages.patch
reiser4-radix-tree-tag.patch - not needed anymore
reiser4-radix_tree_lookup_slot.patch
reiser4-perthread-pages.patch
reiser4-unstatic-kswapd.patch - not needed anymore
reiser4-include-reiser4.patch
reiser4-doc.patch
Christoph, what else do you especially object against?
> >
> Vladimir is writing code to reduce the number of patches needed. This
> code is causing bugs that have not yet been fixed. His email is not
> working today, hopefully it will work tomorrow. This is the russian
> holiday season....
>
> >
> >
> >> reiser4-unstatic-kswapd.patch
> >>
> >>
> >
> >Andrew, could you please finally drop this one? It's not needed for
> >reiser4 operation at all just for some of their stranger debugging
> >features.
> >
> >
> I'll let vs comment.
>
> >
> >
> >>
> >> reiser4-include-reiser4.patch
> >>
> >>
> >
> >What about moving fs/Kconfig.reiser4 to fs/reiser4/Kconfig? This is
> >the logical place for it and makes dropping in a new version of the fs
> >easier.
> >
> >
> Ok.
>
> >
> >
> >> reiser4-only.patch
> >>
> >>
> >
> >Documentation shouldn't be in fs/FOO/doc but Documentation/filesystems/.
> >
> >
> Ok.
>
> >-
> >To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> >the body of a message to [email protected]
> >More majordomo info at http://vger.kernel.org/majordomo-info.html
> >Please read the FAQ at http://www.tux.org/lkml/
> >
> >
> >
> >
> What are the other ones you object to?
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
Hello!
Quoting r. Andrew Morton ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> Takashi Iwai <[email protected]> wrote:
> >
> > At Wed, 5 Jan 2005 16:40:43 +0200,
> > Michael S. Tsirkin wrote:
> > >
> > > Hello, Andrew, all!
> > >
> > > Since in -mm1 we now have a race-free replacement (that being ioctl_compat),
> > > here is a patch to deprecate (un)register_ioctl32_conversion.
> >
> > Good to see that ioctl_native and ioctl_compat ops are already there!
> >
> > Will it be merged to 2.6.11?
>
> It should be, unless there's some problem. In maybe a week or so.
To make life bearable for out-of kernel modules, the following patch
adds 2 macros so that existance of unlocked_ioctl and ioctl_compat
can be easily detected.
Signed-off-by: Michael S. Tsirkin <[email protected]>
diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
--- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
+++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
@@ -907,6 +907,12 @@ typedef struct {
typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and ioctl_compat
+ * fields in struct file_operations. */
+#define HAVE_IOCTL_COMPAT 1
+#define HAVE_UNLOCKED_IOCTL 1
+
/*
* NOTE:
* read, write, poll, fsync, readv, writev can be called
Hello!
Quoting r. Andrew Morton ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> > Christoph, I know you want to remove the inode parameter :)
> >
> > Otherwise I think -mm1 has the final version of the replacement.
>
> I merged Christoph's verion of the patch into -mm.
I see some more problems with this decision.
>
>
> asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
> unsigned long arg)
> {
> - struct file * filp;
> + struct file *filp;
> int error = -EBADF;
> struct ioctl_trans *t;
>
> filp = fget(fd);
> - if(!filp)
> - goto out2;
> -
> - if (!filp->f_op || !filp->f_op->ioctl) {
> - error = sys_ioctl (fd, cmd, arg);
> + if (!filp)
> goto out;
> +
> + if (!filp->f_op) {
> + if (!filp->f_op->ioctl)
> + goto do_ioctl;
> + } else if (filp->f_op->compat_ioctl) {
> + error = filp->f_op->compat_ioctl(filp, cmd, arg);
> + goto out_fput;
> }
Stare at this as I might, I dont understand why does it make sence.
So if filp->f_op is NULL, you are then checking filp->f_op->ioctl?
Looks like an oops to me.
What should be there:
> + if (!filp->f_op) {
> + goto do_ioctl;
> + } else if (filp->f_op->compat_ioctl) {
> + error = filp->f_op->compat_ioctl(filp, cmd, arg);
> + goto out_fput;
Look, was this patch even tested?
MST
On Thu, Jan 06, 2005 at 04:06:36PM +0200, Michael S. Tsirkin wrote:
> > It should be, unless there's some problem. In maybe a week or so.
>
> To make life bearable for out-of kernel modules, the following patch
> adds 2 macros so that existance of unlocked_ioctl and ioctl_compat
> can be easily detected.
That's not the way we're making additions. Get your code merged and
there won't be any need to detect the feature.
> Stare at this as I might, I dont understand why does it make sence.
> So if filp->f_op is NULL, you are then checking filp->f_op->ioctl?
> Looks like an oops to me.
I doesn't make sense, but fortunately files with NULL filp->f_op don't
happen in practice (need to research whether it can't happen in theory
either so we could lose lots of checks)
>
> What should be there:
>
> > + if (!filp->f_op) {
> > + goto do_ioctl;
> > + } else if (filp->f_op->compat_ioctl) {
> > + error = filp->f_op->compat_ioctl(filp, cmd, arg);
> > + goto out_fput;
not correct either, see the incremental patch below.
> Look, was this patch even tested?
Yes.
--- linux-2.6.10-mm2.orig/fs/compat.c 2005-01-06 11:40:18.831900000 +0100
+++ linux-2.6.10-mm2/fs/compat.c 2005-01-06 15:50:23.802874672 +0100
@@ -436,10 +436,10 @@
if (!filp)
goto out;
- if (!filp->f_op) {
- if (!filp->f_op->ioctl)
- goto do_ioctl;
- } else if (filp->f_op->compat_ioctl) {
+ if (!filp->f_op || !filp->f_op->ioctl)
+ goto do_ioctl;
+
+ if (filp->f_op || filp->f_op->compat_ioctl) {
error = filp->f_op->compat_ioctl(filp, cmd, arg);
goto out_fput;
}
On Thu, Jan 06, 2005 at 02:53:56PM +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 04:06:36PM +0200, Michael S. Tsirkin wrote:
> > > It should be, unless there's some problem. In maybe a week or so.
> >
> > To make life bearable for out-of kernel modules, the following patch
> > adds 2 macros so that existance of unlocked_ioctl and ioctl_compat
> > can be easily detected.
>
> That's not the way we're making additions. Get your code merged and
> there won't be any need to detect the feature.
I would agree that it shouldn't be used for in tree code, but for
out of tree code it is rather useful. There are other such feature macros
for major driver interface changes too (e.g. in the network stack).
-Andi
On Thu, Jan 06, 2005 at 04:09:42PM +0100, Andi Kleen wrote:
> I would agree that it shouldn't be used for in tree code, but for
> out of tree code it is rather useful. There are other such feature macros
> for major driver interface changes too (e.g. in the network stack).
Which is the only place doing it. We had this discussion in the past
(lastone I revolve Greg vetoed it). We simply shouldn't clutter our
headers for the sake of out of tree drivers - with LINUX_VERSION_CODE
we've already implemented a mechanism for out of tree drivers.
p.s. droppe alsa-devel from Cc because of the braindead moderation policy.
Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> > Stare at this as I might, I dont understand why does it make sence.
> > So if filp->f_op is NULL, you are then checking filp->f_op->ioctl?
> > Looks like an oops to me.
>
> I doesn't make sense, but fortunately files with NULL filp->f_op don't
> happen in practice (need to research whether it can't happen in theory
> either so we could lose lots of checks)
Interesting. At least for character devices coming out of modules I think you
dont - you need at least fops->owner.
> --- linux-2.6.10-mm2.orig/fs/compat.c 2005-01-06 11:40:18.831900000 +0100
> +++ linux-2.6.10-mm2/fs/compat.c 2005-01-06 15:50:23.802874672 +0100
> @@ -436,10 +436,10 @@
> if (!filp)
> goto out;
>
> - if (!filp->f_op) {
> - if (!filp->f_op->ioctl)
> - goto do_ioctl;
> - } else if (filp->f_op->compat_ioctl) {
> + if (!filp->f_op || !filp->f_op->ioctl)
> + goto do_ioctl;
> +
> + if (filp->f_op || filp->f_op->compat_ioctl) {
> error = filp->f_op->compat_ioctl(filp, cmd, arg);
> goto out_fput;
> }
So now if I dont have ->ioctl the ioctl_compat wont be called.
What if I only have unlocked_ioctl?
MST
On Thu, 2005-01-06 at 15:14 +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 04:09:42PM +0100, Andi Kleen wrote:
> > I would agree that it shouldn't be used for in tree code, but for
> > out of tree code it is rather useful. There are other such feature macros
> > for major driver interface changes too (e.g. in the network stack).
>
> Which is the only place doing it. We had this discussion in the past
> (lastone I revolve Greg vetoed it). We simply shouldn't clutter our
> headers for the sake of out of tree drivers - with LINUX_VERSION_CODE
> we've already implemented a mechanism for out of tree drivers.
>
> p.s. droppe alsa-devel from Cc because of the braindead moderation policy.
>
Um, alsa-devel is not moderated, we accept posts from non subscribers.
Where do you think all the spam in our archive comes from?
Lee
On Thu, Jan 06, 2005 at 05:22:48PM +0200, Michael S. Tsirkin wrote:
> > + if (!filp->f_op || !filp->f_op->ioctl)
> > + goto do_ioctl;
> > +
> > + if (filp->f_op || filp->f_op->compat_ioctl) {
> > error = filp->f_op->compat_ioctl(filp, cmd, arg);
> > goto out_fput;
> > }
>
> So now if I dont have ->ioctl the ioctl_compat wont be called.
> What if I only have unlocked_ioctl?
Indeed. In my test setup I didn't have a driver using both. So let's
think a little more what checks we want.
The original intention (pre-patch) was that without an ioctl entry
we'd skip the hash table lookup and skip right to trying the few standard
ioctls.
So with ->compat_ioctl we should try that one first, then checking
for either ->ioctl or ->unlocked_ioctl beeing there. Like the patch
below (this time it's actually untested because all my 64bit machines
are in use):
--- linux-2.6.10-mm2.orig/fs/compat.c 2005-01-06 11:40:18.831900000 +0100
+++ linux-2.6.10-mm2/fs/compat.c 2005-01-06 16:36:17.340977664 +0100
@@ -436,14 +436,15 @@
if (!filp)
goto out;
- if (!filp->f_op) {
- if (!filp->f_op->ioctl)
- goto do_ioctl;
- } else if (filp->f_op->compat_ioctl) {
+ if (filp->f_op && filp->f_op->compat_ioctl) {
error = filp->f_op->compat_ioctl(filp, cmd, arg);
goto out_fput;
}
+ if (!filp->f_op ||
+ (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
+ goto do_ioctl;
+
down_read(&ioctl32_sem);
for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
if (t->cmd == cmd)
>
>
> MST
---end quoted text---
On Thu, Jan 06, 2005 at 10:22:21AM -0500, Lee Revell wrote:
> > p.s. droppe alsa-devel from Cc because of the braindead moderation policy.
> >
>
> Um, alsa-devel is not moderated, we accept posts from non subscribers.
> Where do you think all the spam in our archive comes from?
See the attached mail I got. Btw, where are the current alsa-devel
archives? I tried to look things up a few times lately, but all archives
linked off the websiste are either dead or totally outdated.
On Thu, Jan 06, 2005 at 03:14:29PM +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 04:09:42PM +0100, Andi Kleen wrote:
> > I would agree that it shouldn't be used for in tree code, but for
> > out of tree code it is rather useful. There are other such feature macros
> > for major driver interface changes too (e.g. in the network stack).
>
> Which is the only place doing it. We had this discussion in the past
> (lastone I revolve Greg vetoed it). We simply shouldn't clutter our
I don't know who had this discussion and did this "decision", but
for record I disagree.
> headers for the sake of out of tree drivers - with LINUX_VERSION_CODE
> we've already implemented a mechanism for out of tree drivers.
That's incredibly ugly. I always hate these checks in source code
because it's never clear what exactly they are testing for.
And requires unreasonable work to find out when exactly the feature was
added. And it doesn't really work when there are backports in older trees.
In short there are many drawbacks. HAVE_* is much nicer.
-Andi
On Thu, 2005-01-06 at 15:31 +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 10:22:21AM -0500, Lee Revell wrote:
> > > p.s. droppe alsa-devel from Cc because of the braindead moderation policy.
> > >
> >
> > Um, alsa-devel is not moderated, we accept posts from non subscribers.
> > Where do you think all the spam in our archive comes from?
>
> See the attached mail I got. Btw, where are the current alsa-devel
> archives? I tried to look things up a few times lately, but all archives
> linked off the websiste are either dead or totally outdated.
>
OK, right, that's a problem. There's no reason for that policy. Perex,
can you fix it?
The only working up to date archive I know of is the sourceforge one,
not my favorite interface:
http://sourceforge.net/mailarchive/forum.php?forum_id=1752
Lee
Hello!
Quoting r. Christoph Hellwig ([email protected]) "Re: [PATCH] deprecate (un)register_ioctl32_conversion":
> On Thu, Jan 06, 2005 at 05:22:48PM +0200, Michael S. Tsirkin wrote:
> > > + if (!filp->f_op || !filp->f_op->ioctl)
> > > + goto do_ioctl;
> > > +
> > > + if (filp->f_op || filp->f_op->compat_ioctl) {
> > > error = filp->f_op->compat_ioctl(filp, cmd, arg);
> > > goto out_fput;
> > > }
> >
> > So now if I dont have ->ioctl the ioctl_compat wont be called.
> > What if I only have unlocked_ioctl?
>
> Indeed. In my test setup I didn't have a driver using both. So let's
> think a little more what checks we want.
>
> The original intention (pre-patch) was that without an ioctl entry
> we'd skip the hash table lookup and skip right to trying the few standard
> ioctls.
>
> So with ->compat_ioctl we should try that one first, then checking
> for either ->ioctl or ->unlocked_ioctl beeing there. Like the patch
> below (this time it's actually untested because all my 64bit machines
> are in use):
>
>
> --- linux-2.6.10-mm2.orig/fs/compat.c 2005-01-06 11:40:18.831900000 +0100
> +++ linux-2.6.10-mm2/fs/compat.c 2005-01-06 16:36:17.340977664 +0100
> @@ -436,14 +436,15 @@
> if (!filp)
> goto out;
>
> - if (!filp->f_op) {
> - if (!filp->f_op->ioctl)
> - goto do_ioctl;
> - } else if (filp->f_op->compat_ioctl) {
> + if (filp->f_op && filp->f_op->compat_ioctl) {
> error = filp->f_op->compat_ioctl(filp, cmd, arg);
> goto out_fput;
> }
>
> + if (!filp->f_op ||
> + (!filp->f_op->ioctl && !filp->f_op->unlocked_ioctl))
> + goto do_ioctl;
> +
> down_read(&ioctl32_sem);
> for (t = ioctl32_hash_table[ioctl32_hash(cmd)]; t; t = t->next) {
> if (t->cmd == cmd)
>
> >
> >
> > MST
> ---end quoted text---
Amen to that. Since it conflicts with this change, here again is my patch
to make it possible for the compat_ioctl to drop back on the standard
conversions.
Applied on top of Christoph's last patch (above).
Signed-off-by: Michael S. Tsirkn <[email protected]>
diff -rup linux-2.6.10-mm2/fs/compat.c linux-2.6.10-ioctls/fs/compat.c
--- linux-2.6.10-mm2/fs/compat.c 2005-01-06 21:30:57.485167280 +0200
+++ linux-2.6.10-ioctls/fs/compat.c 2005-01-06 21:33:17.608865240 +0200
@@ -431,9 +431,10 @@ asmlinkage long compat_sys_ioctl(unsigne
if (!filp)
goto out;
if (filp->f_op && filp->f_op->compat_ioctl) {
error = filp->f_op->compat_ioctl(filp, cmd, arg);
- goto out_fput;
+ if (error != -ENOIOCTLCMD)
+ goto out_fput;
}
if (!filp->f_op ||
diff -rup linux-2.6.10-mm2/fs/ioctl.c linux-2.6.10-ioctls/fs/ioctl.c
--- linux-2.6.10-mm2/fs/ioctl.c 2005-01-06 17:54:13.000000000 +0200
+++ linux-2.6.10-ioctls/fs/ioctl.c 2005-01-06 20:34:09.329285728 +0200
@@ -26,6 +26,9 @@ static long do_ioctl(struct file *filp,
if (filp->f_op->unlocked_ioctl) {
error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
+ if (error == -ENOIOCTLCMD)
+ error = -EINVAL;
+ goto out;
} else if (filp->f_op->ioctl) {
lock_kernel();
error = filp->f_op->ioctl(filp->f_dentry->d_inode,
On Thu, Jan 06, 2005 at 02:53:56PM +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 04:06:36PM +0200, Michael S. Tsirkin wrote:
> > > It should be, unless there's some problem. In maybe a week or so.
> >
> > To make life bearable for out-of kernel modules, the following patch
> > adds 2 macros so that existance of unlocked_ioctl and ioctl_compat
> > can be easily detected.
>
> That's not the way we're making additions. Get your code merged and
> there won't be any need to detect the feature.
When Greg made sysfs GPL only, I've asked whether it is possible to merge
vmmon/vmnet in (and changing its license, of course). Answer on LKML was
quite clear: no, you are not interested in having vmmon/vmnet in Linux
kernel as you do not believe that they are usable for anything else than VMware.
So please tell me what I can do to satisfy you? You do not want our modules
in kernel tree, and you do not want to allow us to detect kernel interface
easily. Of course we can use autoconf-like scripts we are using for
example to detect pml4/pgd vs. pgd/pud vs. pgd/pmd/pte vs. pmd/pte only,
but each time you can detect feature by looking at flags and not by trying
to build one source after another detection is simpler and more reliable.
BTW, vmmon will still require register_ioctl32_conversion as we are using
(abusing) it to be able to issue 64bit ioctls from 32bit application. I
assume that there is no supported way how to issue 64bit ioctls from 32bit
aplication anymore after you disallow system-wide translations to be registered
by modules.
Best regards,
Petr Vandrovec
On Thu, Jan 06, 2005 at 05:35:59PM +0100, Petr Vandrovec wrote:
> When Greg made sysfs GPL only, I've asked whether it is possible to merge
> vmmon/vmnet in (and changing its license, of course). Answer on LKML was
> quite clear: no, you are not interested in having vmmon/vmnet in Linux
> kernel as you do not believe that they are usable for anything else than VMware.
While I think there could be users, these users would probably come only
after the code was GPLed, so this is kinda chicken & egg.
> So please tell me what I can do to satisfy you? You do not want our modules
> in kernel tree, and you do not want to allow us to detect kernel interface
> easily. Of course we can use autoconf-like scripts we are using for
> example to detect pml4/pgd vs. pgd/pud vs. pgd/pmd/pte vs. pmd/pte only,
> but each time you can detect feature by looking at flags and not by trying
> to build one source after another detection is simpler and more reliable.
I don't care at all for non-opensource users, or small opensource glue for
a big propritary user.
> BTW, vmmon will still require register_ioctl32_conversion as we are using
> (abusing) it to be able to issue 64bit ioctls from 32bit application. I
> assume that there is no supported way how to issue 64bit ioctls from 32bit
> aplication anymore after you disallow system-wide translations to be registered
> by modules.
Well, bad luck. You'll have to stop using undocumented hacks.
After booting with 2.6.10-mm1, I get the following message on the serial
console (last message seen):
PCI: 0000:00:0b.0 has unsupported PM cap regs version (1)
For reference, lspci shows that device is
00:0b.0 Multimedia audio controller: Ensoniq 5880 AudioPCI (rev 02)
I notice there is a relatively recent patch to add this message.
http://article.gmane.org/gmane.linux.kernel/263974
However, my .config includes
#
# Power management options (ACPI, APM)
#
# CONFIG_PM is not set
which should disable all power management related processing.
[1] Should the code generating the warning be active without CONFIG_PM
being set?
[2] Can you explain why the message is generated (why not silently ignore
the older hardware) or is there something in an init script (I am using
Fedora Core 2) that [incorrectly] assumes power management is available to
cause the message to be printed?
--Mark H Johnson
<mailto:[email protected]>
On Thu, Jan 06, 2005 at 05:35:59PM +0100, Petr Vandrovec wrote:
> BTW, vmmon will still require register_ioctl32_conversion as we are using
> (abusing) it to be able to issue 64bit ioctls from 32bit application. I
> assume that there is no supported way how to issue 64bit ioctls from 32bit
> aplication anymore after you disallow system-wide translations to be registered
> by modules.
Why are you issuing 64bit ioctls from 32bit applications?
-Andi
On Thu, Jan 06, 2005 at 03:14:29PM +0000, Christoph Hellwig wrote:
> On Thu, Jan 06, 2005 at 04:09:42PM +0100, Andi Kleen wrote:
> > I would agree that it shouldn't be used for in tree code, but for
> > out of tree code it is rather useful. There are other such feature macros
> > for major driver interface changes too (e.g. in the network stack).
>
> Which is the only place doing it. We had this discussion in the past
> (lastone I revolve Greg vetoed it). We simply shouldn't clutter our
> headers for the sake of out of tree drivers - with LINUX_VERSION_CODE
> we've already implemented a mechanism for out of tree drivers.
LINUX_VERSION_CODE never worked in last ~4 years as definite key to make
decision about supported API. Vendors are porting stuff across releases,
there exists additional trees like -mm, -wolk, -ac, and even if you look
at the current example with deprecating register_ioctl32_conversion you'll
find that it does not work:
2.6.10 kernel which presents itself as 0x02060A does have this, but
does not have {compat,native}_ioctl.
2.6.10-mm2 kernel, which presents itself as 0x02060A too, has
{compat,native}_ioctl, and also has register_ioctl32_conversion.
And there is intention to apply patch to 2.6.10-mmX which will present
itself as 0x02060A again, will have {compat,native}_ioctl, and will either
not have register_ioctl32_conversion at all, or will produce
unfortunate unwanted annoying warning when this function is used.
So you'll have two 2.6.10 kernels, one says that register_ioctl32_conversion is
only way to do things, and at same time it will say that register_ioctl32_conversion
is deprecated. Strange, isn't it? Unfortunate? Maybe. Can this work with
LINUX_VERSION_CODE? Definitely not without an additional checks on other
things.
Same situation exists with pml4/pgd/pud I described in previous mail. You have
2.6.10 with pgd only, 2.6.10-bkWhatever with pgd/pud, and 2.6.10-mmX with pml4/pgd.
This cannot be checked by LINUX_VERSION_CODE too...
Other changes usually add some #define which can be checked (like PUD_MASK or
pml4_offset), but sometime it happens that no useful macro is created and
test-compile is only way how to discover things (from past let's name epoll
change backported from 2.5.x to 2.4.x-wolk, SKAS's change to do_mmap_pgoff
prototype living in SUSE tree for a bit, or nopage's change in prototype
around 2.6.1).
Best regards,
Petr Vandrovec
[email protected]
On Thu, Jan 06, 2005 at 05:57:15PM +0100, Andi Kleen wrote:
> On Thu, Jan 06, 2005 at 05:35:59PM +0100, Petr Vandrovec wrote:
> > BTW, vmmon will still require register_ioctl32_conversion as we are using
> > (abusing) it to be able to issue 64bit ioctls from 32bit application. I
> > assume that there is no supported way how to issue 64bit ioctls from 32bit
> > aplication anymore after you disallow system-wide translations to be registered
> > by modules.
>
> Why are you issuing 64bit ioctls from 32bit applications?
There are three reasons (main reason is that vmware is 32bit app, but it is how
things are currently laid out; even if there will be 64bit app, 32bit versions are
already in use and people wants to use them on 64bit kernels):
* USB. usbfs API is written in a way which does not allow you to safely wrap
it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs
code itself did not look feasible year ago. Even on current 64bit kernels it is not
possible to issue raw USB operations from 32bit apps, and I do not believe that
it is going to change - after all, just issuing ioctl through 64bit path from application
which is aware of 64bit kernel is quite simple, much simpler than any attempt to
make kernel dual-interface.
* parport interface, serial port: not all APIs were implemented in kernel. Current
kernels do wrap all APIs vmware needs, but older kernels do not, and so we had to find
some solution for older kernels too. Not so surprisingly, solution we had in place for
USB works for them too...
* floppy: it is actually different from examples above, as FDRAWCMD command is
supported by 32->64 layer, but it is supported incorrectly. Due to this all above
started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit
kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now
which one you'll get until you call this ioctl... And once we had code in place,
it was reused for USB and later for ppdev & serial.
So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument}
and passes it down to 64bit sys_ioctl:
/* Use weak: not all kernels export sys_ioctl for use by modules */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 66)
asmlinkage __attribute__((weak)) long
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
#else
asmlinkage __attribute__((weak)) int
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
#endif
...
static int
LinuxDriver_Ioctl3264Passthrough(unsigned int fd, unsigned int iocmd,
unsigned long ioarg, struct file * filp)
{
VMIoctl64 cmd;
if (copy_from_user(&cmd, (VMIoctl64*)ioarg, sizeof(cmd))) {
return -EFAULT;
}
if (sys_ioctl) {
int err;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 26) || \
(LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 3))
err = sys_ioctl(fd, cmd.iocmd, cmd.ioarg);
#else
unlock_kernel();
err = sys_ioctl(fd, cmd.iocmd, cmd.ioarg);
lock_kernel();
#endif
return err;
}
return -ENOTTY;
}
We were thinking about creating 64bit thread, and issuing 64bit syscalls from it, but
it looked more fragile than code above.
Best regards,
Petr Vandrovec
On Mer, 2005-01-05 at 21:27, Andrew Morton wrote:
> Takashi Iwai <[email protected]> wrote:
> >
> > The default blocking behavior of OSS devices was changed recently.
> > When the device is in use, open returns -EBUSY immediately in the
> > latest version while it was blocked until released in the former
> > version.
> >
>
> whoa. That's a significant change in user-visible behaviour. Why was this
> done?
It now emulates the later OSS PCI and other devices not 2.2 OSS. As such
its the right thing to have done for emulation of OSS IMHO. It also
works with more apps several of which hang on opening /dev/dsp0
expecting OSS -EBUSY responses.
On Thu, Jan 06, 2005 at 06:53:42PM +0100, Andi Kleen wrote:
> [cc list trimmed]
> >
> > * floppy: it is actually different from examples above, as FDRAWCMD command is
> > supported by 32->64 layer, but it is supported incorrectly. Due to this all above
> > started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit
> > kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now
> > which one you'll get until you call this ioctl... And once we had code in place,
> > it was reused for USB and later for ppdev & serial.
>
> Did you submit a patch for that? If not you should.
I hoped that floppies will die before... FDRAWCMD receives array
of floppy_raw_cmd structures, and to find how many of these structures
you have to peek into every of them to find whether there is next one or
not, and structures itself contain pointers to other memory... I'll code up
something during weekend.
> > So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument}
> > and passes it down to 64bit sys_ioctl:
>
> The magic 64bit interface isn't a very good interface, don't expect
> that to be supported in the future.
With per-file compat_ioctl ipx ioctls (using SIOCPRIVATE+X range) could
be made to work too, so only thing left for me is USB.
Petr Vandrovec
[cc list trimmed]
On Thu, Jan 06, 2005 at 06:26:13PM +0100, Petr Vandrovec wrote:
> > Why are you issuing 64bit ioctls from 32bit applications?
>
> There are three reasons (main reason is that vmware is 32bit app, but it is how
> things are currently laid out; even if there will be 64bit app, 32bit versions are
> already in use and people wants to use them on 64bit kernels):
>
> * USB. usbfs API is written in a way which does not allow you to safely wrap
> it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs
> code itself did not look feasible year ago. Even on current 64bit kernels it is not
> possible to issue raw USB operations from 32bit apps, and I do not believe that
> it is going to change - after all, just issuing ioctl through 64bit path from application
> which is aware of 64bit kernel is quite simple, much simpler than any attempt to
> make kernel dual-interface.
Agree that's a problem. We just need an alternative interface here
or I try to come up with an x86-64 specific hack (I think it's possible
to do the compatibility x86-64 specific, just not in compat code for
all architectures who have truly separated user/kernel address spaces)
I hope the USB people will eventually add a better interface here.
Greg?
>
> * parport interface, serial port: not all APIs were implemented in kernel. Current
> kernels do wrap all APIs vmware needs, but older kernels do not, and so we had to find
> some solution for older kernels too. Not so surprisingly, solution we had in place for
> USB works for them too...
But that's a non issue for the new kernels affected by the new ioctl
interface.
>
> * floppy: it is actually different from examples above, as FDRAWCMD command is
> supported by 32->64 layer, but it is supported incorrectly. Due to this all above
> started, as we had to make application aware of kernel it runs on, as FDRAWCMD on 32bit
> kernel returns 80 byte structure, while 104 byte on 64bit kernel, and you do not now
> which one you'll get until you call this ioctl... And once we had code in place,
> it was reused for USB and later for ppdev & serial.
Did you submit a patch for that? If not you should.
> So we added simple wrapper to vmmon which just gets {64bit-ioctl-number, 64bit-arg-argument}
> and passes it down to 64bit sys_ioctl:
The magic 64bit interface isn't a very good interface, don't expect
that to be supported in the future.
-Andi
Christoph Hellwig <[email protected]> writes:
> See the attached mail I got. Btw, where are the current alsa-devel
> archives? I tried to look things up a few times lately, but all archives
> linked off the websiste are either dead or totally outdated.
http://news.gmane.org/gmane.linux.alsa.devel/ (also available via
NNTP).
Catalin
On Thu, Jan 06, 2005 at 06:53:42PM +0100, Andi Kleen wrote:
> [cc list trimmed]
>
> On Thu, Jan 06, 2005 at 06:26:13PM +0100, Petr Vandrovec wrote:
> > > Why are you issuing 64bit ioctls from 32bit applications?
> >
> > There are three reasons (main reason is that vmware is 32bit app, but it is how
> > things are currently laid out; even if there will be 64bit app, 32bit versions are
> > already in use and people wants to use them on 64bit kernels):
> >
> > * USB. usbfs API is written in a way which does not allow you to safely wrap
> > it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs
> > code itself did not look feasible year ago. Even on current 64bit kernels it is not
> > possible to issue raw USB operations from 32bit apps, and I do not believe that
> > it is going to change - after all, just issuing ioctl through 64bit path from application
> > which is aware of 64bit kernel is quite simple, much simpler than any attempt to
> > make kernel dual-interface.
>
> Agree that's a problem. We just need an alternative interface here
> or I try to come up with an x86-64 specific hack (I think it's possible
> to do the compatibility x86-64 specific, just not in compat code for
> all architectures who have truly separated user/kernel address spaces)
>
> I hope the USB people will eventually add a better interface here.
> Greg?
Yes, we've been talking about a usbfs2 for a long time now, but no one
has stepped up and done the work. It would look a lot like gadgetfs,
which only has a limited number of ioctls needed for its operation.
But I don't see where the problem is unique to usbfs here, don't we
properly use the 32->64bit ioctl conversion code to solve this kind of
issue? Are we using it incorrectly?
thanks,
greg k-h
> > Agree that's a problem. We just need an alternative interface here
> > or I try to come up with an x86-64 specific hack (I think it's possible
> > to do the compatibility x86-64 specific, just not in compat code for
> > all architectures who have truly separated user/kernel address spaces)
> >
> > I hope the USB people will eventually add a better interface here.
> > Greg?
>
> Yes, we've been talking about a usbfs2 for a long time now, but no one
> has stepped up and done the work. It would look a lot like gadgetfs,
> which only has a limited number of ioctls needed for its operation.
>
> But I don't see where the problem is unique to usbfs here, don't we
> properly use the 32->64bit ioctl conversion code to solve this kind of
> issue? Are we using it incorrectly?
DaveM can probably give you more details since he tried unsucessfully
to make it work. I think the problem is that there is no enough
information for the compat layer to convert everything.
Here's his comment from fs/compat_ioctl.c.
On x86-64 it can be a bit easier because you can get away with
only partially converting a data structure because the 32bit
space is still visible from the kernel. But that doesn't work
on some other archs.
-Andi
/* This needs more work before we can enable it. Unfortunately
* because of the fancy asynchronous way URB status/error is written
* back to userspace, we'll need to fiddle with USB devio internals
* and/or reimplement entirely the frontend of it ourselves. -DaveM
*
* The issue is:
*
* When an URB is submitted via usbdevicefs it is put onto an
* asynchronous queue. When the URB completes, it may be reaped
* via another ioctl. During this reaping the status is written
* back to userspace along with the length of the transfer.
*
* We must translate into 64-bit kernel types so we pass in a kernel
* space copy of the usbdevfs_urb structure. This would mean that we
* must do something to deal with the async entry reaping. First we
* have to deal somehow with this transitory memory we've allocated.
* This is problematic since there are many call sites from which the
* async entries can be destroyed (and thus when we'd need to free up
* this kernel memory). One of which is the close() op of usbdevicefs.
* To handle that we'd need to make our own file_operations struct which
* overrides usbdevicefs's release op with our own which runs usbdevicefs's
* real release op then frees up the kernel memory.
*
* But how to keep track of these kernel buffers? We'd need to either
* keep track of them in some table _or_ know about usbdevicefs internals
* (ie. the exact layout of its file private, which is actually defined
* in linux/usbdevice_fs.h, the layout of the async queues are private to
* devio.c)
*
* There is one possible other solution I considered, also involving knowledge
* of usbdevicefs internals:
*
* After an URB is submitted, we "fix up" the address back to the user
* space one. This would work if the status/length fields written back
* by the async URB completion lines up perfectly in the 32-bit type with
* the 64-bit kernel type. Unfortunately, it does not because the iso
* frame descriptors, at the end of the struct, can be written back.
*
* I think we'll just need to simply duplicate the devio URB engine here.
*/
On Thu, 6 Jan 2005 20:51:44 +0100
Andi Kleen <[email protected]> wrote:
> DaveM can probably give you more details since he tried unsucessfully
> to make it work. I think the problem is that there is no enough
> information for the compat layer to convert everything.
When the usbfs async stuff writes back the status, we are no
longer within the original syscall/ioctl execution any more,
therefore we don't know if we're doing this for a compat task
or not.
Technically we could create a "is_compat_task()" type thing
to check but Andi has always been against that and he's given
good reasons. I tend to agree with him, especially in that there
are valid cases where a compat task might want to make 64-bit
system calls (f.e. to support 64-bit process debugging from
a 32-bit binary, and this is not fantasy as sparc64 could support
this right now)
As mentioned in the code comment, there are also memory management
issues. We can cons up a temporary kernel buffer in order to
convert the 32-bit structs into 64-bit ones the usbfs code
expects, but then we have the issue of whether we can keep that
buffer around during the entirety of the async operation and
if so who in the world will free it up and how will they know
to do so?
Finally there are complications wrt. using a kernel buffer in that
we have to thus use set_fs(KERNEL_DS) in order for kernel buffers
to be passed into the usbfs routine translated. This means that
user space accesses of the actual user buffers wouldn't work, and
we thus need to use temporary kernel buffers for that as well.
This is also incompatible with the async nature of how usbfs wants
to work.
I would suggest something that had a fixed sized and fixed layout
status block. Something that doesn't change layout or size on any
platform.
It's the pointers all over the place in the usbfs ioctl commands
that causes all of the problems. If you split things up into,
say, user buffer pointer/len struct and status block struct, it might
be a lot easier to support this stuff. But I'm even skeptical about
this working.
On Thu, Jan 06, 2005 at 11:59:59AM -0800, David S. Miller wrote:
> On Thu, 6 Jan 2005 20:51:44 +0100
> Andi Kleen <[email protected]> wrote:
>
> > DaveM can probably give you more details since he tried unsucessfully
> > to make it work. I think the problem is that there is no enough
> > information for the compat layer to convert everything.
>
> When the usbfs async stuff writes back the status, we are no
> longer within the original syscall/ioctl execution any more,
> therefore we don't know if we're doing this for a compat task
> or not.
[...]
Thanks Dave for the update. I misremembered and I don't think
I can fix this up for x86-64. We'll need a new interface of some sort.
-Andi
On Thu, Jan 06, 2005 at 09:44:31PM +0100, Andi Kleen wrote:
> On Thu, Jan 06, 2005 at 11:59:59AM -0800, David S. Miller wrote:
> > On Thu, 6 Jan 2005 20:51:44 +0100
> > Andi Kleen <[email protected]> wrote:
> >
> > > DaveM can probably give you more details since he tried unsucessfully
> > > to make it work. I think the problem is that there is no enough
> > > information for the compat layer to convert everything.
> >
> > When the usbfs async stuff writes back the status, we are no
> > longer within the original syscall/ioctl execution any more,
> > therefore we don't know if we're doing this for a compat task
> > or not.
>
> [...]
>
> Thanks Dave for the update. I misremembered and I don't think
> I can fix this up for x86-64. We'll need a new interface of some sort.
Poor man way of doing this is just ripping ioctl-related code from usb's devio.c
to separate file, and build this file twice, once for native_ioctl and 64bit
urb structure, and once for compat_ioctl and 32bit urb structure.
I see no reason why it should not work for apps which submit & reap URBs through
32bit or 64bit API exclusively, without mixing them (and when you mix them,
you'll get reasonable error that you did not submit specified URB).
Only problem is that after that USB code "knows" about 32bit API. But it is
intention of compat_ioctl, no?
Petr
P.S.: When designing new API, please do not make it unnecessary complicated.
USB video needs rather large bandwidth and low latency, so please no ASCII
strings, and scatter-gather aware API helps a bit...
On Thu, Jan 06, 2005 at 10:09:21PM +0100, Petr Vandrovec wrote:
> On Thu, Jan 06, 2005 at 09:44:31PM +0100, Andi Kleen wrote:
> > On Thu, Jan 06, 2005 at 11:59:59AM -0800, David S. Miller wrote:
> > > On Thu, 6 Jan 2005 20:51:44 +0100
> > > Andi Kleen <[email protected]> wrote:
> > >
> > > > DaveM can probably give you more details since he tried unsucessfully
> > > > to make it work. I think the problem is that there is no enough
> > > > information for the compat layer to convert everything.
> > >
> > > When the usbfs async stuff writes back the status, we are no
> > > longer within the original syscall/ioctl execution any more,
> > > therefore we don't know if we're doing this for a compat task
> > > or not.
Ick, yeah, now I remember...
> P.S.: When designing new API, please do not make it unnecessary complicated.
> USB video needs rather large bandwidth and low latency, so please no ASCII
> strings, and scatter-gather aware API helps a bit...
In measurements published on linux-usb-devel, pure userspace calls using
the current usbfs code generated almost full bandwidth usage (within the
hardware limits). So adding the scatter-gather api interface to usbfs
wouldn't really provide that much benefit.
And, we can always use help in designing such an API, if you could find
someone at your company to help us out in doing so... :)
thanks,
greg k-h
On Thursday 06 January 2005 1:24 pm, Greg KH wrote:
> > P.S.: ?When designing new API, please do not make it unnecessary complicated.
> > USB video needs rather large bandwidth and low latency, so please no ASCII
> > strings, and scatter-gather aware API helps a bit...
>
> In measurements published on linux-usb-devel, pure userspace calls using
> the current usbfs code generated almost full bandwidth usage (within the
> hardware limits). ?So adding the scatter-gather api interface to usbfs
> wouldn't really provide that much benefit.
Actually, the measurements I recall were using that
nasty usbfs-specific async API ... or using huge
buffers with the synchronous/blocking calls, so
the hiccups added by scheduling latencies didn't
kick in very often.
> And, we can always use help in designing such an API, if you could find
> someone at your company to help us out in doing so... :)
Or just doing something like gadgetfs, where the standard
Linux "libaio" calls work just fine. I was certainly able
to stream 24 Mbyte/sec isochronous transfers (that's the
top speed possible with one high speed ISO endpoint).
The key point is that one userspace IOCB should map directly
to one URB in the kernel; and one userspace file (descriptor)
should map to one USB endpoint. For a host side API, it turns
out that isochronous URBs already have limited scatter/gather
style support -- each one maps to several packets.
I think it'd be best to use the existing AIO support rather
than have usbfs2 create yet another USB-specific thing.
- Dave
Hi!
> > > > It should be, unless there's some problem. In maybe a week or so.
> > >
> > > To make life bearable for out-of kernel modules, the following patch
> > > adds 2 macros so that existance of unlocked_ioctl and ioctl_compat
> > > can be easily detected.
> >
> > That's not the way we're making additions. Get your code merged and
> > there won't be any need to detect the feature.
>
> When Greg made sysfs GPL only, I've asked whether it is possible to merge
> vmmon/vmnet in (and changing its license, of course). Answer on LKML was
> quite clear: no, you are not interested in having vmmon/vmnet in Linux
> kernel as you do not believe that they are usable for anything else
> than VMware.
What about
1) Put vmmon/vmnet under GPL
2) Find some GPL user of vmmon/vmnet
3) Merge should be doable now
Pavel
--
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
On Thu, Jan 06, 2005 at 01:59:25PM -0800, David Brownell wrote:
> On Thursday 06 January 2005 1:24 pm, Greg KH wrote:
> > > P.S.: ?When designing new API, please do not make it unnecessary complicated.
> > > USB video needs rather large bandwidth and low latency, so please no ASCII
> > > strings, and scatter-gather aware API helps a bit...
> >
> > In measurements published on linux-usb-devel, pure userspace calls using
> > the current usbfs code generated almost full bandwidth usage (within the
> > hardware limits). ?So adding the scatter-gather api interface to usbfs
> > wouldn't really provide that much benefit.
>
> Actually, the measurements I recall were using that
> nasty usbfs-specific async API ... or using huge
> buffers with the synchronous/blocking calls, so
> the hiccups added by scheduling latencies didn't
> kick in very often.
Ah, yeah, that's true.
> > And, we can always use help in designing such an API, if you could find
> > someone at your company to help us out in doing so... :)
>
> Or just doing something like gadgetfs, where the standard
> Linux "libaio" calls work just fine. I was certainly able
> to stream 24 Mbyte/sec isochronous transfers (that's the
> top speed possible with one high speed ISO endpoint).
>
> The key point is that one userspace IOCB should map directly
> to one URB in the kernel; and one userspace file (descriptor)
> should map to one USB endpoint. For a host side API, it turns
> out that isochronous URBs already have limited scatter/gather
> style support -- each one maps to several packets.
>
> I think it'd be best to use the existing AIO support rather
> than have usbfs2 create yet another USB-specific thing.
I completely agree.
greg k-h
On Dunnersdag 06 Januar 2005 18:53, Andi Kleen wrote:
> > * USB. usbfs API is written in a way which does not allow you to safely wrap
> > it in "generic" 32->64 layer, and attempts to do it in non-generic way in usbfs
> > code itself did not look feasible year ago. Even on current 64bit kernels it is not
> > possible to issue raw USB operations from 32bit apps, and I do not believe that
> > it is going to change - after all, just issuing ioctl through 64bit path from application
> > which is aware of 64bit kernel is quite simple, much simpler than any attempt to
> > make kernel dual-interface.
>
> Agree that's a problem. We just need an alternative interface here
> or I try to come up with an x86-64 specific hack (I think it's possible
> to do the compatibility x86-64 specific, just not in compat code for
> all architectures who have truly separated user/kernel address spaces)
>
> I hope the USB people will eventually add a better interface here.
> Greg?
As a quick fix, wouldn't it be easy enough to just mark USBDEVFS_IOCTL as
COMPATIBLE_IOCTL()? The number is actually different for 32 and 64 bit kernels,
so a 32 bit application that knows about this could use 64 bit data structures
and then just call ioctl(fd, USBDEVFS_IOCTL64, data) instead of using a weird
hack to achieve exactly the same.
Applications trying to call the 32 bit USBDEVFS_IOCTL would still see -EINVAL
because there is no wrapper for this.
Maybe the same can be done for some of the other ioctl calls. It effectively
means moving part of the compat layer to user space from fs/compat_ioctl.c,
but it appears that applications are already doing this.
Arnd <><
> As a quick fix, wouldn't it be easy enough to just mark USBDEVFS_IOCTL as
> COMPATIBLE_IOCTL()? The number is actually different for 32 and 64 bit kernels,
> so a 32 bit application that knows about this could use 64 bit data structures
> and then just call ioctl(fd, USBDEVFS_IOCTL64, data) instead of using a weird
> hack to achieve exactly the same.
> Applications trying to call the 32 bit USBDEVFS_IOCTL would still see -EINVAL
> because there is no wrapper for this.
> Maybe the same can be done for some of the other ioctl calls. It effectively
> means moving part of the compat layer to user space from fs/compat_ioctl.c,
> but it appears that applications are already doing this.
That's too ugly. We would end up with different ABIs.
I don't really want to do that, no.
-Andi
On Thu, Jan 06, 2005 at 04:52:01PM +0300, Vladimir Saveliev wrote:
> The work is in progress. Here is list of patches.
> reiser4-perthread-pages.patch
this one I don't particularly object, but I'm not sure it's really
the right thing to do. Can you post it with a detailed description
to linux-mm so we can kick off discussion?
The other thing I'm totally oposed to was the per-sb kobject patch,
but I can't find that in current -mm anymore.
Hello
On Fri, 2005-01-07 at 17:46, Christoph Hellwig wrote:
>
> > reiser4-perthread-pages.patch
>
> this one I don't particularly object, but I'm not sure it's really
> the right thing to do. Can you post it with a detailed description
> to linux-mm so we can kick off discussion?
>
This patch adds an API to reserve some number of pages for exclusive use
of calling thread. This is necessary to support operations that cannot
tolerate memory allocation failures in the middle (reiser4 uses this API
to not have to undo complex uncompleted (due to ENOMEM) filesystem tree
modifications).
Implementation is simple: reserved pages are stored in a list hanging
off calling task_struct. Caller is to manually release unused pages.
This API is supposed to be used for small reservation (no more than few
dozens of pages).
Looking forward for advices on how to do that better/properly
Thanks
Vladimir Saveliev <[email protected]> wrote:
>
> +int perthread_pages_reserve(int nrpages, int gfp)
> +{
> + int i;
> + struct list_head accumulator;
> + struct list_head *per_thread;
> +
> + per_thread = get_per_thread_pages();
> + INIT_LIST_HEAD(&accumulator);
> + list_splice_init(per_thread, &accumulator);
> + for (i = 0; i < nrpages; ++i) {
This will end up reserving more pages than were asked for, if
current->private_pages_count is non-zero. Deliberate?
> diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h
> --- linux-2.6.10-rc3/include/linux/gfp.h~reiser4-perthread-pages 2004-12-22 20:09:44.153164276 +0300
> +++ linux-2.6.10-rc3-vs/include/linux/gfp.h 2004-12-22 20:09:44.199167794 +0300
> @@ -134,4 +134,8 @@ extern void FASTCALL(free_cold_page(stru
>
> void page_alloc_init(void);
>
> +int perthread_pages_reserve(int nrpages, int gfp);
> +void perthread_pages_release(int nrpages);
> +int perthread_pages_count(void);
> +
> #endif /* __LINUX_GFP_H */
> diff -puN include/linux/init_task.h~reiser4-perthread-pages include/linux/init_task.h
> --- linux-2.6.10-rc3/include/linux/init_task.h~reiser4-perthread-pages 2004-12-22 20:09:44.160164812 +0300
> +++ linux-2.6.10-rc3-vs/include/linux/init_task.h 2004-12-22 20:09:44.201167947 +0300
> @@ -112,8 +112,8 @@ extern struct group_info init_groups;
> .proc_lock = SPIN_LOCK_UNLOCKED, \
> .switch_lock = SPIN_LOCK_UNLOCKED, \
> .journal_info = NULL, \
> + .private_pages = LIST_HEAD_INIT(tsk.private_pages), \
> + .private_pages_count = 0, \
> }
>
> -
> -
> #endif
> diff -puN include/linux/sched.h~reiser4-perthread-pages include/linux/sched.h
> --- linux-2.6.10-rc3/include/linux/sched.h~reiser4-perthread-pages 2004-12-22 20:09:44.170165576 +0300
> +++ linux-2.6.10-rc3-vs/include/linux/sched.h 2004-12-22 20:09:44.204168176 +0300
> @@ -691,6 +691,9 @@ struct task_struct {
> nodemask_t mems_allowed;
> int cpuset_mems_generation;
> #endif
> +
> + struct list_head private_pages; /* per-process private pages */
> + int private_pages_count;
> };
>
> static inline pid_t process_group(struct task_struct *tsk)
> diff -puN kernel/fork.c~reiser4-perthread-pages kernel/fork.c
> --- linux-2.6.10-rc3/kernel/fork.c~reiser4-perthread-pages 2004-12-22 20:09:44.179166264 +0300
> +++ linux-2.6.10-rc3-vs/kernel/fork.c 2004-12-22 20:09:44.215169017 +0300
> @@ -154,6 +154,10 @@ static struct task_struct *dup_task_stru
> tsk->thread_info = ti;
> ti->task = tsk;
>
> + /* initialize list of pages privately reserved by process */
> + INIT_LIST_HEAD(&tsk->private_pages);
> + tsk->private_pages_count = 0;
> +
> /* One for us, one for whoever does the "release_task()" (usually parent) */
> atomic_set(&tsk->usage,2);
> return tsk;
> diff -puN mm/page_alloc.c~reiser4-perthread-pages mm/page_alloc.c
> --- linux-2.6.10-rc3/mm/page_alloc.c~reiser4-perthread-pages 2004-12-22 20:09:44.187166876 +0300
> +++ linux-2.6.10-rc3-vs/mm/page_alloc.c 2004-12-22 20:09:44.219169323 +0300
> @@ -551,6 +551,97 @@ void fastcall free_cold_page(struct page
> free_hot_cold_page(page, 1);
> }
>
> +static inline struct list_head *get_per_thread_pages(void)
> +{
> + return ¤t->private_pages;
> +}
this is a completely useless wrapper that doesn't buy anything.
> +int perthread_pages_reserve(int nrpages, int gfp)
> +{
> + int i;
> + struct list_head accumulator;
> + struct list_head *per_thread;
> +
> + per_thread = get_per_thread_pages();
> + INIT_LIST_HEAD(&accumulator);
> + list_splice_init(per_thread, &accumulator);
Can probably be written much simpler as:
int perthread_pages_reserve(int nrpages, int gfp)
{
LIST_HEAD(accumulator);
int i;
list_splice_init(¤t->private_pages, &accumulator);
Now the big question is, what's synchronizing access to
current->private_pages?
> + for (i = 0; i < nrpages; ++i) {
> + struct page *page;
> +
> + page = alloc_page(gfp);
> + if (page != NULL)
> + list_add(&page->lru, &accumulator);
> + else {
> + for (; i > 0; --i) {
> + page = list_entry(accumulator.next, struct page, lru);
> + list_del(&page->lru);
> + page_cache_release(page);
> + }
> + return -ENOMEM;
> + }
> + }
Would be much more readable with the error condition handling at the
end of the function and a goto.
> +int perthread_pages_count(void)
> +{
> + return current->private_pages_count;
> +}
> +EXPORT_SYMBOL(perthread_pages_count);
Again a completely useless wrapper.
> +static inline struct page *
> +perthread_pages_alloc(void)
> +{
> + struct list_head *perthread_pages;
> +
> + /*
> + * try to allocate pages from the per-thread private_pages pool. No
> + * locking is needed: this list can only be modified by the thread
> + * itself, and not by interrupts or other threads.
> + */
> + perthread_pages = get_per_thread_pages();
> + if (!in_interrupt() && !list_empty(perthread_pages)) {
> + struct page *page;
> +
> + page = list_entry(perthread_pages->next, struct page, lru);
> + list_del(&page->lru);
> + current->private_pages_count--;
> + /*
> + * per-thread page is already initialized, just return it.
> + */
> + return page;
> + } else
> + return NULL;
> +}
Would be written much cleaner with a single return statement and the
comment above the function, ala:
/*
* try to allocate pages from the per-thread private_pages pool. No
* locking is needed: this list can only be modified by the thread
* itself, and not by interrupts or other threads.
*/
static inline struct page *perthread_pages_alloc(void)
{
struct list_head *perthread_pages = ¤t->private_pages;
struct page *page = NULL;
if (!in_interrupt() && !list_empty(perthread_pages)) {
page = list_entry(perthread_pages->next, struct page, lru);
list_del(&page->lru);
current->private_pages_count--;
}
return page;
}
> + if (order == 0) {
> + page = perthread_pages_alloc();
> + if (page != NULL)
> + return page;
> + }
> +
You should at least move the !in_interrupt() condition out here.
> Now the big question is, what's synchronizing access to
> current->private_pages?
Umm, it's obviously correct as we're thread-local. Objection taken back :)
Vladimir Saveliev wrote:
> [...]
> + if (order == 0) {
> + page = perthread_pages_alloc();
> + if (page != NULL)
> + return page;
> + }
I hope this has not been extensively discussed yet, and I missed the
thread but, does everybody think this is a good thing?
This seems like a very asymmetrical behavior. If the code explicitly
reserves pages, it should explicitly use them, or it will become
impossible to track down who is using what (not to mention that this
will slow down every regular user of __alloc_pages, even if it is just
for a quick test).
Why are there specialized functions to reserve the pages, but then they
are used through the standard __alloc_pages interface?
At the very least this test should be moved to the very beginning of the
function. It is of no use to calculate "can_try_harder" before running
this code if it will use a reserved page.
Having a specialized function to get the reserved pages, would also make
the logic in "perthread_pages_reserve" more clear (i.e., that comment
would become unnecessary), and lose the test to "in_interrupt()" in
"perthread_pages_alloc", if I'm reading this correctly.
--
Paulo Marques - http://www.grupopie.com
"A journey of a thousand miles begins with a single step."
Lao-tzu, The Way of Lao-tzu
On Thu, Jan 06, 2005 at 10:32:31AM -0600, [email protected] wrote:
> After booting with 2.6.10-mm1, I get the following message on the serial
> console (last message seen):
>
> PCI: 0000:00:0b.0 has unsupported PM cap regs version (1)
>
> For reference, lspci shows that device is
> 00:0b.0 Multimedia audio controller: Ensoniq 5880 AudioPCI (rev 02)
>
> I notice there is a relatively recent patch to add this message.
> http://article.gmane.org/gmane.linux.kernel/263974
>
> However, my .config includes
>
> #
> # Power management options (ACPI, APM)
> #
> # CONFIG_PM is not set
>
> which should disable all power management related processing.
>
> [1] Should the code generating the warning be active without CONFIG_PM
> being set?
>
> [2] Can you explain why the message is generated (why not silently ignore
> the older hardware) or is there something in an init script (I am using
> Fedora Core 2) that [incorrectly] assumes power management is available to
> cause the message to be printed?
David, any ideas? Should I just revert this change for now?
thanks,
greg k-h
On Fri, 2005-01-07 at 19:05 +0000, Christoph Hellwig wrote:
> int perthread_pages_reserve(int nrpages, int gfp)
> {
> LIST_HEAD(accumulator);
> int i;
>
> list_splice_init(¤t->private_pages, &accumulator);
>
> Now the big question is, what's synchronizing access to
> current->private_pages?
Safe without locks so long as there is no other way to get at another
process's private_pages. ;)
Best,
Robert Love
On Fri, Jan 07, 2005 at 07:32:40PM +0000, Christoph Hellwig wrote:
> On Fri, Jan 07, 2005 at 07:14:15PM +0000, Paulo Marques wrote:
> > This seems like a very asymmetrical behavior. If the code explicitly
> > reserves pages, it should explicitly use them, or it will become
> > impossible to track down who is using what (not to mention that this
> > will slow down every regular user of __alloc_pages, even if it is just
> > for a quick test).
> >
> > Why are there specialized functions to reserve the pages, but then they
> > are used through the standard __alloc_pages interface?
>
> That seems to be the whole point of the patch, as that way it'll serve
> all sub-allocators or kernel function called by the user. Without this
> behaviour the caller could have simply used a mempool.
I still don't get it why reiserfs can't put the preallocated
pool somewhere private like all other users who do similar things
do too (and yes there are quite a lot of subsystems who do
preallocation)
Why pollute task_struct for this?
-Andi
On Fri, Jan 07, 2005 at 07:14:15PM +0000, Paulo Marques wrote:
> This seems like a very asymmetrical behavior. If the code explicitly
> reserves pages, it should explicitly use them, or it will become
> impossible to track down who is using what (not to mention that this
> will slow down every regular user of __alloc_pages, even if it is just
> for a quick test).
>
> Why are there specialized functions to reserve the pages, but then they
> are used through the standard __alloc_pages interface?
That seems to be the whole point of the patch, as that way it'll serve
all sub-allocators or kernel function called by the user. Without this
behaviour the caller could have simply used a mempool.
Andrew Morton <[email protected]> writes:
> Vladimir Saveliev <[email protected]> wrote:
>>
>> +int perthread_pages_reserve(int nrpages, int gfp)
>> +{
>> + int i;
>> + struct list_head accumulator;
>> + struct list_head *per_thread;
>> +
>> + per_thread = get_per_thread_pages();
>> + INIT_LIST_HEAD(&accumulator);
>> + list_splice_init(per_thread, &accumulator);
>> + for (i = 0; i < nrpages; ++i) {
>
> This will end up reserving more pages than were asked for, if
> current->private_pages_count is non-zero. Deliberate?
Yes. This is to make modular usage possible, so that
perthread_pages_reserve(nrpages, gfp_mask);
/* call some other code... */
perthread_pages_release(unused_pages);
works correctly if "some other code" does per-thread reservations
too.
Nikita.
Christoph Hellwig <[email protected]> writes:
>> diff -puN include/linux/gfp.h~reiser4-perthread-pages include/linux/gfp.h
>> --- linux-2.6.10-rc3/include/linux/gfp.h~reiser4-perthread-pages 2004-12-22 20:09:44.153164276 +0300
[...]
>
>> +int perthread_pages_count(void)
>> +{
>> + return current->private_pages_count;
>> +}
>> +EXPORT_SYMBOL(perthread_pages_count);
>
> Again a completely useless wrapper.
I disagree. Patch introduces explicit API
int perthread_pages_reserve(int nrpages, int gfp);
void perthread_pages_release(int nrpages);
int perthread_pages_count(void);
sufficient to create and use per-thread reservations. Using
current->private_pages_count directly
- makes API less uniform, not contained within single namespace
(perthread_pages_*), and worse,
- exhibits internal implementation detail to the user.
>
[...]
Nikita.
On Fri, Jan 07, 2005 at 11:48:58PM +0300, Nikita Danilov wrote:
> sufficient to create and use per-thread reservations. Using
> current->private_pages_count directly
>
> - makes API less uniform, not contained within single namespace
> (perthread_pages_*), and worse,
>
> - exhibits internal implementation detail to the user.
Completely disagreed, hiding all the details doesn't help for such
trivial access, it's just obsfucating things.
But looking at it the API doesn't make sense at all. Number of pages
in the thread-pool is an internal implementation detail and no caller
must look at it - think about two callers, e.g. filesystem and iscsi
initiator using it in the same thread.
Here's an updated patch with my suggestions implemented and other goodies
such a kerneldoc comments (but completely untested so far):
--- 1.20/include/linux/gfp.h 2005-01-05 18:30:39 +01:00
+++ edited/include/linux/gfp.h 2005-01-07 20:30:20 +01:00
@@ -130,6 +130,9 @@
#define __free_page(page) __free_pages((page), 0)
#define free_page(addr) free_pages((addr),0)
+extern int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask);
+extern void perthread_pages_release(unsigned int nrpages);
+
void page_alloc_init(void);
#endif /* __LINUX_GFP_H */
--- 1.33/include/linux/init_task.h 2005-01-05 03:48:20 +01:00
+++ edited/include/linux/init_task.h 2005-01-07 20:33:25 +01:00
@@ -112,6 +112,7 @@
.proc_lock = SPIN_LOCK_UNLOCKED, \
.switch_lock = SPIN_LOCK_UNLOCKED, \
.journal_info = NULL, \
+ .private_pages = LIST_HEAD_INIT(tsk.private_pages), \
}
--- 1.280/include/linux/sched.h 2005-01-05 03:48:20 +01:00
+++ edited/include/linux/sched.h 2005-01-07 20:32:44 +01:00
@@ -658,6 +658,7 @@
/* VM state */
struct reclaim_state *reclaim_state;
+ struct list_head private_pages; /* per-process private pages */
struct dentry *proc_dentry;
struct backing_dev_info *backing_dev_info;
--- 1.229/kernel/fork.c 2005-01-05 03:48:20 +01:00
+++ edited/kernel/fork.c 2005-01-07 20:34:04 +01:00
@@ -153,6 +153,9 @@
tsk->thread_info = ti;
ti->task = tsk;
+ /* initialize list of pages privately reserved by process */
+ INIT_LIST_HEAD(&tsk->private_pages);
+
/* One for us, one for whoever does the "release_task()" (usually parent) */
atomic_set(&tsk->usage,2);
return tsk;
--- 1.249/mm/page_alloc.c 2005-01-05 18:32:52 +01:00
+++ edited/mm/page_alloc.c 2005-01-07 20:36:34 +01:00
@@ -641,6 +641,86 @@
return 1;
}
+/**
+ * perthread_pages_reserve -- reserve some pages for this thread
+ * @nrpages: number of pages to reserve
+ * @gfp_mask: constaints passed to alloc_page()
+ *
+ * This functions allocates @nrpages into a thread-local pool that
+ * __alloc_pages() will use. Used to support operations that cannot
+ * tolerate memory allocation failures.
+ */
+int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask)
+{
+ LIST_HEAD(accumulator);
+ int i;
+
+ list_splice_init(¤t->private_pages, &accumulator);
+
+ for (i = 0; i < nrpages; ++i) {
+ struct page *page = alloc_page(gfp_mask);
+
+ if (!page)
+ goto fail_free_pages;
+ list_add(&page->lru, &accumulator);
+ }
+
+ /*
+ * Q: why @accumulator is used, instead of directly adding pages to
+ * current->private_pages?
+ *
+ * A: because after first page is added to the current->private_pages
+ * next call to the alloc_page() (on the next loop iteration), will
+ * re-use it.
+ */
+ list_splice(&accumulator, ¤t->private_pages);
+ return 0;
+ fail_free_pages:
+ perthread_pages_release(i);
+ return -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(perthread_pages_reserve);
+
+/**
+ * perthread_pages_release -- release pages from thread-local pool
+ * @nrpages: number of pages to release
+ *
+ * This functions release @nrpages that we allocated to a thread-local
+ * pool using perthread_pages_reserve().
+ */
+void perthread_pages_release(unsigned int nrpages)
+{
+ struct list_head *perthread_pages = ¤t->private_pages;
+
+ for (; nrpages; --nrpages) {
+ struct page *page;
+
+ BUG_ON(list_empty(perthread_pages));
+ page = list_entry(perthread_pages->next, struct page, lru);
+ list_del(&page->lru);
+ page_cache_release(page);
+ }
+}
+EXPORT_SYMBOL_GPL(perthread_pages_release);
+
+/*
+ * Try to allocate pages from the per-thread private_pages pool. No
+ * locking is needed: this list can only be modified by the thread
+ * itself, and not by interrupts or other threads.
+ */
+static inline struct page *__alloc_perthread_page(void)
+{
+ struct list_head *perthread_pages = ¤t->private_pages;
+ struct page *page = NULL;
+
+ if (!list_empty(perthread_pages)) {
+ page = list_entry(perthread_pages->next, struct page, lru);
+ list_del(&page->lru);
+ }
+
+ return page;
+}
+
/*
* This is the 'heart' of the zoned buddy allocator.
*
@@ -672,6 +752,12 @@
int can_try_harder;
might_sleep_if(wait);
+
+ if (order == 0 && !in_interrupt()) {
+ page = __alloc_perthread_page();
+ if (page)
+ return page;
+ }
/*
* The caller may dip into page reserves a bit more if the caller
Paulo Marques <[email protected]> writes:
[...]
>
> This seems like a very asymmetrical behavior. If the code explicitly
> reserves pages, it should explicitly use them, or it will become
> impossible to track down who is using what (not to mention that this
> will slow down every regular user of __alloc_pages, even if it is just
> for a quick test).
>
> Why are there specialized functions to reserve the pages, but then they
> are used through the standard __alloc_pages interface?
That's the whole idea behind this patch: at the beginning of "atomic"
operation, some number of pages is reserved. As these pages are
available through page allocator, _all_ allocations done by atomic
operation will use reserved pages transparently. For example:
perthread_pages_reserve(nr, GFP_KERNEL);
foo()->
bar()->
page = find_or_create_page(some_mapping, ...);
perthread_pages_release(unused_pages);
find_or_create() pages will use pages reserved for this thread and,
hence, is guaranteed to succeed (given correct reservation).
Alternative is to pass some sort of handle all the way down to actual
calls to allocator, and to modify all generic code to use reservations.
Nikita.
Christoph Hellwig <[email protected]> writes:
> On Fri, Jan 07, 2005 at 11:48:58PM +0300, Nikita Danilov wrote:
>> sufficient to create and use per-thread reservations. Using
>> current->private_pages_count directly
>>
>> - makes API less uniform, not contained within single namespace
>> (perthread_pages_*), and worse,
>>
>> - exhibits internal implementation detail to the user.
>
> Completely disagreed, hiding all the details doesn't help for such
> trivial access, it's just obsfucating things.
>
> But looking at it the API doesn't make sense at all. Number of pages
> in the thread-pool is an internal implementation detail and no caller
> must look at it - think about two callers, e.g. filesystem and iscsi
> initiator using it in the same thread.
>
> Here's an updated patch with my suggestions implemented and other goodies
> such a kerneldoc comments (but completely untested so far):
>
>
> --- 1.20/include/linux/gfp.h 2005-01-05 18:30:39 +01:00
> +++ edited/include/linux/gfp.h 2005-01-07 20:30:20 +01:00
> @@ -130,6 +130,9 @@
> #define __free_page(page) __free_pages((page), 0)
> #define free_page(addr) free_pages((addr),0)
>
> +extern int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask);
> +extern void perthread_pages_release(unsigned int nrpages);
I don't see how this can work.
/* make conservative estimation... */
perthread_pages_reserve(100, GFP_KERNEL);
/* actually, use only 10 pages during atomic operation */
/* want to release remaining 90 pages... */
perthread_pages_release(???);
Can you elaborate how to calculate number of pages that has to be
released?
Nikita.
On Sat, Jan 08, 2005 at 12:00:00AM +0300, Nikita Danilov wrote:
> I don't see how this can work.
>
> /* make conservative estimation... */
> perthread_pages_reserve(100, GFP_KERNEL);
>
> /* actually, use only 10 pages during atomic operation */
>
> /* want to release remaining 90 pages... */
> perthread_pages_release(???);
>
> Can you elaborate how to calculate number of pages that has to be
> released?
That's a good question actually, and it's true for the original
version aswell if we want (and to make the API useful we must) make
it useable for multiple callers in the same thread.
Assuming the callers strictly nest we can indeed just go back to the
orininal count, maybe with an API like:
int perthread_pages_reserve(unsigned int nrpages, unsigned int gfp_mask);
void perthread_pages_release(unsigned int nrpages_goal);
unsigned int old_nr_pages;
...
old_nr_pages = perthread_pages_reserve(100, GFP_KERNEL);
...
perthread_pages_release(old_nr_pages);
Nikita Danilov <[email protected]> wrote:
>
> That's the whole idea behind this patch: at the beginning of "atomic"
> operation, some number of pages is reserved. As these pages are
> available through page allocator, _all_ allocations done by atomic
> operation will use reserved pages transparently. For example:
>
> perthread_pages_reserve(nr, GFP_KERNEL);
>
> foo()->
>
> bar()->
>
> page = find_or_create_page(some_mapping, ...);
>
> perthread_pages_release(unused_pages);
>
> find_or_create() pages will use pages reserved for this thread and,
> hence, is guaranteed to succeed (given correct reservation).
>
> Alternative is to pass some sort of handle all the way down to actual
> calls to allocator, and to modify all generic code to use reservations.
Maybe I'm being thick, but I don't see how you can protect the reservation
of an outer reserver in the above way:
perthread_pages_reserve(10);
... /* current->private_pages_count = 10 */
perthread_pages_reserve(10) /* private_pages_count = 20 */
use 5 pages /* private_pages_count = 15 */
perthread_pages_release(5);
But how does the caller come up with the final "5"?
Seems better to me if prethread_pages_reserve() were to return the initial
value of private_pages_count, so the caller can do:
old = perthread_pages_reserve(10);
use 5 pages
perthread_pages_release(old);
or whatever.
That kinda stinks too in a way, because both the outer and the inner
callers need to overallocate pages on behalf of the worst case user in some
deep call stack.
And the whole idea is pretty flaky really - how can one precalculate how
much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
use? It really would be better if we could drop the whole patch and make
reiser4 behave more sanely when its writepage is called with for_reclaim=1.
> And the whole idea is pretty flaky really - how can one precalculate how
> much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
> use? It really would be better if we could drop the whole patch and make
> reiser4 behave more sanely when its writepage is called with for_reclaim=1.
Or just preallocate into a private array.
-Andi
Andrew Morton <[email protected]> writes:
[...]
>
> Maybe I'm being thick, but I don't see how you can protect the reservation
> of an outer reserver in the above way:
>
> perthread_pages_reserve(10);
> ... /* current->private_pages_count = 10 */
> perthread_pages_reserve(10) /* private_pages_count = 20 */
> use 5 pages /* private_pages_count = 15 */
> perthread_pages_release(5);
>
> But how does the caller come up with the final "5"?
wasreserved = perthread_pages_count();
result = perthread_pages_reserve(estimate_reserve(), GFP_KERNEL);
if (result != 0)
return result;
/* do something that consumes reservation */
perthread_pages_release(perthread_pages_count() - wasreserved);
>
> Seems better to me if prethread_pages_reserve() were to return the initial
> value of private_pages_count, so the caller can do:
>
> old = perthread_pages_reserve(10);
> use 5 pages
> perthread_pages_release(old);
>
> or whatever.
>
> That kinda stinks too in a way, because both the outer and the inner
> callers need to overallocate pages on behalf of the worst case user in some
> deep call stack.
>
> And the whole idea is pretty flaky really - how can one precalculate how
> much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
> use? It really would be better if we could drop the whole patch and make
> reiser4 behave more sanely when its writepage is called with for_reclaim=1.
Reiser4 doesn't use this for ->writepage(), by the way. This is used by
tree balancing code to assure that balancing cannot get -ENOMEM in the
middle of tree modification, because undo is _so_ very complicated.
Nikita.
Nikita Danilov <[email protected]> wrote:
>
> > And the whole idea is pretty flaky really - how can one precalculate how
> > much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
> > use? It really would be better if we could drop the whole patch and make
> > reiser4 behave more sanely when its writepage is called with for_reclaim=1.
>
> Reiser4 doesn't use this for ->writepage(), by the way. This is used by
> tree balancing code to assure that balancing cannot get -ENOMEM in the
> middle of tree modification, because undo is _so_ very complicated.
Oh. And that involves performing I/O, yes?
Why does the filesystem risk going oom during the rebalance anyway? Is it
doing atomic allocations?
Andrew Morton <[email protected]> writes:
> Nikita Danilov <[email protected]> wrote:
>>
>> > And the whole idea is pretty flaky really - how can one precalculate how
>> > much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
>> > use? It really would be better if we could drop the whole patch and make
>> > reiser4 behave more sanely when its writepage is called with for_reclaim=1.
>>
>> Reiser4 doesn't use this for ->writepage(), by the way. This is used by
>> tree balancing code to assure that balancing cannot get -ENOMEM in the
>> middle of tree modification, because undo is _so_ very complicated.
>
> Oh. And that involves performing I/O, yes?
Yes, balancing may read tree or bitmap nodes from the disk.
>
> Why does the filesystem risk going oom during the rebalance anyway? Is it
> doing atomic allocations?
No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this
happens, the only thing balancing can do is to panic.
Nikita.
Nikita Danilov <[email protected]> wrote:
>
> >
> > Why does the filesystem risk going oom during the rebalance anyway? Is it
> > doing atomic allocations?
>
> No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this
> happens, the only thing balancing can do is to panic.
__alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed
or never return ;) That behaviour may change at any time of course, but it
does make me wonder why we're bothering with this at all. Maybe it's
because of the possibility of a GFP_IO failure under your feet or
something?
What happens if reiser4 simply doesn't use this code?
If we introduce this mechanism, people will end up using it all over the
place. Probably we could remove radix_tree_preload(), which is the only
similar code I can I can immediately think of.
Page reservation is not a bad thing per-se, but it does need serious
thought.
How does reiser4 end up deciding how many pages to reserve? Gross
overkill?
Andrew Morton <[email protected]> writes:
> Nikita Danilov <[email protected]> wrote:
>>
>> >
>> > Why does the filesystem risk going oom during the rebalance anyway? Is it
>> > doing atomic allocations?
>>
>> No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this
>> happens, the only thing balancing can do is to panic.
>
> __alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed
> or never return ;) That behaviour may change at any time of course, but it
Hmm... it used to, when I wrote that code.
> does make me wonder why we're bothering with this at all. Maybe it's
> because of the possibility of a GFP_IO failure under your feet or
> something?
This is what happens:
- we start inserting new item into balanced tree,
- lock nodes on the leaf level and modify them
- go to the parent level
- lock nodes on the parent level and modify them. This may require
allocating new nodes. If allocation fails---we have to panic, because
tree is in inconsistent state and there is no roll-back; if allocation
hangs forever---deadlock is on its way, because we are still keeping
locks on nodes on the leaf level.
>
> What happens if reiser4 simply doesn't use this code?
At the time I tested it, it panicked after getting NULL from
__alloc_pages(). With current `do_retry' logic in __alloc_pages() it
will deadlock, I guess.
>
>
> If we introduce this mechanism, people will end up using it all over the
> place. Probably we could remove radix_tree_preload(), which is the only
> similar code I can I can immediately think of.
>
> Page reservation is not a bad thing per-se, but it does need serious
> thought.
>
> How does reiser4 end up deciding how many pages to reserve? Gross
> overkill?
Worst-case behavior of tree algorithms is well-known. Yes it's overkill.
Nikita.
On Sat, 8 Jan 2005, Nikita Danilov wrote:
> Andrew Morton <[email protected]> writes:
> >
> > __alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed
> > or never return ;) That behaviour may change at any time of course, but it
>
> Hmm... it used to, when I wrote that code.
And still does, if OOM decides to kill _your_ task: OOM sets PF_MEMDIE,
and then you don't get to go the retry route at all:
/* This allocation should allow future memory freeing. */
if ((p->flags & (PF_MEMALLOC | PF_MEMDIE)) && !in_interrupt()) {
/* go through the zonelist yet again, ignoring mins */
for (i = 0; (z = zones[i]) != NULL; i++) {
page = buffered_rmqueue(z, order, gfp_mask);
if (page)
goto got_pg;
}
goto nopage;
}
....
nopage:
....
return NULL;
On Fri, Jan 07, 2005 at 03:43:05PM -0800, Andrew Morton wrote:
> Nikita Danilov <[email protected]> wrote:
> >
> > >
> > > Why does the filesystem risk going oom during the rebalance anyway? Is it
> > > doing atomic allocations?
> >
> > No, just __alloc_pages(GFP_KERNEL, 0, ...) returns NULL. When this
> > happens, the only thing balancing can do is to panic.
>
> __alloc_pages(GFP_KERNEL, ...) doesn't return NULL. It'll either succeed
> or never return ;) That behaviour may change at any time of course, but it
> does make me wonder why we're bothering with this at all. Maybe it's
> because of the possibility of a GFP_IO failure under your feet or
> something?
>
> What happens if reiser4 simply doesn't use this code?
>
>
> If we introduce this mechanism, people will end up using it all over the
> place. Probably we could remove radix_tree_preload(), which is the only
> similar code I can I can immediately think of.
>
> Page reservation is not a bad thing per-se, but it does need serious
> thought.
Whenever scheme comes up I dont think the current check in __alloc_pages() is
any good:
if (order == 0) {
page = perthread_pages_alloc();
if (page != NULL)
return page;
}
Two things:
- all instances of an allocator from the current thread will eat from the perthread
reserves, you probably want only a few special allocations to eat from the reserves?
Thing is its not really a reservation intended for emergency situations,
rather a "generic per-thread pool" the way things are now.
- its a real fast path, we're adding quite some instructions there which are only
used by reiserfs now.
I think in a "final" implementation emergency allocations should be explicitly stated
as such by the callers ?
> How does reiser4 end up deciding how many pages to reserve? Gross
> overkill?
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to [email protected]. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Marcelo Tosatti <[email protected]> writes:
[...]
>
> - all instances of an allocator from the current thread will eat from the perthread
> reserves, you probably want only a few special allocations to eat from the reserves?
> Thing is its not really a reservation intended for emergency situations,
> rather a "generic per-thread pool" the way things are now.
Per-thread reservations are only useful when they are transparent. If
users have to call special function, or to pass special flag to
__alloc_pages() they might just use mempool as well. Idea is to reserve
some number of pages before starting complex operation so that generic
function (like find_get_page()) called as part of this operation are
guaranteed to succeed.
>
> - its a real fast path, we're adding quite some instructions there which are only
> used by reiserfs now.
Yes, this worries me too. Possibly we should move this check below in
__alloc_pages(), so that per-thread reservation is only checked if
fast-path allocation failed.
Nikita.
Greg KH <[email protected]> wrote:
> > [1] Should the code generating the warning be active without CONFIG_PM
> > being set?
I believe the code is attempting to make sure the device is properly powered
on in the first place. CONFIG_PM only governs later power management.
> > [2] Can you explain why the message is generated (why not silently ignore
> > the older hardware) or is there something in an init script (I am using
> > Fedora Core 2) that [incorrectly] assumes power management is available to
> > cause the message to be printed?
>
> David, any ideas? Should I just revert this change for now?
Please don't. A system with this Promise 20269 card in it hangs without this
patch, I can see the splat happen with a PCI analyser.
The function being altered is almost certainly _wrong_ for non-PM-version-2
cards, but I don't have an old enough PCI spec to check.
A better solution would be to drop the level of the printk() to KERN_DEBUG or
to delete it entirely, assuming the patch otherwise works for Mark.
David
On Wed, Jan 12, 2005 at 10:36:06PM +0200, Michael S. Tsirkin wrote:
> To make life bearable for out-of kernel modules, the following patch
> adds 2 macros so that existance of unlocked_ioctl and compat_ioctl
> can be easily detected.
>
> Signed-off-by: Michael S. Tsirkin <[email protected]>
>
> diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
> --- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
> +++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
> @@ -907,6 +907,12 @@ typedef struct {
>
> typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
>
> +/* These macros are for out of kernel modules to test that
> + * the kernel supports the unlocked_ioctl and compat_ioctl
> + * fields in struct file_operations. */
> +#define HAVE_COMPAT_IOCTL 1
> +#define HAVE_UNLOCKED_IOCTL 1
No, we do not do that in the kernel today, and I'm pretty sure we don't
want to start doing it (it would get _huge_ very quickly...)
Please don't apply this. Remember, out-of-the-tree modules are on their
own.
thanks,
greg k-h
> No, we do not do that in the kernel today, and I'm pretty sure we don't
Actually we do. e.g. take a look at skbuff.h HAVE_*
There are other examples too.
> want to start doing it (it would get _huge_ very quickly...)
I disagree since the alternative is so ugly.
> Please don't apply this. Remember, out-of-the-tree modules are on their
> own.
I don't know who made this "policy", but actively sabotating or denying
useful facilities to free out of tree modules doesn't seem to be a
very wise policy to me.
-Andi
On Jan 12, 2005 13:29 -0800, Greg KH wrote:
> On Wed, Jan 12, 2005 at 10:36:06PM +0200, Michael S. Tsirkin wrote:
> > To make life bearable for out-of kernel modules, the following patch
> > adds 2 macros so that existance of unlocked_ioctl and compat_ioctl
> > can be easily detected.
> >
> > Signed-off-by: Michael S. Tsirkin <[email protected]>
> >
> > diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
> > --- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
> > +++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
> > @@ -907,6 +907,12 @@ typedef struct {
> >
> > typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
> >
> > +/* These macros are for out of kernel modules to test that
> > + * the kernel supports the unlocked_ioctl and compat_ioctl
> > + * fields in struct file_operations. */
> > +#define HAVE_COMPAT_IOCTL 1
> > +#define HAVE_UNLOCKED_IOCTL 1
>
> No, we do not do that in the kernel today, and I'm pretty sure we don't
> want to start doing it (it would get _huge_ very quickly...)
>
> Please don't apply this. Remember, out-of-the-tree modules are on their
> own.
Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go
into the core kernel, but usually the time between some code being
developed and when it is included is lengthy (i.e. "this feature won't
be accepted until lots of people use it").
You can't claim that this has never been done (e.g. KERNEL_HAS_O_DIRECT,
KERNEL_HAS_DIRECT_FILEIO in 2.4 kernels). For code that needs to handle
multiple kernel versions this makes life far easier and doesn't actually
hurt anything. It used to be that you could use LINUX_VERSION_CODE for
this kind of check, but that breaks down quickly with vendor kernels and
the long development cycle.
Cheers, Andreas
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://members.shaw.ca/adilger/ http://members.shaw.ca/golinux/
On Wed, Jan 12, 2005 at 10:43:26PM +0100, Andi Kleen wrote:
> > No, we do not do that in the kernel today, and I'm pretty sure we don't
>
> Actually we do. e.g. take a look at skbuff.h HAVE_*
> There are other examples too.
>
> > want to start doing it (it would get _huge_ very quickly...)
>
> I disagree since the alternative is so ugly.
But the main problem with this is, when do we start deleting the HAVE_
symbols? After a relativly short period of time, they become useless,
as all kernels of the past year or two have that feature, and why even
test for it?
I agree, that for short term, vendor-patched kernels, it's nice to have
something like that to try to build your out-of-the-tree module. But
move to get that module into the tree, or provide your favorite vendor
with the properly patched driver (hey, I can dream...)
And is the alternative (using autoconf to build tiny modules testing for
different features) that ugly? Yeah, I hate autoconf too, but I thought
that work (kernel feature testing in autoconf) has already been done,
right?
> > Please don't apply this. Remember, out-of-the-tree modules are on their
> > own.
>
> I don't know who made this "policy", but actively sabotating or denying
> useful facilities to free out of tree modules doesn't seem to be a
> very wise policy to me.
I'm not trying to sabotage anything, I just don't want the maintaince of
a zillion HAVE_ macros to slowly overrun us until we drown under the
weight. All to support some looney, ill-informed vendor that can never
get around to submitting their driver to mainline.
And as for that "policy", it's been stated in public by Andrew and
Linus and me (if I count for anything, doubtful...) a number of
documented times.
thanks,
greg k-h
Greg KH <[email protected]> wrote:
>
> On Wed, Jan 12, 2005 at 10:43:26PM +0100, Andi Kleen wrote:
> > > No, we do not do that in the kernel today, and I'm pretty sure we don't
> >
> > Actually we do. e.g. take a look at skbuff.h HAVE_*
> > There are other examples too.
> >
> > > want to start doing it (it would get _huge_ very quickly...)
> >
> > I disagree since the alternative is so ugly.
>
> But the main problem with this is, when do we start deleting the HAVE_
> symbols?
This is a self-correcting system. If the symbols are so offensive, someone
will get offended and will submit a patch to delete them at the appropriate
time. If they're not so offensive then we've nothing to care about.
> ...
> And as for that "policy", it's been stated in public by Andrew and
> Linus and me (if I count for anything, doubtful...) a number of
> documented times.
not me ;) It's two lines of code and makes things much simpler for the
users of our work. Seems a no-brainer.
And practically speaking, we don't make such fundamental driver-visible
changes _that_ often - if we end up getting buried under a proliferation of
HAVE_FOO macros, then the presence of the macros is the least of our
problems, yes?
On Wed, Jan 12, 2005 at 03:10:49PM -0800, Andrew Morton wrote:
> Greg KH <[email protected]> wrote:
> > ...
> > And as for that "policy", it's been stated in public by Andrew and
> > Linus and me (if I count for anything, doubtful...) a number of
> > documented times.
>
> not me ;) It's two lines of code and makes things much simpler for the
> users of our work. Seems a no-brainer.
Sorry, the "policy" I was referring to was the "out-of-the-tree drivers
are on their own" statement. Not the use of the HAVE macros.
> And practically speaking, we don't make such fundamental driver-visible
> changes _that_ often - if we end up getting buried under a proliferation of
> HAVE_FOO macros, then the presence of the macros is the least of our
> problems, yes?
Ok, but can someone add a section in the feature-removal-schedule.txt
file about when these specific macros will be removed? They must be
created with some specific use in mind, right?
thanks,
greg k-h
On Wed, Jan 12, 2005 at 03:13:09PM -0700, Andreas Dilger wrote:
> On Jan 12, 2005 13:29 -0800, Greg KH wrote:
> > On Wed, Jan 12, 2005 at 10:36:06PM +0200, Michael S. Tsirkin wrote:
> > > To make life bearable for out-of kernel modules, the following patch
> > > adds 2 macros so that existance of unlocked_ioctl and compat_ioctl
> > > can be easily detected.
> > >
> > > Signed-off-by: Michael S. Tsirkin <[email protected]>
> > >
> > > diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
> > > --- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
> > > +++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
> > > @@ -907,6 +907,12 @@ typedef struct {
> > >
> > > typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
> > >
> > > +/* These macros are for out of kernel modules to test that
> > > + * the kernel supports the unlocked_ioctl and compat_ioctl
> > > + * fields in struct file_operations. */
> > > +#define HAVE_COMPAT_IOCTL 1
> > > +#define HAVE_UNLOCKED_IOCTL 1
> >
> > No, we do not do that in the kernel today, and I'm pretty sure we don't
> > want to start doing it (it would get _huge_ very quickly...)
> >
> > Please don't apply this. Remember, out-of-the-tree modules are on their
> > own.
>
> Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go
> into the core kernel, but usually the time between some code being
> developed and when it is included is lengthy (i.e. "this feature won't
> be accepted until lots of people use it").
I understand that, but for stuff like that, isn't it easier to just test
for VERSION? Or use autoconf?
> You can't claim that this has never been done (e.g. KERNEL_HAS_O_DIRECT,
> KERNEL_HAS_DIRECT_FILEIO in 2.4 kernels).
That was because of the backport mess that 2.4 went through and vendor
kernels, right?
> For code that needs to handle
> multiple kernel versions this makes life far easier and doesn't actually
> hurt anything. It used to be that you could use LINUX_VERSION_CODE for
> this kind of check, but that breaks down quickly with vendor kernels and
> the long development cycle.
What long development cycle? The out-of-the-tree stuff? Or the kernel
development stuff?
My main issue is when would we ever be able to remove such HAS macros?
And who specifically will be testing for these HAVE_COMPAT_IOCTL and
HAVE_UNLOCKED_IOCTL macros? Will that code make it into the main tree
ever? If not, why not?
thanks,
greg k-h
Hi!
I just noticed that my original patch says "ioctl_compat" all over the place
while the actual field name in -mm2 is "compat_ioctl". Doh.
Here's a replacement patch.
PS. Please dont flame me, I do not maintain out of kernel modules, myself :)
To make life bearable for out-of kernel modules, the following patch
adds 2 macros so that existance of unlocked_ioctl and compat_ioctl
can be easily detected.
Signed-off-by: Michael S. Tsirkin <[email protected]>
diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
--- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
+++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
@@ -907,6 +907,12 @@ typedef struct {
typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
+/* These macros are for out of kernel modules to test that
+ * the kernel supports the unlocked_ioctl and compat_ioctl
+ * fields in struct file_operations. */
+#define HAVE_COMPAT_IOCTL 1
+#define HAVE_UNLOCKED_IOCTL 1
+
/*
* NOTE:
* read, write, poll, fsync, readv, writev can be called
At Wed, 12 Jan 2005 14:58:19 -0800,
Greg KH wrote:
>
> On Wed, Jan 12, 2005 at 03:13:09PM -0700, Andreas Dilger wrote:
> > On Jan 12, 2005 13:29 -0800, Greg KH wrote:
> > > On Wed, Jan 12, 2005 at 10:36:06PM +0200, Michael S. Tsirkin wrote:
> > > > To make life bearable for out-of kernel modules, the following patch
> > > > adds 2 macros so that existance of unlocked_ioctl and compat_ioctl
> > > > can be easily detected.
> > > >
> > > > Signed-off-by: Michael S. Tsirkin <[email protected]>
> > > >
> > > > diff -puN include/linux/fs.h~ioctl-rework include/linux/fs.h
> > > > --- 25/include/linux/fs.h~ioctl-rework Thu Dec 16 15:48:31 2004
> > > > +++ 25-akpm/include/linux/fs.h Thu Dec 16 15:48:31 2004
> > > > @@ -907,6 +907,12 @@ typedef struct {
> > > >
> > > > typedef int (*read_actor_t)(read_descriptor_t *, struct page *, unsigned long, unsigned long);
> > > >
> > > > +/* These macros are for out of kernel modules to test that
> > > > + * the kernel supports the unlocked_ioctl and compat_ioctl
> > > > + * fields in struct file_operations. */
> > > > +#define HAVE_COMPAT_IOCTL 1
> > > > +#define HAVE_UNLOCKED_IOCTL 1
> > >
> > > No, we do not do that in the kernel today, and I'm pretty sure we don't
> > > want to start doing it (it would get _huge_ very quickly...)
> > >
> > > Please don't apply this. Remember, out-of-the-tree modules are on their
> > > own.
> >
> > Gee, thanks. It's not like some out-of-tree code doesn't _want_ to go
> > into the core kernel, but usually the time between some code being
> > developed and when it is included is lengthy (i.e. "this feature won't
> > be accepted until lots of people use it").
>
> I understand that, but for stuff like that, isn't it easier to just test
> for VERSION? Or use autoconf?
>
> > For code that needs to handle
> > multiple kernel versions this makes life far easier and doesn't actually
> > hurt anything. It used to be that you could use LINUX_VERSION_CODE for
> > this kind of check, but that breaks down quickly with vendor kernels and
> > the long development cycle.
>
> What long development cycle? The out-of-the-tree stuff? Or the kernel
> development stuff?
I guess the latter. Imagine that the stuff already exists in mm tree
but the merge to the maintree is delayed. In this case,
KERNEL_VERSION check doesn't work reliably. But, it's a rare case,
AFAIK.
> My main issue is when would we ever be able to remove such HAS macros?
Here I agree with Greg. It'll be difficult to remove it once after
added. Nobody knows whether the external stuff still refers to it or
not...
> And who specifically will be testing for these HAVE_COMPAT_IOCTL and
> HAVE_UNLOCKED_IOCTL macros? Will that code make it into the main tree
> ever? If not, why not?
ALSA, for example, still offers for 2.2, 2.4 and older 2.6 kernels.
So it requires checks for such kernel API changes. I would do this
via autoconf without problem if HAS_* isn't introduced, though.
Takashi
[ Cc:s trimmed a little ]
Greg KH wrote:
> Sorry, the "policy" I was referring to was the "out-of-the-tree drivers
> are on their own" statement. Not the use of the HAVE macros.
Not all users of kernel code are in- or out-of-tree drivers and the
like. E.g. tcsim (from tcng.sf.net) grabs substantial portions of
the traffic control and netlink code and merges them with user
space. It also tries to be compatible with most 2.4 kernels.
For feature tests, I use basically anything that doesn't run away
quickly enough. And I'm sure you want none of *that* kind of code
anywhere near mainline ;-)
Not that I currently have more troubles with it than usually. I
just want to point out that there are other, strange but legitimate
(at least in the "all shall eventually be GPL" sense) users of the
kernel, who don't mind a friendly environment.
- Werner
--
_________________________________________________________________________
/ Werner Almesberger, Buenos Aires, Argentina [email protected] /
/_http://www.almesberger.net/____________________________________________/
Hello
[per thread page reservation discussion is snipped]
> And the whole idea is pretty flaky really - how can one precalculate how
> much memory an arbitrary md-on-dm-on-loop-on-md-on-NBD stack will want to
> use? It really would be better if we could drop the whole patch and make
> reiser4 behave more sanely when its writepage is called with for_reclaim=1.
ok, we will change reiser4 to keep its pool of preallocated pages
privately as Andi suggested. This will require to have
reiser4_find_or_create_page which will do what find_or_create_page does
plus get a page from the list of preallocated pages if alloc_page
returns NULL.
So, currently, reiser4 depends on the core patches listed below. Would
you please look over them and let us know which look reasonable and
which are to be eliminated.
reiser4-sb_sync_inodes.patch
This patch adds new operation (sync_inodes) to struct super_operations.
This operation allows a filesystem to writeout dirty pages not
necessarily on per-inode basis. Default implementation of this operation
is sync_sb_inodes.
reiser4-allow-drop_inode-implementation.patch
This EXPORT_SYMBOL-s inodes_stat, generic_forget_inode, destroy_inode
and wake_up_inode which are needed to implement drop_inode.
reiser4 implements function similar to generic_delete_inode to be able
to truncate inode pages together with metadata destroying in
reiser4_delete_inode whereas generic_delete_inode first truncates pages
and then calls foofs_delete_inode.
reiser4-truncate_inode_pages_range.patch
This patch makes truncate_inode_pages_range from truncate_inode_pages.
truncate_inode_pages_range can truncate only pages which fall into
specified range. truncate_inode_pages which trucates all pages starting
from specified offset is made a one liner which calls
truncate_inode_pages_range.
reiser4-rcu-barrier.patch
This patch introduces a new interface - rcu_barrier() which waits until
all the RCUs queued until this call have been completed.
This patch is by Dipankar Sarma <[email protected]>
reiser4-reget-page-mapping.patch
This patch allows to remove page from page cache in foofs_releasepage.
reiser4-radix_tree_lookup_slot.patch
This patch extents radxi tree API with a function which returns pointer
to found item within the tree.
reiser4-export-remove_from_page_cache.patch
reiser4-export-page_cache_readahead.patch
reiser4-export-pagevec-funcs.patch
reiser4-export-radix_tree_preload.patch
reiser4-export-find_get_pages.patch
reiser4-export-generic_sync_sb_inodes.patch
The above patches EXPORT_SYMBOL several functions. Others may find it
useful if they were exported.
reiser4-export-inode_lock.patch
Reiser4 used to manipulate with super block inode lists so it needs
inode_lock exported.
We are working now to not need this. But quite many things are based on
it. Is there any chance to have it included?
Thanks
Hi Vladimir,
a general request:
If you add new EXPORT_SYMBOL's, I'd strongly prefer them being
EXPORT_SYMBOL_GPL's unless there's a very good reason for an
EXPORT_SYMBOL.
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
> So, currently, reiser4 depends on the core patches listed below. Would
> you please look over them and let us know which look reasonable and
> which are to be eliminated.
> reiser4-sb_sync_inodes.patch
> This patch adds new operation (sync_inodes) to struct super_operations.
> This operation allows a filesystem to writeout dirty pages not
> necessarily on per-inode basis. Default implementation of this operation
> is sync_sb_inodes.
ok.
> reiser4-allow-drop_inode-implementation.patch
> This EXPORT_SYMBOL-s inodes_stat, generic_forget_inode, destroy_inode
> and wake_up_inode which are needed to implement drop_inode.
> reiser4 implements function similar to generic_delete_inode to be able
> to truncate inode pages together with metadata destroying in
> reiser4_delete_inode whereas generic_delete_inode first truncates pages
> and then calls foofs_delete_inode.
Not okay. I though I explained you how to do it instead already?
> reiser4-truncate_inode_pages_range.patch
> This patch makes truncate_inode_pages_range from truncate_inode_pages.
> truncate_inode_pages_range can truncate only pages which fall into
> specified range. truncate_inode_pages which trucates all pages starting
> from specified offset is made a one liner which calls
> truncate_inode_pages_range.
Ok.
> reiser4-rcu-barrier.patch
> This patch introduces a new interface - rcu_barrier() which waits until
> all the RCUs queued until this call have been completed.
> This patch is by Dipankar Sarma <[email protected]>
No idea, but if Dipankar things it's okay it probably is.
> reiser4-reget-page-mapping.patch
> This patch allows to remove page from page cache in foofs_releasepage.
probably ok, Andrew?
> reiser4-radix_tree_lookup_slot.patch
> This patch extents radxi tree API with a function which returns pointer
> to found item within the tree.
Idea is okay, implementation needs work:
__lookup_slot should be called radix_tree_lookup_slot and exported direcly.
radix_tree_lookup should be an inlined wrapper in the header, and kill
the != NULL comparims, it's superflous:
static inline void *radix_tree_lookup(struct radix_tree_root *root,
unsigned long index)
{
void **slot = radix_tree_lookup_slot(root, index);
return slot ? *slot : NULL;
}
> reiser4-export-remove_from_page_cache.patch
Probably okay, but why do you need both remove_from_page_cache
and __remove_from_page_cache?
> reiser4-export-page_cache_readahead.patch
ok
> reiser4-export-pagevec-funcs.patch
ok
> reiser4-export-radix_tree_preload.patch
this one is nasty. not your fault though, but why do we even
have global radix-tree preloads instead of pools. What do you
need it for?
> reiser4-export-find_get_pages.patch
Why don't you use pagevecs instead?
> reiser4-export-generic_sync_sb_inodes.patch
Can't find this one in current -mm
> reiser4-export-inode_lock.patch
> Reiser4 used to manipulate with super block inode lists so it needs
> inode_lock exported.
> We are working now to not need this. But quite many things are based on
> it. Is there any chance to have it included?
No. Modules must not look at inode_lock, it's far too much of an
implementation detail.