mirror of
https://github.com/opnsense/src.git
synced 2026-07-06 07:46:59 -04:00
Commit r270423 fixed a regression in sched_yield() that was introduced in earlier changes. Unfortunately, at the same time it introduced an new regression. The problem is that SWT_RELINQUISH (6), like all other SWT_* constants and unlike SW_* flags, is not a bit flag. So, (flags & SWT_RELINQUISH) is true in cases where that was not really indended, for example, with SWT_OWEPREEMPT (2) and SWT_REMOTEPREEMPT (11). A straight forward fix would be to use (flags & SW_TYPE_MASK) == SWT_RELINQUISH, but my impression is that the switch types are designed mostly for gathering statistics, not for influencing scheduling decisions. So, I decided that it would be better to check for SW_PREEMPT flag instead. That's also the same flag that was checked before r239157. I double-checked how that flag is used and I am confident that the flag is set only in the places where we really have the preemption: - critical_exit + td_owepreempt - sched_preempt in the ULE scheduler - sched_preempt in the 4BSD scheduler Reviewed by: kib, mav MFC after: 4 days Sponsored by: Panzura Differential Revision: https://reviews.freebsd.org/D9230 |
||
|---|---|---|
| .. | ||
| bus_if.m | ||
| capabilities.conf | ||
| clock_if.m | ||
| cpufreq_if.m | ||
| device_if.m | ||
| genassym.sh | ||
| imgact_aout.c | ||
| imgact_binmisc.c | ||
| imgact_elf.c | ||
| imgact_elf32.c | ||
| imgact_elf64.c | ||
| imgact_gzip.c | ||
| imgact_shell.c | ||
| inflate.c | ||
| init_main.c | ||
| init_sysent.c | ||
| kern_acct.c | ||
| kern_alq.c | ||
| kern_clock.c | ||
| kern_clocksource.c | ||
| kern_condvar.c | ||
| kern_conf.c | ||
| kern_cons.c | ||
| kern_context.c | ||
| kern_cpu.c | ||
| kern_cpuset.c | ||
| kern_ctf.c | ||
| kern_descrip.c | ||
| kern_dtrace.c | ||
| kern_dump.c | ||
| kern_environment.c | ||
| kern_et.c | ||
| kern_event.c | ||
| kern_exec.c | ||
| kern_exit.c | ||
| kern_fail.c | ||
| kern_ffclock.c | ||
| kern_fork.c | ||
| kern_gzio.c | ||
| kern_hhook.c | ||
| kern_idle.c | ||
| kern_intr.c | ||
| kern_jail.c | ||
| kern_khelp.c | ||
| kern_kthread.c | ||
| kern_ktr.c | ||
| kern_ktrace.c | ||
| kern_linker.c | ||
| kern_lock.c | ||
| kern_lockf.c | ||
| kern_lockstat.c | ||
| kern_loginclass.c | ||
| kern_malloc.c | ||
| kern_mbuf.c | ||
| kern_mib.c | ||
| kern_module.c | ||
| kern_mtxpool.c | ||
| kern_mutex.c | ||
| kern_ntptime.c | ||
| kern_numa.c | ||
| kern_osd.c | ||
| kern_physio.c | ||
| kern_pmc.c | ||
| kern_poll.c | ||
| kern_priv.c | ||
| kern_proc.c | ||
| kern_procctl.c | ||
| kern_prot.c | ||
| kern_racct.c | ||
| kern_rangelock.c | ||
| kern_rctl.c | ||
| kern_resource.c | ||
| kern_rmlock.c | ||
| kern_rwlock.c | ||
| kern_sdt.c | ||
| kern_sema.c | ||
| kern_sendfile.c | ||
| kern_sharedpage.c | ||
| kern_shutdown.c | ||
| kern_sig.c | ||
| kern_switch.c | ||
| kern_sx.c | ||
| kern_synch.c | ||
| kern_syscalls.c | ||
| kern_sysctl.c | ||
| kern_tc.c | ||
| kern_thr.c | ||
| kern_thread.c | ||
| kern_time.c | ||
| kern_timeout.c | ||
| kern_umtx.c | ||
| kern_uuid.c | ||
| kern_xxx.c | ||
| ksched.c | ||
| link_elf.c | ||
| link_elf_obj.c | ||
| linker_if.m | ||
| Make.tags.inc | ||
| Makefile | ||
| makesyscalls.sh | ||
| md4c.c | ||
| md5c.c | ||
| msi_if.m | ||
| p1003_1b.c | ||
| pic_if.m | ||
| posix4_mib.c | ||
| sched_4bsd.c | ||
| sched_ule.c | ||
| serdev_if.m | ||
| stack_protector.c | ||
| subr_acl_nfs4.c | ||
| subr_acl_posix1e.c | ||
| subr_autoconf.c | ||
| subr_blist.c | ||
| subr_bufring.c | ||
| subr_bus.c | ||
| subr_bus_dma.c | ||
| subr_busdma_bufalloc.c | ||
| subr_capability.c | ||
| subr_clock.c | ||
| subr_counter.c | ||
| subr_devmap.c | ||
| subr_devstat.c | ||
| subr_disk.c | ||
| subr_dummy_vdso_tc.c | ||
| subr_eventhandler.c | ||
| subr_fattime.c | ||
| subr_firmware.c | ||
| subr_gtaskqueue.c | ||
| subr_hash.c | ||
| subr_hints.c | ||
| subr_intr.c | ||
| subr_kdb.c | ||
| subr_kobj.c | ||
| subr_lock.c | ||
| subr_log.c | ||
| subr_mbpool.c | ||
| subr_mchain.c | ||
| subr_module.c | ||
| subr_msgbuf.c | ||
| subr_param.c | ||
| subr_pcpu.c | ||
| subr_pctrie.c | ||
| subr_power.c | ||
| subr_prf.c | ||
| subr_prof.c | ||
| subr_rman.c | ||
| subr_rtc.c | ||
| subr_sbuf.c | ||
| subr_scanf.c | ||
| subr_sfbuf.c | ||
| subr_sglist.c | ||
| subr_sleepqueue.c | ||
| subr_smp.c | ||
| subr_stack.c | ||
| subr_syscall.c | ||
| subr_taskqueue.c | ||
| subr_terminal.c | ||
| subr_trap.c | ||
| subr_turnstile.c | ||
| subr_uio.c | ||
| subr_unit.c | ||
| subr_vmem.c | ||
| subr_witness.c | ||
| sys_capability.c | ||
| sys_generic.c | ||
| sys_pipe.c | ||
| sys_procdesc.c | ||
| sys_process.c | ||
| sys_socket.c | ||
| syscalls.c | ||
| syscalls.master | ||
| systrace_args.c | ||
| sysv_ipc.c | ||
| sysv_msg.c | ||
| sysv_sem.c | ||
| sysv_shm.c | ||
| tty.c | ||
| tty_compat.c | ||
| tty_info.c | ||
| tty_inq.c | ||
| tty_outq.c | ||
| tty_pts.c | ||
| tty_tty.c | ||
| tty_ttydisc.c | ||
| uipc_accf.c | ||
| uipc_debug.c | ||
| uipc_domain.c | ||
| uipc_mbuf.c | ||
| uipc_mbuf2.c | ||
| uipc_mbufhash.c | ||
| uipc_mqueue.c | ||
| uipc_sem.c | ||
| uipc_shm.c | ||
| uipc_sockbuf.c | ||
| uipc_socket.c | ||
| uipc_syscalls.c | ||
| uipc_usrreq.c | ||
| vfs_acl.c | ||
| vfs_aio.c | ||
| vfs_bio.c | ||
| vfs_cache.c | ||
| vfs_cluster.c | ||
| vfs_default.c | ||
| vfs_export.c | ||
| vfs_extattr.c | ||
| vfs_hash.c | ||
| vfs_init.c | ||
| vfs_lookup.c | ||
| vfs_mount.c | ||
| vfs_mountroot.c | ||
| vfs_subr.c | ||
| vfs_syscalls.c | ||
| vfs_vnops.c | ||
| vnode_if.src | ||