linux/drivers
Alice Ryhl c1437332e4 rust_binder: move BC_FREE_BUFFER drop inside if statement
When looking at flamegraphs, there is a pretty large entry for the
function call drop_in_place::<Option<Allocation>> which in turn calls
drop_in_place::<Allocation>. Combined with the looper_need_return
condition, this means that the generated code looks like this:

	if let Some(buffer) = buffer {
	    if buffer.looper_need_return_on_free() {
	        self.inner.lock().looper_need_return = true;
	    }
	}
	drop_in_place::<Option<Allocation>>() { // not inlined
	    if let Some(buffer) = buffer {
	    	drop_in_place::<Allocation>(buffer);
	    }
	}

This kind of situation where you check X and then check X again is
normally optimized into a single condition, but in this case due to the
non-inlined function call to drop_in_place::<Option<Allocation>>, that
optimization does not happen.

Furthermore, the drop_in_place::<Allocation> call is only two-thirds of
the drop_in_place::<Option<Allocation>> call in the flamegraph. This
indicates that this double condition is not performing well. Also, last
time I looked at Binder perf, I remember finding that the destructor of
Allocation was involved with many branch mispredictions.

Thus, change this code to look like this:

	if let Some(buffer) = buffer {
	    if buffer.looper_need_return_on_free() {
	        self.inner.lock().looper_need_return = true;
	    }
	    drop_in_place::<Allocation>(buffer);
	}

by dropping the Allocation directly. Flamegraphs confirm that the
drop_in_place::<Option<Allocation>> call disappears from this change.

Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Acked-by: Carlos Llamas <cmllamas@google.com>
Link: https://patch.msgid.link/20251029-binder-bcfreebuf-option-v1-1-4d282be0439f@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-11-26 13:24:28 +01:00
..
accel accel/qaic: Synchronize access to DBC request queue head & tail pointer 2025-10-14 08:56:31 -06:00
accessibility
acpi RISC-V updates for v6.18-rc3 2025-10-25 09:35:26 -07:00
amba
android rust_binder: move BC_FREE_BUFFER drop inside if statement 2025-11-26 13:24:28 +01:00
ata ata: libata-core: relax checks in ata_read_log_directory() 2025-10-13 09:12:36 +02:00
atm
auxdisplay
base arch_topology: Fix incorrect error check in topology_parse_cpu_capacity() 2025-10-22 08:06:28 +02:00
bcma
block block-6.18-20251023 2025-10-24 12:48:19 -07:00
bluetooth
bus bus: mhi: host: pci_generic: Add Foxconn T99W760 modem 2025-11-20 11:28:47 +05:30
cache
cdrom
cdx cdx: make cdx_bus_type constant 2025-10-22 07:54:33 +02:00
char Merge 6.18-rc3 into char-misc-next 2025-10-27 07:48:19 +01:00
clk There's a bunch of patches here across drivers/clk/ to migrate drivers to use 2025-10-07 09:28:37 -07:00
clocksource hyperv-next for v6.18 2025-10-07 08:40:15 -07:00
comedi Merge 6.18-rc3 into char-misc-next 2025-10-27 07:48:19 +01:00
connector
counter
cpufreq cpufreq/amd-pstate: Fix a regression leading to EPP 0 after hibernate 2025-10-15 08:21:16 -05:00
cpuidle Revert "cpuidle: menu: Avoid discarding useful information" 2025-10-20 21:27:16 +02:00
crypto This push contains the following changes: 2025-10-08 09:38:31 -07:00
cxl cxl/trace: Subtract to find an hpa_alias0 in cxl_poison events 2025-10-14 14:48:14 -07:00
dax
dca
devfreq PM / devfreq: rockchip-dfi: switch to FIELD_PREP_WM16 macro 2025-10-15 10:39:54 -04:00
dibs
dio
dma dmaengine updates for v6.18 2025-10-06 10:37:06 -07:00
dma-buf
dpll dpll: zl3073x: Handle missing or corrupted flash configuration 2025-10-13 17:24:36 -07:00
edac
eisa drivers: eisa: make eisa_bus_type const 2025-10-22 07:55:00 +02:00
extcon
firewire firewire: init_ohci1394_dma: add missing function parameter documentation 2025-10-25 08:29:56 +09:00
firmware firmware: stratix10-svc: fix make htmldocs warning for stratix10_svc 2025-11-24 17:49:27 +01:00
fpga fpga: altera-cvp: Use pci_find_vsec_capability() when probing FPGA device 2025-11-10 15:03:13 +08:00
fsi fsi: occ: Update response size to 8kb 2025-10-22 07:55:16 +02:00
fwctl
gnss
gpio gpio: ljca: Fix duplicated IRQ mapping 2025-10-23 14:30:11 +02:00
gpu UAPI Changes: 2025-10-24 13:39:21 +02:00
greybus
hid hid-for-linus-2025101701 2025-10-18 08:18:18 -10:00
hsi
hte
hv
hwmon hwmon: (sht3x) Fix error handling 2025-10-19 18:56:14 -07:00
hwspinlock
hwtracing coresight: Updates for Linux v6.19 2025-11-24 17:34:19 +01:00
i2c i2c: usbio: Add ACPI device-id for MTL-CVF devices 2025-10-14 13:54:43 +02:00
i3c
idle
iio iio: pressure: Arrange Makefile alphabetically 2025-11-16 15:22:16 +00:00
infiniband
input Input updates for v6.18-rc0 2025-10-08 09:44:38 -07:00
interconnect interconnect: qcom: sm6350: enable QoS configuration 2025-11-19 16:03:12 +02:00
iommu
ipack
irqchip irqchip/sifive-plic: Avoid interrupt ID 0 handling during suspend/resume 2025-10-07 10:23:22 +02:00
isdn
leds
macintosh
mailbox qcom: add Glymur CPUCP mailbox binding 2025-10-08 11:44:21 -07:00
mcb
md
media
memory
memstick
message
mfd
misc Merge 6.18-rc3 into char-misc-next 2025-10-27 07:48:19 +01:00
mmc rpmb: move rpmb_frame struct and constants to common header 2025-10-13 13:18:03 +02:00
most most: usb: hdm_probe: Fix calling put_device() before device initialization 2025-10-22 08:04:43 +02:00
mtd
mux
net net/mlx5: Fix IPsec cleanup over MPV device 2025-10-23 07:14:33 -07:00
nfc
ntb
nubus
nvdimm libnvdimm for 6.18 2025-10-06 11:17:18 -07:00
nvme nvme/tcp: handle tls partially sent records in write_space() 2025-10-16 11:32:04 -07:00
nvmem nvmem: imx-ocotp-ele: Add i.MX94 OCOTP support 2025-11-24 18:06:22 +01:00
of of/irq: Export of_msi_xlate() for module usage 2025-10-24 07:44:09 -05:00
opp
parisc
parport
pci pci-v6.18-fixes-3 2025-10-24 16:43:08 -07:00
pcmcia
peci peci: controller: peci-aspeed: convert from round_rate() to determine_rate() 2025-11-06 14:51:37 +01:00
perf arm64 fixes for -rc1 2025-10-07 08:59:25 -07:00
phy phy-for-6.18 2025-10-06 10:34:22 -07:00
pinctrl pci-v6.18-changes 2025-10-06 10:41:03 -07:00
platform platform/x86: alienware-wmi-wmax: Add AWCC support to Dell G15 5530 2025-10-15 11:22:35 +03:00
pmdomain
pnp
power
powercap
pps
ps3
ptp ptp: ocp: Fix typo using index 1 instead of i in SMA initialization loop 2025-10-22 19:18:39 -07:00
pwm
rapidio drivers: rapidio: make rio_bus_type const 2025-10-22 07:55:02 +02:00
ras
regulator
remoteproc
reset
rpmsg
rtc RTC for 6.18 2025-10-11 11:56:47 -07:00
s390 more s390 updates for 6.18 merge window 2025-10-09 10:51:43 -07:00
sbus
scsi Merge branch '6.18/scsi-queue' into 6.18/scsi-fixes 2025-10-13 15:54:13 -04:00
sh
siox
slimbus
soc - switch longson32 platform to DT and use MIPS_GENERIC framework 2025-10-05 10:09:55 -07:00
soundwire soundwire updates for 6.18 2025-10-06 10:32:22 -07:00
spi spi: intel-pci: Add support for Intel Wildcat Lake SPI serial flash 2025-10-20 16:15:31 +01:00
spmi
ssb
staging IIO: New device support, features and cleanup for 6.19 2025-11-21 15:25:20 +01:00
target SCSI misc on 20251011 2025-10-11 11:49:00 -07:00
tc
tee TEE QTEE fixes for v6.18 2025-10-17 15:26:52 +02:00
thermal
thunderbolt
tty serial: 8250_mtk: Enable baud clock and manage in runtime PM 2025-10-22 12:13:54 +02:00
ufs SCSI misc on 20251011 2025-10-11 11:49:00 -07:00
uio uio: uio_fsl_elbc_gpcm:: Add null pointer check to uio_fsl_elbc_gpcm_probe 2025-10-22 08:00:02 +02:00
usb USB serial device ids for 6.18-rc3 2025-10-24 13:52:58 +02:00
vdpa
vfio vfio: Dump migration features under debugfs 2025-10-06 11:22:48 -06:00
vhost
video fbdev fixes & enhancements for 6.18-rc1: 2025-10-10 09:36:23 -07:00
virt
virtio
w1 w1: omap-hdq: Remove redundant pm_runtime_mark_last_busy() calls 2025-11-11 10:55:18 +01:00
watchdog linux-watchdog 6.18-rc1 tag 2025-10-06 11:00:30 -07:00
xen
zorro
Kconfig
Makefile hyperv-next for v6.18 2025-10-07 08:40:15 -07:00