Files
kernel_google_redbull/include/uapi/linux/pkt_sched.h
Wilson Sung 9e5fcdf3d0 Merge android-4.19-stable (4.19.207) into android-msm-pixel-4.19-lts
Merge 4.19.207 into android-4.19-stable
Linux 4.19.207
    s390/bpf: Fix 64-bit subtraction of the -0x80000000 constant
    net: renesas: sh_eth: Fix freeing wrong tx descriptor
  * ip_gre: validate csum_start only on pull
      net/ipv4/ip_gre.c
    qlcnic: Remove redundant unlock in qlcnic_pinit_from_rom
  * fq_codel: reject silly quantum parameters
      include/uapi/linux/pkt_sched.h
      net/sched/sch_fq_codel.c
  * netfilter: socket: icmp6: fix use-after-scope
      net/ipv6/netfilter/nf_socket_ipv6.c
    net: dsa: b53: Fix calculating number of switch ports
    ARC: export clear_user_page() for modules
    mtd: rawnand: cafe: Fix a resource leak in the error handling path of 'cafe_nand_probe()'
  * PCI: Sync __pci_register_driver() stub for CONFIG_PCI=n
      include/linux/pci.h
  * KVM: arm64: Handle PSCI resets before userspace touches vCPU state
      virt/kvm/arm/arm.c
  * PCI: Fix pci_dev_str_match_path() alloc while atomic bug
      drivers/pci/pci.c
    mfd: axp20x: Update AXP288 volatile ranges
    NTB: perf: Fix an error code in perf_setup_inbuf()
    ethtool: Fix an error code in cxgb2.c
    block, bfq: honor already-setup queue merges
    net: usb: cdc_mbim: avoid altsetting toggling for Telit LN920
  * PCI: Add ACS quirks for Cavium multi-function devices
      drivers/pci/quirks.c
    mfd: Don't use irq_create_mapping() to resolve a mapping
    dt-bindings: mtd: gpmc: Fix the ECC bytes vs. OOB bytes equation
    KVM: s390: index kvm->arch.idle_mask by vcpu_idx
  * mm/memory_hotplug: use "unsigned long" for PFN in zone_for_pfn_range()
      include/linux/memory_hotplug.h
      mm/memory_hotplug.c
    net: hns3: pad the short tunnel frame before sending to hardware
    ibmvnic: check failover_pending in login response
    qed: Handle management FW error
  * tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
      net/ipv4/tcp_input.c
  * net: dsa: destroy the phylink instance on any error in dsa_slave_phy_setup
      net/dsa/slave.c
  * net/af_unix: fix a data-race in unix_dgram_poll
      include/linux/skbuff.h
      net/unix/af_unix.c
  * events: Reuse value read using READ_ONCE instead of re-reading it
      kernel/events/core.c
    net/mlx5: Fix potential sleeping in atomic context
  * perf machine: Initialize srcline string member in add_location struct
      tools/perf/util/machine.c
  * tipc: increase timeout in tipc_sk_enqueue()
      net/tipc/socket.c
    r6040: Restore MDIO clock frequency after MAC reset
  * net/l2tp: Fix reference count leak in l2tp_udp_recv_core
      net/l2tp/l2tp_core.c
  * dccp: don't duplicate ccid when cloning dccp sock
      net/dccp/minisocks.c
    ptp: dp83640: don't define PAGE0
  * net-caif: avoid user-triggerable WARN_ON(1)
      net/caif/chnl_net.c
  * tipc: fix an use-after-free issue in tipc_recvmsg
      net/tipc/socket.c
    x86/mm: Fix kern_addr_valid() to cope with existing but not present entries
  * PCI: Add AMD GPU multi-function power dependencies
      drivers/pci/quirks.c
    PM: base: power: don't try to use non-existing RTC for storing data
  * arm64/sve: Use correct size when reinitialising SVE state
      arch/arm64/kernel/fpsimd.c
    bnx2x: Fix enabling network interfaces without VFs
    xen: reset legacy rtc flag for PV domU
    dm thin metadata: Fix use-after-free in dm_bm_set_read_only
    drm/amdgpu: Fix BUG_ON assert
    platform/chrome: cros_ec_proto: Send command again when timeout occurs
  * memcg: enable accounting for pids in nested pid namespaces
      kernel/pid_namespace.c
  * mm/hugetlb: initialize hugetlb_usage in mm_init
      include/linux/hugetlb.h
      kernel/fork.c
    cpufreq: powernv: Fix init_chip_info initialization in numa=off
    scsi: qla2xxx: Sync queue idx with queue_pair_map idx
    scsi: BusLogic: Fix missing pr_cont() use
  * ovl: fix BUG_ON() in may_delete() when called from ovl_cleanup()
      fs/overlayfs/dir.c
    parisc: fix crash with signals and alloca
    net: w5100: check return value after calling platform_get_resource()
  * net: fix NULL pointer reference in cipso_v4_doi_free
      net/netlabel/netlabel_cipso_v4.c
    ath9k: fix sleeping in atomic context
    ath9k: fix OOB read ar9300_eeprom_restore_internal
    parport: remove non-zero check on count
  * ASoC: rockchip: i2s: Fixup config for DAIFMT_DSP_A/B
      sound/soc/rockchip/rockchip_i2s.c
  * ASoC: rockchip: i2s: Fix regmap_ops hang
      sound/soc/rockchip/rockchip_i2s.c
    usbip:vhci_hcd USB port can get stuck in the disabled state
    usbip: give back URBs for unsent unlink requests during cleanup
    usb: musb: musb_dsps: request_irq() after initializing musb
  * Revert "USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set"
      drivers/usb/host/xhci.c
  * cifs: fix wrong release in sess_alloc_buffer() failed path
      fs/cifs/sess.c
    mmc: core: Return correct emmc response in case of ioctl error
  * selftests/bpf: Enlarge select() timeout for test_maps
      tools/testing/selftests/bpf/test_maps.c
    mmc: rtsx_pci: Fix long reads when clock is prescaled
    mmc: sdhci-of-arasan: Check return value of non-void funtions
  * of: Don't allow __of_attached_node_sysfs() without CONFIG_SYSFS
      drivers/of/kobj.c
  * gfs2: Don't call dlm after protocol is unmounted
      fs/gfs2/lock_dlm.c
    staging: rts5208: Fix get_ms_information() heap buffer size
  * rpc: fix gss_svc_init cleanup on failure
      net/sunrpc/auth_gss/svcauth_gss.c
  * tcp: enable data-less, empty-cookie SYN with TFO_SERVER_COOKIE_NOT_REQD
      net/ipv4/tcp_fastopen.c
    serial: sh-sci: fix break handling for sysrq
  * Bluetooth: Fix handling of LE Enhanced Connection Complete
      net/bluetooth/hci_event.c
    ARM: tegra: tamonten: Fix UART pad setting
    gpu: drm: amd: amdgpu: amdgpu_i2c: fix possible uninitialized-variable access in amdgpu_i2c_router_select_ddc_port()
  * Bluetooth: avoid circular locks in sco_sock_connect
      net/bluetooth/sco.c
  * Bluetooth: schedule SCO timeouts with delayed_work
      net/bluetooth/sco.c
    net: ethernet: stmmac: Do not use unreachable() in ipq806x_gmac_probe()
    arm64: dts: qcom: sdm660: use reg value for memory node
    ARM: dts: imx53-ppd: Fix ACHC entry
    media: tegra-cec: Handle errors of clk_prepare_enable()
    media: TDA1997x: fix tda1997x_query_dv_timings() return value
  * media: v4l2-dv-timings.c: fix wrong condition in two for-loops
      drivers/media/v4l2-core/v4l2-dv-timings.c
    media: imx258: Limit the max analogue gain to 480
    media: imx258: Rectify mismatch of VTS value
  * ASoC: Intel: bytcr_rt5640: Move "Platform Clock" routes to the maps for the matching in-/output
      sound/soc/intel/boards/bytcr_rt5640.c
  * bonding: 3ad: fix the concurrency between __bond_release_one() and bond_3ad_state_machine_handler()
      drivers/net/bonding/bond_main.c
  * Bluetooth: skip invalid hci_sync_conn_complete_evt
      net/bluetooth/hci_event.c
    ata: sata_dwc_460ex: No need to call phy_exit() befre phy_init()
  * samples: bpf: Fix tracex7 error raised on the missing argument
      samples/bpf/test_override_return.sh
      samples/bpf/tracex7_user.c
    staging: ks7010: Fix the initialization of the 'sleep_status' structure
    serial: 8250_pci: make setup_port() parameters explicitly unsigned
    hvsi: don't panic on tty_register_driver failure
    xtensa: ISS: don't panic in rs_init
  * serial: 8250: Define RX trigger levels for OxSemi 950 devices
      include/uapi/linux/serial_reg.h
    s390/jump_label: print real address in a case of a jump label bug
  * flow_dissector: Fix out-of-bounds warnings
      net/core/flow_dissector.c
  * ipv4: ip_output.c: Fix out-of-bounds warning in ip_copy_addrs()
      net/ipv4/ip_output.c
    video: fbdev: riva: Error out if 'pixclock' equals zero
    video: fbdev: kyro: Error out if 'pixclock' equals zero
    video: fbdev: asiliantfb: Error out if 'pixclock' equals zero
  * bpf/tests: Do not PASS tests without actually testing the result
      lib/test_bpf.c
  * bpf/tests: Fix copy-and-paste error in double word test
      lib/test_bpf.c
    drm/amd/amdgpu: Update debugfs link_settings output link_rate field in hex
    tty: serial: jsm: hold port lock when reporting modem line changes
    staging: board: Fix uninitialized spinlock when attaching genpd
  * usb: gadget: composite: Allow bMaxPower=0 if self-powered
      drivers/usb/gadget/composite.c
  * usb: gadget: u_ether: fix a potential null pointer dereference
      drivers/usb/gadget/function/u_ether.c
    usb: host: fotg210: fix the actual_length of an iso packet
    usb: host: fotg210: fix the endpoint's transactional opportunities calculation
  * Smack: Fix wrong semantics in smk_access_entry()
      security/smack/smack_access.c
  * netlink: Deal with ESRCH error in nlmsg_notify()
      net/netlink/af_netlink.c
    video: fbdev: kyro: fix a DoS bug by restricting user input
    ARM: dts: qcom: apq8064: correct clock names
    iio: dac: ad5624r: Fix incorrect handling of an optional regulator.
  * tipc: keep the skb in rcv queue until the whole data is read
      net/tipc/socket.c
  * PCI: Use pci_update_current_state() in pci_enable_device_flags()
      drivers/pci/pci.c
    crypto: mxs-dcp - Use sg_mapping_iter to copy data
    media: dib8000: rewrite the init prbs logic
  * userfaultfd: prevent concurrent API initialization
      fs/userfaultfd.c
    MIPS: Malta: fix alignment of the devicetree buffer
  * f2fs: fix to unmap pages from userspace process in punch_hole()
      fs/f2fs/file.c
  * f2fs: fix to account missing .skipped_gc_rwsem
      fs/f2fs/gc.c
  * fscache: Fix cookie key hashing
      fs/fscache/cookie.c
      fs/fscache/internal.h
      fs/fscache/main.c
    platform/x86: dell-smbios-wmi: Add missing kfree in error-exit from run_smbios_call
    scsi: qedi: Fix error codes in qedi_alloc_global_queues()
    pinctrl: single: Fix error return code in pcs_parse_bits_in_pinctrl_entry()
    openrisc: don't printk() unconditionally
    powerpc/stacktrace: Include linux/delay.h
  * vfio: Use config not menuconfig for VFIO_NOIOMMU
      drivers/vfio/Kconfig
    pinctrl: samsung: Fix pinctrl bank pin count
    docs: Fix infiniband uverbs minor number
    RDMA/iwcm: Release resources if iw_cm module initialization fails
  * HID: input: do not report stylus battery state as "full"
      drivers/hid/hid-input.c
    PCI: aardvark: Fix masking and unmasking legacy INTx interrupts
    PCI: aardvark: Increase polling delay to 1.5s while waiting for PIO response
    PCI: xilinx-nwl: Enable the clock through CCF
  * PCI: Return ~0 data on pciconfig_read() CAP_SYS_ADMIN failure
      drivers/pci/syscall.c
  * PCI: Restrict ASMedia ASM1062 SATA Max Payload Size Supported
      drivers/pci/quirks.c
    ARM: 9105/1: atags_to_fdt: don't warn about stack size
    libata: add ATA_HORKAGE_NO_NCQ_TRIM for Samsung 860 and 870 SSDs
    media: rc-loopback: return number of emitters rather than error
    media: uvc: don't do DMA on stack
    VMCI: fix NULL pointer dereference when unmapping queue pair
    dm crypt: Avoid percpu_counter spinlock contention in crypt_page_alloc()
    power: supply: max17042: handle fails of reading status register
    block: bfq: fix bfq_set_next_ioprio_data()
  * crypto: public_key: fix overflow during implicit conversion
      include/crypto/public_key.h
  * arm64: head: avoid over-mapping in map_memory
      arch/arm64/include/asm/kernel-pgtable.h
      arch/arm64/kernel/head.S
    soc: aspeed: lpc-ctrl: Fix boundary check for mmap
  * tools/thermal/tmon: Add cross compiling support
      tools/thermal/tmon/Makefile
  * bpf: Fix pointer arithmetic mask tightening under state pruning
      include/linux/bpf_verifier.h
      kernel/bpf/verifier.c
  * bpf: verifier: Allocate idmap scratch in verifier env
      include/linux/bpf_verifier.h
      kernel/bpf/verifier.c
  * bpf: Fix leakage due to insufficient speculative store bypass mitigation
      include/linux/bpf_verifier.h
      kernel/bpf/verifier.c
  * bpf: Introduce BPF nospec instruction for mitigating Spectre v4
      arch/arm64/net/bpf_jit_comp.c
      include/linux/filter.h
      kernel/bpf/core.c
      kernel/bpf/disasm.c
  * selftests/bpf: fix tests due to const spill/fill
      tools/testing/selftests/bpf/test_verifier.c
  * bpf: track spill/fill of constants
      kernel/bpf/verifier.c
  * selftests/bpf: Test variable offset stack access
      tools/testing/selftests/bpf/test_verifier.c
  * bpf: Sanity check max value for var_off stack access
      kernel/bpf/verifier.c
  * bpf: Reject indirect var_off stack access in unpriv mode
      kernel/bpf/verifier.c
  * bpf: Reject indirect var_off stack access in raw mode
      kernel/bpf/verifier.c
  * bpf: Support variable offset stack access from helpers
      kernel/bpf/verifier.c
  * bpf: correct slot_type marking logic to allow more stack slot sharing
      kernel/bpf/verifier.c
      tools/testing/selftests/bpf/test_verifier.c
  * bpf/verifier: per-register parent pointers
      include/linux/bpf_verifier.h
      kernel/bpf/verifier.c
  * 9p/xen: Fix end of loop tests for list_for_each_entry
      net/9p/trans_xen.c
  * include/linux/list.h: add a macro to test if entry is pointing to the head
      include/linux/list.h
    xen: fix setting of max_pfn in shared_info
    powerpc/perf/hv-gpci: Fix counter value parsing
  * PCI/MSI: Skip masking MSI-X on Xen PV
      drivers/pci/msi.c
    blk-zoned: allow BLKREPORTZONE without CAP_SYS_ADMIN
    blk-zoned: allow zone management send operations without CAP_SYS_ADMIN
    btrfs: reset replace target device to allocation state on close
    rtc: tps65910: Correct driver module alias
    clk: kirkwood: Fix a clocking boot regression
    backlight: pwm_bl: Improve bootloader/kernel device handover
    fbmem: don't allow too huge resolutions
  * IMA: remove the dependency on CRYPTO_MD5
      security/integrity/ima/Kconfig
  * IMA: remove -Wmissing-prototypes warning
      security/integrity/ima/ima_mok.c
    KVM: x86: Update vCPU's hv_clock before back to guest when tsc_offset is adjusted
    x86/resctrl: Fix a maybe-uninitialized build warning treated as error
  * tty: Fix data race between tiocsti() and flush_to_ldisc()
      drivers/tty/tty_io.c
  * ubifs: report correct st_size for encrypted symlinks
      fs/ubifs/file.c
  * f2fs: report correct st_size for encrypted symlinks
      fs/f2fs/namei.c
  * ext4: report correct st_size for encrypted symlinks
      fs/ext4/symlink.c
  * fscrypt: add fscrypt_symlink_getattr() for computing st_size
      fs/crypto/hooks.c
  * netns: protect netns ID lookups with RCU
      net/core/net_namespace.c
  * ipv4: fix endianness issue in inet_rtm_getroute_build_skb()
      net/ipv4/route.c
    net: qualcomm: fix QCA7000 checksum handling
  * net: sched: Fix qdisc_rate_table refcount leak when get tcf_block failed
      net/sched/sch_cbq.c
  * ipv4: make exception cache less predictible
      net/ipv4/route.c
    bcma: Fix memory leak for internally-handled cores
    ath6kl: wmi: fix an error code in ath6kl_wmi_sync_point()
    tty: serial: fsl_lpuart: fix the wrong mapbase value
    usb: bdc: Fix an error handling path in 'bdc_probe()' when no suitable DMA config is available
    usb: ehci-orion: Handle errors of clk_prepare_enable() in probe
    i2c: mt65xx: fix IRQ check
  * CIFS: Fix a potencially linear read overflow
      fs/cifs/cifs_unicode.c
    mmc: moxart: Fix issue with uninitialized dma_slave_config
    mmc: dw_mmc: Fix issue with uninitialized dma_slave_config
    i2c: s3c2410: fix IRQ check
    i2c: iop3xx: fix deferred probing
  * Bluetooth: add timeout sanity check to hci_inquiry
      net/bluetooth/hci_core.c
    usb: gadget: mv_u3d: request_irq() after initializing UDC
  * mac80211: Fix insufficient headroom issue for AMSDU
      net/mac80211/tx.c
    usb: phy: tahvo: add IRQ check
    usb: host: ohci-tmio: add IRQ check
  * Bluetooth: Move shutdown callback before flushing tx and rx queue
      net/bluetooth/hci_core.c
    usb: phy: twl6030: add IRQ checks
    usb: phy: fsl-usb: add IRQ check
    usb: gadget: udc: at91: add IRQ check
    drm/msm/dsi: Fix some reference counted resource leaks
  * Bluetooth: fix repeated calls to sco_sock_kill
      net/bluetooth/sco.c
    arm64: dts: exynos: correct GIC CPU interfaces address range on Exynos7
    drm/msm/dpu: make dpu_hw_ctl_clear_all_blendstages clear necessary LMs
  * Bluetooth: increase BTNAMSIZ to 21 chars to fix potential buffer overflow
      net/bluetooth/cmtp/cmtp.h
    soc: qcom: smsm: Fix missed interrupts if state changes while masked
  * PCI: PM: Enable PME if it can be signaled from D3cold
      drivers/pci/pci.c
  * PCI: PM: Avoid forcing PCI_D0 for wakeup reasons inconsistently
      drivers/pci/pci.c
    media: venus: venc: Fix potential null pointer dereference on pointer fmt
    media: em28xx-input: fix refcount bug in em28xx_usb_disconnect
    i2c: highlander: add IRQ check
  * net: cipso: fix warnings in netlbl_cipsov4_add_std
      net/netlabel/netlabel_cipso_v4.c
  * tcp: seq_file: Avoid skipping sk during tcp_seek_last_pos
      net/ipv4/tcp_ipv4.c
  * Bluetooth: sco: prevent information leak in sco_conn_defer_accept()
      net/bluetooth/sco.c
    media: go7007: remove redundant initialization
    media: dvb-usb: fix uninit-value in vp702x_read_mac_addr
    media: dvb-usb: fix uninit-value in dvb_usb_adapter_dvb_init
  * soc: rockchip: ROCKCHIP_GRF should not default to y, unconditionally
      drivers/soc/rockchip/Kconfig
    media: TDA1997x: enable EDID support
    spi: sprd: Fix the wrong WDG_LOAD_VAL
  * certs: Trigger creation of RSA module signing key if it's not an RSA key
      certs/Makefile
    crypto: qat - use proper type for vf_mask
    clocksource/drivers/sh_cmt: Fix wrong setting if don't request IRQ for clock source channel
  * lib/mpi: use kcalloc in mpi_resize
      lib/mpi/mpiutil.c
    spi: spi-pic32: Fix issue with uninitialized dma_slave_config
    spi: spi-fsl-dspi: Fix issue with uninitialized dma_slave_config
    m68k: emu: Fix invalid free in nfeth_cleanup()
  * udf_get_extendedattr() had no boundary checks.
      fs/udf/misc.c
  * fcntl: fix potential deadlock for &fasync_struct.fa_lock
      fs/fcntl.c
    crypto: qat - do not export adf_iov_putmsg()
    crypto: qat - fix naming for init/shutdown VF to PF notifications
    crypto: qat - fix reuse of completion variable
    crypto: qat - handle both source of interrupt in VF ISR
    crypto: qat - do not ignore errors from enable_vf2pf_comms()
    libata: fix ata_host_start()
    s390/cio: add dev_busid sysfs entry for each subchannel
  * power: supply: max17042_battery: fix typo in MAx17042_TOFF
      include/linux/power/max17042_battery.h
    nvme-rdma: don't update queue count when failing to set io queues
    bcache: add proper error unwinding in bcache_device_init
  * isofs: joliet: Fix iocharset=utf8 mount option
      fs/isofs/inode.c
      fs/isofs/isofs.h
      fs/isofs/joliet.c
  * udf: Check LVID earlier
      fs/udf/super.c
  * hrtimer: Avoid double reprogramming in __hrtimer_start_range_ns()
      kernel/time/hrtimer.c
  * sched/deadline: Fix missing clock update in migrate_task_rq_dl()
      kernel/sched/deadline.c
    crypto: omap-sham - clear dma flags only after omap_sham_update_dma_stop()
    power: supply: axp288_fuel_gauge: Report register-address on readb / writeb errors
  * sched/deadline: Fix reset_on_fork reporting of DL tasks
      kernel/sched/deadline.c
      kernel/sched/sched.h
    crypto: mxs-dcp - Check for DMA mapping errors
  * regmap: fix the offset of register error log
      drivers/base/regmap/regmap.c
  * locking/mutex: Fix HANDOFF condition
      kernel/locking/mutex.c
  * PCI: Call Max Payload Size-related fixup quirks early
      drivers/pci/quirks.c
    x86/reboot: Limit Dell Optiplex 990 quirk to early BIOS versions
    usb: mtu3: fix the wrong HS mult value
    usb: mtu3: use @mult for HS isoc or intr
    usb: host: xhci-rcar: Don't reload firmware after the completion
  * ALSA: usb-audio: Add registration quirk for JBL Quantum 800
      sound/usb/quirks.c
    Revert "btrfs: compression: don't try to compress if we don't have enough pages"
  * mm/page_alloc: speed up the iteration of max_order
      mm/page_alloc.c
    net: ll_temac: Remove left-over debug message
    powerpc/boot: Delete unneeded .globl _zimage_start
    powerpc/module64: Fix comment in R_PPC64_ENTRY handling
    crypto: talitos - reduce max key size for SEC1
  * SUNRPC/nfs: Fix return value for nfs4_callback_compound()
      fs/nfs/callback_xdr.c
      include/linux/sunrpc/svc.h
      net/sunrpc/svc.c
  * ipv4/icmp: l3mdev: Perform icmp error route lookup on source device routing table (v2)
      net/ipv4/icmp.c
    USB: serial: mos7720: improve OOM-handling in read_mos_reg()
  * igmp: Add ip_mc_list lock in ip_check_mc_rcu
      net/ipv4/igmp.c
    ARM: imx: fix missing 3rd argument in macro imx_mmdc_perf_init
    ARM: imx: add missing clk_disable_unprepare()
    media: stkwebcam: fix memory leak in stk_camera_probe
  * clk: fix build warning for orphan_list
      drivers/clk/clk.c
  * ALSA: pcm: fix divide error in snd_pcm_lib_ioctl
      sound/core/pcm_lib.c
    ARM: 8918/2: only build return_address() if needed
  * cryptoloop: add a deprecation warning
      drivers/block/Kconfig
    perf/x86/amd/ibs: Work around erratum #1197
    perf/x86/intel/pt: Fix mask of num_address_ranges
    qede: Fix memset corruption
    net: macb: Add a NULL check on desc_ptp
    qed: Fix the VF msix vectors flow
    gpu: ipu-v3: Fix i.MX IPU-v3 offset calculations for (semi)planar U/V formats
    xtensa: fix kconfig unmet dependency warning for HAVE_FUTEX_CMPXCHG
  * ext4: fix race writing to an inline_data file while its xattrs are changing
      fs/ext4/inline.c
    Merge 4.19.206 into android-4.19-stable
Linux 4.19.206
  * net: don't unconditionally copy_from_user a struct ifreq for socket ioctls
      include/linux/netdevice.h
      net/socket.c
    Revert "floppy: reintroduce O_NDELAY fix"
    KVM: x86/mmu: Treat NX as used (not reserved) for all !TDP shadow MMUs
    fbmem: add margin check to fb_check_caps()
    vt_kdsetmode: extend console locking
  * net/rds: dma_map_sg is entitled to merge entries
      net/rds/ib_frmr.c
    drm/nouveau/disp: power down unused DP links during init
  * drm: Copy drm_wait_vblank to user before returning
      drivers/gpu/drm/drm_ioc32.c
    qed: Fix null-pointer dereference in qed_rdma_create_qp()
    qed: qed ll2 race condition fixes
    vringh: Use wiov->used to check for read/write desc order
    virtio_pci: Support surprise removal of virtio pci device
    virtio: Improve vq->broken access to avoid any compiler optimization
  * opp: remove WARN when no valid OPPs remain
      drivers/opp/of.c
    usb: gadget: u_audio: fix race condition on endpoint stop
    net: hns3: fix get wrong pfc_en when query PFC configuration
    net: marvell: fix MVNETA_TX_IN_PRGRS bit number
    xgene-v2: Fix a resource leak in the error handling path of 'xge_probe()'
  * ip_gre: add validation for csum_start
      net/ipv4/ip_gre.c
    e1000e: Fix the max snoop/no-snoop latency for 10M
    IB/hfi1: Fix possible null-pointer dereference in _extend_sdma_tx_descs()
  * usb: dwc3: gadget: Stop EP0 transfers during pullup disable
      drivers/usb/dwc3/gadget.c
  * usb: dwc3: gadget: Fix dwc3_calc_trbs_left()
      drivers/usb/dwc3/gadget.c
    USB: serial: option: add new VID/PID to support Fibocom FG150
    Revert "USB: serial: ch341: fix character loss at high transfer rates"
    can: usb: esd_usb2: esd_usb2_rx_event(): fix the interchange of the CAN RX and TX error counters
  * once: Fix panic when module unload
      include/linux/once.h
      lib/once.c
  * netfilter: conntrack: collect all entries in one cycle
      net/netfilter/nf_conntrack_core.c
    ARC: Fix CONFIG_STACKDEPOT
  * bpf: Fix truncation handling for mod32 dst reg wrt zero
      kernel/bpf/verifier.c
  * bpf: Fix 32 bit src register truncation on div/mod
      include/linux/filter.h
      kernel/bpf/verifier.c
  * bpf: Do not use ax register in interpreter on div/mod
      kernel/bpf/core.c
  * net: qrtr: fix another OOB Read in qrtr_endpoint_post
      net/qrtr/qrtr.c

Bug: 201722185
Change-Id: Ib431fe52b39577bd49f14f4b28c49b54fa247c54
Signed-off-by: Wilson Sung <wilsonsung@google.com>
2021-10-27 08:44:16 +00:00

1093 lines
24 KiB
C

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __LINUX_PKT_SCHED_H
#define __LINUX_PKT_SCHED_H
#include <linux/types.h>
/* Logical priority bands not depending on specific packet scheduler.
Every scheduler will map them to real traffic classes, if it has
no more precise mechanism to classify packets.
These numbers have no special meaning, though their coincidence
with obsolete IPv6 values is not occasional :-). New IPv6 drafts
preferred full anarchy inspired by diffserv group.
Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
class, actually, as rule it will be handled with more care than
filler or even bulk.
*/
#define TC_PRIO_BESTEFFORT 0
#define TC_PRIO_FILLER 1
#define TC_PRIO_BULK 2
#define TC_PRIO_INTERACTIVE_BULK 4
#define TC_PRIO_INTERACTIVE 6
#define TC_PRIO_CONTROL 7
#define TC_PRIO_MAX 15
/* Generic queue statistics, available for all the elements.
Particular schedulers may have also their private records.
*/
struct tc_stats {
__u64 bytes; /* Number of enqueued bytes */
__u32 packets; /* Number of enqueued packets */
__u32 drops; /* Packets dropped because of lack of resources */
__u32 overlimits; /* Number of throttle events when this
* flow goes out of allocated bandwidth */
__u32 bps; /* Current flow byte rate */
__u32 pps; /* Current flow packet rate */
__u32 qlen;
__u32 backlog;
};
struct tc_estimator {
signed char interval;
unsigned char ewma_log;
};
/* "Handles"
---------
All the traffic control objects have 32bit identifiers, or "handles".
They can be considered as opaque numbers from user API viewpoint,
but actually they always consist of two fields: major and
minor numbers, which are interpreted by kernel specially,
that may be used by applications, though not recommended.
F.e. qdisc handles always have minor number equal to zero,
classes (or flows) have major equal to parent qdisc major, and
minor uniquely identifying class inside qdisc.
Macros to manipulate handles:
*/
#define TC_H_MAJ_MASK (0xFFFF0000U)
#define TC_H_MIN_MASK (0x0000FFFFU)
#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
#define TC_H_UNSPEC (0U)
#define TC_H_ROOT (0xFFFFFFFFU)
#define TC_H_INGRESS (0xFFFFFFF1U)
#define TC_H_CLSACT TC_H_INGRESS
#define TC_H_MIN_PRIORITY 0xFFE0U
#define TC_H_MIN_INGRESS 0xFFF2U
#define TC_H_MIN_EGRESS 0xFFF3U
/* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
enum tc_link_layer {
TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
TC_LINKLAYER_ETHERNET,
TC_LINKLAYER_ATM,
};
#define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
struct tc_ratespec {
unsigned char cell_log;
__u8 linklayer; /* lower 4 bits */
unsigned short overhead;
short cell_align;
unsigned short mpu;
__u32 rate;
};
#define TC_RTAB_SIZE 1024
struct tc_sizespec {
unsigned char cell_log;
unsigned char size_log;
short cell_align;
int overhead;
unsigned int linklayer;
unsigned int mpu;
unsigned int mtu;
unsigned int tsize;
};
enum {
TCA_STAB_UNSPEC,
TCA_STAB_BASE,
TCA_STAB_DATA,
__TCA_STAB_MAX
};
#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
/* FIFO section */
struct tc_fifo_qopt {
__u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */
};
/* SKBPRIO section */
/*
* Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1).
* SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able
* to map one to one the DS field of IPV4 and IPV6 headers.
* Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY.
*/
#define SKBPRIO_MAX_PRIORITY 64
struct tc_skbprio_qopt {
__u32 limit; /* Queue length in packets. */
};
/* PRIO section */
#define TCQ_PRIO_BANDS 16
#define TCQ_MIN_PRIO_BANDS 2
struct tc_prio_qopt {
int bands; /* Number of bands */
__u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */
__u8 enable_flow; /* Enable dequeue */
};
#define TCQ_PRIO_FLOW_CONTROL 1
/* MULTIQ section */
struct tc_multiq_qopt {
__u16 bands; /* Number of bands */
__u16 max_bands; /* Maximum number of queues */
};
/* PLUG section */
#define TCQ_PLUG_BUFFER 0
#define TCQ_PLUG_RELEASE_ONE 1
#define TCQ_PLUG_RELEASE_INDEFINITE 2
#define TCQ_PLUG_LIMIT 3
struct tc_plug_qopt {
/* TCQ_PLUG_BUFFER: Inset a plug into the queue and
* buffer any incoming packets
* TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
* to beginning of the next plug.
* TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
* Stop buffering packets until the next TCQ_PLUG_BUFFER
* command is received (just act as a pass-thru queue).
* TCQ_PLUG_LIMIT: Increase/decrease queue size
*/
int action;
__u32 limit;
};
/* TBF section */
struct tc_tbf_qopt {
struct tc_ratespec rate;
struct tc_ratespec peakrate;
__u32 limit;
__u32 buffer;
__u32 mtu;
};
enum {
TCA_TBF_UNSPEC,
TCA_TBF_PARMS,
TCA_TBF_RTAB,
TCA_TBF_PTAB,
TCA_TBF_RATE64,
TCA_TBF_PRATE64,
TCA_TBF_BURST,
TCA_TBF_PBURST,
TCA_TBF_PAD,
__TCA_TBF_MAX,
};
#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
/* TEQL section */
/* TEQL does not require any parameters */
/* SFQ section */
struct tc_sfq_qopt {
unsigned quantum; /* Bytes per round allocated to flow */
int perturb_period; /* Period of hash perturbation */
__u32 limit; /* Maximal packets in queue */
unsigned divisor; /* Hash divisor */
unsigned flows; /* Maximal number of flows */
};
struct tc_sfqred_stats {
__u32 prob_drop; /* Early drops, below max threshold */
__u32 forced_drop; /* Early drops, after max threshold */
__u32 prob_mark; /* Marked packets, below max threshold */
__u32 forced_mark; /* Marked packets, after max threshold */
__u32 prob_mark_head; /* Marked packets, below max threshold */
__u32 forced_mark_head;/* Marked packets, after max threshold */
};
struct tc_sfq_qopt_v1 {
struct tc_sfq_qopt v0;
unsigned int depth; /* max number of packets per flow */
unsigned int headdrop;
/* SFQRED parameters */
__u32 limit; /* HARD maximal flow queue length (bytes) */
__u32 qth_min; /* Min average length threshold (bytes) */
__u32 qth_max; /* Max average length threshold (bytes) */
unsigned char Wlog; /* log(W) */
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
unsigned char Scell_log; /* cell size for idle damping */
unsigned char flags;
__u32 max_P; /* probability, high resolution */
/* SFQRED stats */
struct tc_sfqred_stats stats;
};
struct tc_sfq_xstats {
__s32 allot;
};
/* RED section */
enum {
TCA_RED_UNSPEC,
TCA_RED_PARMS,
TCA_RED_STAB,
TCA_RED_MAX_P,
__TCA_RED_MAX,
};
#define TCA_RED_MAX (__TCA_RED_MAX - 1)
struct tc_red_qopt {
__u32 limit; /* HARD maximal queue length (bytes) */
__u32 qth_min; /* Min average length threshold (bytes) */
__u32 qth_max; /* Max average length threshold (bytes) */
unsigned char Wlog; /* log(W) */
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
unsigned char Scell_log; /* cell size for idle damping */
unsigned char flags;
#define TC_RED_ECN 1
#define TC_RED_HARDDROP 2
#define TC_RED_ADAPTATIVE 4
};
struct tc_red_xstats {
__u32 early; /* Early drops */
__u32 pdrop; /* Drops due to queue limits */
__u32 other; /* Drops due to drop() calls */
__u32 marked; /* Marked packets */
};
/* GRED section */
#define MAX_DPs 16
enum {
TCA_GRED_UNSPEC,
TCA_GRED_PARMS,
TCA_GRED_STAB,
TCA_GRED_DPS,
TCA_GRED_MAX_P,
TCA_GRED_LIMIT,
__TCA_GRED_MAX,
};
#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
struct tc_gred_qopt {
__u32 limit; /* HARD maximal queue length (bytes) */
__u32 qth_min; /* Min average length threshold (bytes) */
__u32 qth_max; /* Max average length threshold (bytes) */
__u32 DP; /* up to 2^32 DPs */
__u32 backlog;
__u32 qave;
__u32 forced;
__u32 early;
__u32 other;
__u32 pdrop;
__u8 Wlog; /* log(W) */
__u8 Plog; /* log(P_max/(qth_max-qth_min)) */
__u8 Scell_log; /* cell size for idle damping */
__u8 prio; /* prio of this VQ */
__u32 packets;
__u32 bytesin;
};
/* gred setup */
struct tc_gred_sopt {
__u32 DPs;
__u32 def_DP;
__u8 grio;
__u8 flags;
__u16 pad1;
};
/* CHOKe section */
enum {
TCA_CHOKE_UNSPEC,
TCA_CHOKE_PARMS,
TCA_CHOKE_STAB,
TCA_CHOKE_MAX_P,
__TCA_CHOKE_MAX,
};
#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
struct tc_choke_qopt {
__u32 limit; /* Hard queue length (packets) */
__u32 qth_min; /* Min average threshold (packets) */
__u32 qth_max; /* Max average threshold (packets) */
unsigned char Wlog; /* log(W) */
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
unsigned char Scell_log; /* cell size for idle damping */
unsigned char flags; /* see RED flags */
};
struct tc_choke_xstats {
__u32 early; /* Early drops */
__u32 pdrop; /* Drops due to queue limits */
__u32 other; /* Drops due to drop() calls */
__u32 marked; /* Marked packets */
__u32 matched; /* Drops due to flow match */
};
/* HTB section */
#define TC_HTB_NUMPRIO 8
#define TC_HTB_MAXDEPTH 8
#define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */
struct tc_htb_opt {
struct tc_ratespec rate;
struct tc_ratespec ceil;
__u32 buffer;
__u32 cbuffer;
__u32 quantum;
__u32 level; /* out only */
__u32 prio;
};
struct tc_htb_glob {
__u32 version; /* to match HTB/TC */
__u32 rate2quantum; /* bps->quantum divisor */
__u32 defcls; /* default class number */
__u32 debug; /* debug flags */
/* stats */
__u32 direct_pkts; /* count of non shaped packets */
};
enum {
TCA_HTB_UNSPEC,
TCA_HTB_PARMS,
TCA_HTB_INIT,
TCA_HTB_CTAB,
TCA_HTB_RTAB,
TCA_HTB_DIRECT_QLEN,
TCA_HTB_RATE64,
TCA_HTB_CEIL64,
TCA_HTB_PAD,
__TCA_HTB_MAX,
};
#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
struct tc_htb_xstats {
__u32 lends;
__u32 borrows;
__u32 giants; /* too big packets (rate will not be accurate) */
__u32 tokens;
__u32 ctokens;
};
/* HFSC section */
struct tc_hfsc_qopt {
__u16 defcls; /* default class */
};
struct tc_service_curve {
__u32 m1; /* slope of the first segment in bps */
__u32 d; /* x-projection of the first segment in us */
__u32 m2; /* slope of the second segment in bps */
};
struct tc_hfsc_stats {
__u64 work; /* total work done */
__u64 rtwork; /* work done by real-time criteria */
__u32 period; /* current period */
__u32 level; /* class level in hierarchy */
};
enum {
TCA_HFSC_UNSPEC,
TCA_HFSC_RSC,
TCA_HFSC_FSC,
TCA_HFSC_USC,
__TCA_HFSC_MAX,
};
#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
/* CBQ section */
#define TC_CBQ_MAXPRIO 8
#define TC_CBQ_MAXLEVEL 8
#define TC_CBQ_DEF_EWMA 5
struct tc_cbq_lssopt {
unsigned char change;
unsigned char flags;
#define TCF_CBQ_LSS_BOUNDED 1
#define TCF_CBQ_LSS_ISOLATED 2
unsigned char ewma_log;
unsigned char level;
#define TCF_CBQ_LSS_FLAGS 1
#define TCF_CBQ_LSS_EWMA 2
#define TCF_CBQ_LSS_MAXIDLE 4
#define TCF_CBQ_LSS_MINIDLE 8
#define TCF_CBQ_LSS_OFFTIME 0x10
#define TCF_CBQ_LSS_AVPKT 0x20
__u32 maxidle;
__u32 minidle;
__u32 offtime;
__u32 avpkt;
};
struct tc_cbq_wrropt {
unsigned char flags;
unsigned char priority;
unsigned char cpriority;
unsigned char __reserved;
__u32 allot;
__u32 weight;
};
struct tc_cbq_ovl {
unsigned char strategy;
#define TC_CBQ_OVL_CLASSIC 0
#define TC_CBQ_OVL_DELAY 1
#define TC_CBQ_OVL_LOWPRIO 2
#define TC_CBQ_OVL_DROP 3
#define TC_CBQ_OVL_RCLASSIC 4
unsigned char priority2;
__u16 pad;
__u32 penalty;
};
struct tc_cbq_police {
unsigned char police;
unsigned char __res1;
unsigned short __res2;
};
struct tc_cbq_fopt {
__u32 split;
__u32 defmap;
__u32 defchange;
};
struct tc_cbq_xstats {
__u32 borrows;
__u32 overactions;
__s32 avgidle;
__s32 undertime;
};
enum {
TCA_CBQ_UNSPEC,
TCA_CBQ_LSSOPT,
TCA_CBQ_WRROPT,
TCA_CBQ_FOPT,
TCA_CBQ_OVL_STRATEGY,
TCA_CBQ_RATE,
TCA_CBQ_RTAB,
TCA_CBQ_POLICE,
__TCA_CBQ_MAX,
};
#define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1)
/* dsmark section */
enum {
TCA_DSMARK_UNSPEC,
TCA_DSMARK_INDICES,
TCA_DSMARK_DEFAULT_INDEX,
TCA_DSMARK_SET_TC_INDEX,
TCA_DSMARK_MASK,
TCA_DSMARK_VALUE,
__TCA_DSMARK_MAX,
};
#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
/* ATM section */
enum {
TCA_ATM_UNSPEC,
TCA_ATM_FD, /* file/socket descriptor */
TCA_ATM_PTR, /* pointer to descriptor - later */
TCA_ATM_HDR, /* LL header */
TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */
TCA_ATM_ADDR, /* PVC address (for output only) */
TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */
__TCA_ATM_MAX,
};
#define TCA_ATM_MAX (__TCA_ATM_MAX - 1)
/* Network emulator */
enum {
TCA_NETEM_UNSPEC,
TCA_NETEM_CORR,
TCA_NETEM_DELAY_DIST,
TCA_NETEM_REORDER,
TCA_NETEM_CORRUPT,
TCA_NETEM_LOSS,
TCA_NETEM_RATE,
TCA_NETEM_ECN,
TCA_NETEM_RATE64,
TCA_NETEM_PAD,
TCA_NETEM_LATENCY64,
TCA_NETEM_JITTER64,
TCA_NETEM_SLOT,
TCA_NETEM_SLOT_DIST,
__TCA_NETEM_MAX,
};
#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
struct tc_netem_qopt {
__u32 latency; /* added delay (us) */
__u32 limit; /* fifo limit (packets) */
__u32 loss; /* random packet loss (0=none ~0=100%) */
__u32 gap; /* re-ordering gap (0 for none) */
__u32 duplicate; /* random packet dup (0=none ~0=100%) */
__u32 jitter; /* random jitter in latency (us) */
};
struct tc_netem_corr {
__u32 delay_corr; /* delay correlation */
__u32 loss_corr; /* packet loss correlation */
__u32 dup_corr; /* duplicate correlation */
};
struct tc_netem_reorder {
__u32 probability;
__u32 correlation;
};
struct tc_netem_corrupt {
__u32 probability;
__u32 correlation;
};
struct tc_netem_rate {
__u32 rate; /* byte/s */
__s32 packet_overhead;
__u32 cell_size;
__s32 cell_overhead;
};
struct tc_netem_slot {
__s64 min_delay; /* nsec */
__s64 max_delay;
__s32 max_packets;
__s32 max_bytes;
__s64 dist_delay; /* nsec */
__s64 dist_jitter; /* nsec */
};
enum {
NETEM_LOSS_UNSPEC,
NETEM_LOSS_GI, /* General Intuitive - 4 state model */
NETEM_LOSS_GE, /* Gilbert Elliot models */
__NETEM_LOSS_MAX
};
#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
/* State transition probabilities for 4 state model */
struct tc_netem_gimodel {
__u32 p13;
__u32 p31;
__u32 p32;
__u32 p14;
__u32 p23;
};
/* Gilbert-Elliot models */
struct tc_netem_gemodel {
__u32 p;
__u32 r;
__u32 h;
__u32 k1;
};
#define NETEM_DIST_SCALE 8192
#define NETEM_DIST_MAX 16384
/* DRR */
enum {
TCA_DRR_UNSPEC,
TCA_DRR_QUANTUM,
__TCA_DRR_MAX
};
#define TCA_DRR_MAX (__TCA_DRR_MAX - 1)
struct tc_drr_stats {
__u32 deficit;
};
/* MQPRIO */
#define TC_QOPT_BITMASK 15
#define TC_QOPT_MAX_QUEUE 16
enum {
TC_MQPRIO_HW_OFFLOAD_NONE, /* no offload requested */
TC_MQPRIO_HW_OFFLOAD_TCS, /* offload TCs, no queue counts */
__TC_MQPRIO_HW_OFFLOAD_MAX
};
#define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1)
enum {
TC_MQPRIO_MODE_DCB,
TC_MQPRIO_MODE_CHANNEL,
__TC_MQPRIO_MODE_MAX
};
#define __TC_MQPRIO_MODE_MAX (__TC_MQPRIO_MODE_MAX - 1)
enum {
TC_MQPRIO_SHAPER_DCB,
TC_MQPRIO_SHAPER_BW_RATE, /* Add new shapers below */
__TC_MQPRIO_SHAPER_MAX
};
#define __TC_MQPRIO_SHAPER_MAX (__TC_MQPRIO_SHAPER_MAX - 1)
struct tc_mqprio_qopt {
__u8 num_tc;
__u8 prio_tc_map[TC_QOPT_BITMASK + 1];
__u8 hw;
__u16 count[TC_QOPT_MAX_QUEUE];
__u16 offset[TC_QOPT_MAX_QUEUE];
};
#define TC_MQPRIO_F_MODE 0x1
#define TC_MQPRIO_F_SHAPER 0x2
#define TC_MQPRIO_F_MIN_RATE 0x4
#define TC_MQPRIO_F_MAX_RATE 0x8
enum {
TCA_MQPRIO_UNSPEC,
TCA_MQPRIO_MODE,
TCA_MQPRIO_SHAPER,
TCA_MQPRIO_MIN_RATE64,
TCA_MQPRIO_MAX_RATE64,
__TCA_MQPRIO_MAX,
};
#define TCA_MQPRIO_MAX (__TCA_MQPRIO_MAX - 1)
/* SFB */
enum {
TCA_SFB_UNSPEC,
TCA_SFB_PARMS,
__TCA_SFB_MAX,
};
#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
/*
* Note: increment, decrement are Q0.16 fixed-point values.
*/
struct tc_sfb_qopt {
__u32 rehash_interval; /* delay between hash move, in ms */
__u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */
__u32 max; /* max len of qlen_min */
__u32 bin_size; /* maximum queue length per bin */
__u32 increment; /* probability increment, (d1 in Blue) */
__u32 decrement; /* probability decrement, (d2 in Blue) */
__u32 limit; /* max SFB queue length */
__u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */
__u32 penalty_burst;
};
struct tc_sfb_xstats {
__u32 earlydrop;
__u32 penaltydrop;
__u32 bucketdrop;
__u32 queuedrop;
__u32 childdrop; /* drops in child qdisc */
__u32 marked;
__u32 maxqlen;
__u32 maxprob;
__u32 avgprob;
};
#define SFB_MAX_PROB 0xFFFF
/* QFQ */
enum {
TCA_QFQ_UNSPEC,
TCA_QFQ_WEIGHT,
TCA_QFQ_LMAX,
__TCA_QFQ_MAX
};
#define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1)
struct tc_qfq_stats {
__u32 weight;
__u32 lmax;
};
/* CODEL */
enum {
TCA_CODEL_UNSPEC,
TCA_CODEL_TARGET,
TCA_CODEL_LIMIT,
TCA_CODEL_INTERVAL,
TCA_CODEL_ECN,
TCA_CODEL_CE_THRESHOLD,
__TCA_CODEL_MAX
};
#define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1)
struct tc_codel_xstats {
__u32 maxpacket; /* largest packet we've seen so far */
__u32 count; /* how many drops we've done since the last time we
* entered dropping state
*/
__u32 lastcount; /* count at entry to dropping state */
__u32 ldelay; /* in-queue delay seen by most recently dequeued packet */
__s32 drop_next; /* time to drop next packet */
__u32 drop_overlimit; /* number of time max qdisc packet limit was hit */
__u32 ecn_mark; /* number of packets we ECN marked instead of dropped */
__u32 dropping; /* are we in dropping state ? */
__u32 ce_mark; /* number of CE marked packets because of ce_threshold */
};
/* FQ_CODEL */
#define FQ_CODEL_QUANTUM_MAX (1 << 20)
enum {
TCA_FQ_CODEL_UNSPEC,
TCA_FQ_CODEL_TARGET,
TCA_FQ_CODEL_LIMIT,
TCA_FQ_CODEL_INTERVAL,
TCA_FQ_CODEL_ECN,
TCA_FQ_CODEL_FLOWS,
TCA_FQ_CODEL_QUANTUM,
TCA_FQ_CODEL_CE_THRESHOLD,
TCA_FQ_CODEL_DROP_BATCH_SIZE,
TCA_FQ_CODEL_MEMORY_LIMIT,
__TCA_FQ_CODEL_MAX
};
#define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1)
enum {
TCA_FQ_CODEL_XSTATS_QDISC,
TCA_FQ_CODEL_XSTATS_CLASS,
};
struct tc_fq_codel_qd_stats {
__u32 maxpacket; /* largest packet we've seen so far */
__u32 drop_overlimit; /* number of time max qdisc
* packet limit was hit
*/
__u32 ecn_mark; /* number of packets we ECN marked
* instead of being dropped
*/
__u32 new_flow_count; /* number of time packets
* created a 'new flow'
*/
__u32 new_flows_len; /* count of flows in new list */
__u32 old_flows_len; /* count of flows in old list */
__u32 ce_mark; /* packets above ce_threshold */
__u32 memory_usage; /* in bytes */
__u32 drop_overmemory;
};
struct tc_fq_codel_cl_stats {
__s32 deficit;
__u32 ldelay; /* in-queue delay seen by most recently
* dequeued packet
*/
__u32 count;
__u32 lastcount;
__u32 dropping;
__s32 drop_next;
};
struct tc_fq_codel_xstats {
__u32 type;
union {
struct tc_fq_codel_qd_stats qdisc_stats;
struct tc_fq_codel_cl_stats class_stats;
};
};
/* FQ */
enum {
TCA_FQ_UNSPEC,
TCA_FQ_PLIMIT, /* limit of total number of packets in queue */
TCA_FQ_FLOW_PLIMIT, /* limit of packets per flow */
TCA_FQ_QUANTUM, /* RR quantum */
TCA_FQ_INITIAL_QUANTUM, /* RR quantum for new flow */
TCA_FQ_RATE_ENABLE, /* enable/disable rate limiting */
TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
TCA_FQ_FLOW_MAX_RATE, /* per flow max rate */
TCA_FQ_BUCKETS_LOG, /* log2(number of buckets) */
TCA_FQ_FLOW_REFILL_DELAY, /* flow credit refill delay in usec */
TCA_FQ_ORPHAN_MASK, /* mask applied to orphaned skb hashes */
TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */
__TCA_FQ_MAX
};
#define TCA_FQ_MAX (__TCA_FQ_MAX - 1)
struct tc_fq_qd_stats {
__u64 gc_flows;
__u64 highprio_packets;
__u64 tcp_retrans;
__u64 throttled;
__u64 flows_plimit;
__u64 pkts_too_long;
__u64 allocation_errors;
__s64 time_next_delayed_flow;
__u32 flows;
__u32 inactive_flows;
__u32 throttled_flows;
__u32 unthrottle_latency_ns;
};
/* Heavy-Hitter Filter */
enum {
TCA_HHF_UNSPEC,
TCA_HHF_BACKLOG_LIMIT,
TCA_HHF_QUANTUM,
TCA_HHF_HH_FLOWS_LIMIT,
TCA_HHF_RESET_TIMEOUT,
TCA_HHF_ADMIT_BYTES,
TCA_HHF_EVICT_TIMEOUT,
TCA_HHF_NON_HH_WEIGHT,
__TCA_HHF_MAX
};
#define TCA_HHF_MAX (__TCA_HHF_MAX - 1)
struct tc_hhf_xstats {
__u32 drop_overlimit; /* number of times max qdisc packet limit
* was hit
*/
__u32 hh_overlimit; /* number of times max heavy-hitters was hit */
__u32 hh_tot_count; /* number of captured heavy-hitters so far */
__u32 hh_cur_count; /* number of current heavy-hitters */
};
/* PIE */
enum {
TCA_PIE_UNSPEC,
TCA_PIE_TARGET,
TCA_PIE_LIMIT,
TCA_PIE_TUPDATE,
TCA_PIE_ALPHA,
TCA_PIE_BETA,
TCA_PIE_ECN,
TCA_PIE_BYTEMODE,
__TCA_PIE_MAX
};
#define TCA_PIE_MAX (__TCA_PIE_MAX - 1)
struct tc_pie_xstats {
__u32 prob; /* current probability */
__u32 delay; /* current delay in ms */
__u32 avg_dq_rate; /* current average dq_rate in bits/pie_time */
__u32 packets_in; /* total number of packets enqueued */
__u32 dropped; /* packets dropped due to pie_action */
__u32 overlimit; /* dropped due to lack of space in queue */
__u32 maxq; /* maximum queue size */
__u32 ecn_mark; /* packets marked with ecn*/
};
/* CBS */
struct tc_cbs_qopt {
__u8 offload;
__u8 _pad[3];
__s32 hicredit;
__s32 locredit;
__s32 idleslope;
__s32 sendslope;
};
enum {
TCA_CBS_UNSPEC,
TCA_CBS_PARMS,
__TCA_CBS_MAX,
};
#define TCA_CBS_MAX (__TCA_CBS_MAX - 1)
/* ETF */
struct tc_etf_qopt {
__s32 delta;
__s32 clockid;
__u32 flags;
#define TC_ETF_DEADLINE_MODE_ON BIT(0)
#define TC_ETF_OFFLOAD_ON BIT(1)
};
enum {
TCA_ETF_UNSPEC,
TCA_ETF_PARMS,
__TCA_ETF_MAX,
};
#define TCA_ETF_MAX (__TCA_ETF_MAX - 1)
/* CAKE */
enum {
TCA_CAKE_UNSPEC,
TCA_CAKE_PAD,
TCA_CAKE_BASE_RATE64,
TCA_CAKE_DIFFSERV_MODE,
TCA_CAKE_ATM,
TCA_CAKE_FLOW_MODE,
TCA_CAKE_OVERHEAD,
TCA_CAKE_RTT,
TCA_CAKE_TARGET,
TCA_CAKE_AUTORATE,
TCA_CAKE_MEMORY,
TCA_CAKE_NAT,
TCA_CAKE_RAW,
TCA_CAKE_WASH,
TCA_CAKE_MPU,
TCA_CAKE_INGRESS,
TCA_CAKE_ACK_FILTER,
TCA_CAKE_SPLIT_GSO,
__TCA_CAKE_MAX
};
#define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1)
enum {
__TCA_CAKE_STATS_INVALID,
TCA_CAKE_STATS_PAD,
TCA_CAKE_STATS_CAPACITY_ESTIMATE64,
TCA_CAKE_STATS_MEMORY_LIMIT,
TCA_CAKE_STATS_MEMORY_USED,
TCA_CAKE_STATS_AVG_NETOFF,
TCA_CAKE_STATS_MIN_NETLEN,
TCA_CAKE_STATS_MAX_NETLEN,
TCA_CAKE_STATS_MIN_ADJLEN,
TCA_CAKE_STATS_MAX_ADJLEN,
TCA_CAKE_STATS_TIN_STATS,
TCA_CAKE_STATS_DEFICIT,
TCA_CAKE_STATS_COBALT_COUNT,
TCA_CAKE_STATS_DROPPING,
TCA_CAKE_STATS_DROP_NEXT_US,
TCA_CAKE_STATS_P_DROP,
TCA_CAKE_STATS_BLUE_TIMER_US,
__TCA_CAKE_STATS_MAX
};
#define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1)
enum {
__TCA_CAKE_TIN_STATS_INVALID,
TCA_CAKE_TIN_STATS_PAD,
TCA_CAKE_TIN_STATS_SENT_PACKETS,
TCA_CAKE_TIN_STATS_SENT_BYTES64,
TCA_CAKE_TIN_STATS_DROPPED_PACKETS,
TCA_CAKE_TIN_STATS_DROPPED_BYTES64,
TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS,
TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64,
TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS,
TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64,
TCA_CAKE_TIN_STATS_BACKLOG_PACKETS,
TCA_CAKE_TIN_STATS_BACKLOG_BYTES,
TCA_CAKE_TIN_STATS_THRESHOLD_RATE64,
TCA_CAKE_TIN_STATS_TARGET_US,
TCA_CAKE_TIN_STATS_INTERVAL_US,
TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS,
TCA_CAKE_TIN_STATS_WAY_MISSES,
TCA_CAKE_TIN_STATS_WAY_COLLISIONS,
TCA_CAKE_TIN_STATS_PEAK_DELAY_US,
TCA_CAKE_TIN_STATS_AVG_DELAY_US,
TCA_CAKE_TIN_STATS_BASE_DELAY_US,
TCA_CAKE_TIN_STATS_SPARSE_FLOWS,
TCA_CAKE_TIN_STATS_BULK_FLOWS,
TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS,
TCA_CAKE_TIN_STATS_MAX_SKBLEN,
TCA_CAKE_TIN_STATS_FLOW_QUANTUM,
__TCA_CAKE_TIN_STATS_MAX
};
#define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1)
#define TC_CAKE_MAX_TINS (8)
enum {
CAKE_FLOW_NONE = 0,
CAKE_FLOW_SRC_IP,
CAKE_FLOW_DST_IP,
CAKE_FLOW_HOSTS, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_DST_IP */
CAKE_FLOW_FLOWS,
CAKE_FLOW_DUAL_SRC, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_FLOWS */
CAKE_FLOW_DUAL_DST, /* = CAKE_FLOW_DST_IP | CAKE_FLOW_FLOWS */
CAKE_FLOW_TRIPLE, /* = CAKE_FLOW_HOSTS | CAKE_FLOW_FLOWS */
CAKE_FLOW_MAX,
};
enum {
CAKE_DIFFSERV_DIFFSERV3 = 0,
CAKE_DIFFSERV_DIFFSERV4,
CAKE_DIFFSERV_DIFFSERV8,
CAKE_DIFFSERV_BESTEFFORT,
CAKE_DIFFSERV_PRECEDENCE,
CAKE_DIFFSERV_MAX
};
enum {
CAKE_ACK_NONE = 0,
CAKE_ACK_FILTER,
CAKE_ACK_AGGRESSIVE,
CAKE_ACK_MAX
};
enum {
CAKE_ATM_NONE = 0,
CAKE_ATM_ATM,
CAKE_ATM_PTM,
CAKE_ATM_MAX
};
#endif