History

Merge tag 'nand/for-7.2' into mtd/next

* Extend SPI NAND continuous read to Winbond devices, which requires numerous changes in the spi-{mem,nand} layers such as the need for a secondary read operation template. * Continuous reads in general have also been enhanced/fixed for avoiding potential issues at probe time and at block boundaries. Plus, there is the usual load of misc fixes and improvements.

Miquel Raynal committed 4 months ago

Commit 49420df2 parents c10f641 4f2692a577 files · +8150 −5115Browse files

Showing the changes to include (24 of 577 files). Show all

Unified · Split

24 files
  1. include/acpi/acpi_bus.h +2 −0
  2. include/acpi/actbl1.h +6 −0
  3. include/drm/drm_fb_helper.h +6 −0
  4. include/linux/cdrom.h +1 −0
  5. include/linux/dma-buf.h +2 −2
  6. include/linux/dpll.h +1 −0
  7. include/linux/fsnotify_backend.h +1 −0
  8. include/linux/mailbox_client.h +1 −0
  9. include/linux/mailbox_controller.h +13 −4
  10. include/linux/maple_tree.h +1 −1
  11. include/linux/mm.h +1 −1
  12. include/linux/mroute_base.h +3 −0
  13. include/linux/mtd/nand-qpic-common.h +3 −1
  14. include/linux/mtd/spinand.h +30 −2
  15. include/linux/nvme-auth.h +3 −3
  16. include/linux/rculist.h +29 −0
  17. include/linux/rhashtable-types.h +5 −0
  18. include/linux/rhashtable.h +5 −3
  19. include/linux/spi/spi-mem.h +11 −1
  20. include/linux/tracepoint.h +1 −1
  21. include/net/bond_3ad.h +1 −1
  22. include/net/netfilter/nf_tables.h +13 −0
  23. include/net/netmem.h +15 −0
  24. include/uapi/linux/io_uring.h +2 −1
include/acpi/acpi_bus.h+2−0
@@ -17,6 +17,8 @@ · 16 unmodified lines
17#include <linux/property.h>17#include <linux/property.h>
18#include <linux/types.h>18#include <linux/types.h>
19 19
20struct notifier_block;
21
20struct acpi_handle_list {22struct acpi_handle_list {
21 u32 count;23 u32 count;
22 acpi_handle *handles;24 acpi_handle *handles;
include/acpi/actbl1.h+6−0
@@ -1386,6 +1386,12 @@ enum acpi_einj_command_status { · 1385 unmodified lines
1386#define ACPI_EINJ_CXL_MEM_FATAL (1<<17)1386#define ACPI_EINJ_CXL_MEM_FATAL (1<<17)
1387#define ACPI_EINJ_VENDOR_DEFINED (1<<31)1387#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
1388 1388
1389/* EINJV2 error types from EINJV2_GET_ERROR_TYPE (ACPI 6.6) */
1390
1391#define ACPI_EINJV2_PROCESSOR (1)
1392#define ACPI_EINJV2_MEMORY (1<<1)
1393#define ACPI_EINJV2_PCIE (1<<2)
1394
1389/*******************************************************************************1395/*******************************************************************************
1390 *1396 *
1391 * ERST - Error Record Serialization Table (ACPI 4.0)1397 * ERST - Error Record Serialization Table (ACPI 4.0)
include/drm/drm_fb_helper.h+6−0
@@ -273,6 +273,12 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper); · 272 unmodified lines
273int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper);273int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper);
274bool drm_fb_helper_gem_is_fb(const struct drm_fb_helper *fb_helper,274bool drm_fb_helper_gem_is_fb(const struct drm_fb_helper *fb_helper,
275 const struct drm_gem_object *obj);275 const struct drm_gem_object *obj);
276#else
277static inline bool drm_fb_helper_gem_is_fb(const struct drm_fb_helper *fb_helper,
278 const struct drm_gem_object *obj)
279{
280 return false;
281}
276#endif282#endif
277 283
278#endif284#endif
include/linux/cdrom.h+1−0
@@ -108,6 +108,7 @@ int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, · 107 unmodified lines
108extern unsigned int cdrom_check_events(struct cdrom_device_info *cdi,108extern unsigned int cdrom_check_events(struct cdrom_device_info *cdi,
109 unsigned int clearing);109 unsigned int clearing);
110 110
111extern void cdrom_probe_write_features(struct cdrom_device_info *cdi);
111extern int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi);112extern int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi);
112extern void unregister_cdrom(struct cdrom_device_info *cdi);113extern void unregister_cdrom(struct cdrom_device_info *cdi);
113 114
include/linux/dma-buf.h+2−2
@@ -322,13 +322,13 @@ struct dma_buf { · 321 unmodified lines
322 * @vmapping_counter:322 * @vmapping_counter:
323 *323 *
324 * Used internally to refcnt the vmaps returned by dma_buf_vmap().324 * Used internally to refcnt the vmaps returned by dma_buf_vmap().
325 * Protected by @lock.325 * Protected by @resv.
326 */326 */
327 unsigned vmapping_counter;327 unsigned vmapping_counter;
328 328
329 /**329 /**
330 * @vmap_ptr:330 * @vmap_ptr:
331 * The current vmap ptr if @vmapping_counter > 0. Protected by @lock.331 * The current vmap ptr if @vmapping_counter > 0. Protected by @resv.
332 */332 */
333 struct iosys_map vmap_ptr;333 struct iosys_map vmap_ptr;
334 334
include/linux/dpll.h+1−0
@@ -286,6 +286,7 @@ int dpll_pin_ref_sync_pair_add(struct dpll_pin *pin, · 285 unmodified lines
286 286
287int dpll_device_change_ntf(struct dpll_device *dpll);287int dpll_device_change_ntf(struct dpll_device *dpll);
288 288
289int __dpll_pin_change_ntf(struct dpll_pin *pin);
289int dpll_pin_change_ntf(struct dpll_pin *pin);290int dpll_pin_change_ntf(struct dpll_pin *pin);
290 291
291int register_dpll_notifier(struct notifier_block *nb);292int register_dpll_notifier(struct notifier_block *nb);
include/linux/fsnotify_backend.h+1−0
@@ -915,6 +915,7 @@ extern void fsnotify_clear_marks_by_group(struct fsnotify_group *group, · 914 unmodified lines
915 unsigned int obj_type);915 unsigned int obj_type);
916extern void fsnotify_get_mark(struct fsnotify_mark *mark);916extern void fsnotify_get_mark(struct fsnotify_mark *mark);
917extern void fsnotify_put_mark(struct fsnotify_mark *mark);917extern void fsnotify_put_mark(struct fsnotify_mark *mark);
918struct fsnotify_mark *fsnotify_next_mark(struct fsnotify_mark *mark);
918extern void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info);919extern void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info);
919extern bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info);920extern bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info);
920 921
include/linux/mailbox_client.h+1−0
@@ -45,6 +45,7 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg); · 44 unmodified lines
45int mbox_flush(struct mbox_chan *chan, unsigned long timeout);45int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
46void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */46void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
47bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */47bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
48unsigned int mbox_chan_tx_slots_available(struct mbox_chan *chan); /* atomic */
48void mbox_free_channel(struct mbox_chan *chan); /* may sleep */49void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
49 50
50#endif /* __MAILBOX_CLIENT_H */51#endif /* __MAILBOX_CLIENT_H */
include/linux/mailbox_controller.h+13−4
@@ -3,6 +3,7 @@ · 2 unmodified lines
3#ifndef __MAILBOX_CONTROLLER_H3#ifndef __MAILBOX_CONTROLLER_H
4#define __MAILBOX_CONTROLLER_H4#define __MAILBOX_CONTROLLER_H
5 5
6#include <linux/bits.h>
6#include <linux/completion.h>7#include <linux/completion.h>
7#include <linux/device.h>8#include <linux/device.h>
8#include <linux/hrtimer.h>9#include <linux/hrtimer.h>
@@ -11,6 +12,13 @@ · 2 unmodified lines
11 12
12struct mbox_chan;13struct mbox_chan;
13 14
15/* Sentinel value distinguishing "no active request" from "NULL message data" */
16#define MBOX_NO_MSG ((void *)-1)
17
18#define MBOX_TXDONE_BY_IRQ BIT(0) /* controller has remote RTR irq */
19#define MBOX_TXDONE_BY_POLL BIT(1) /* controller can read status of last TX */
20#define MBOX_TXDONE_BY_ACK BIT(2) /* S/W ACK received by Client ticks the TX */
21
14/**22/**
15 * struct mbox_chan_ops - methods to control mailbox channels23 * struct mbox_chan_ops - methods to control mailbox channels
16 * @send_data: The API asks the MBOX controller driver, in atomic24 * @send_data: The API asks the MBOX controller driver, in atomic
@@ -54,10 +62,10 @@ struct mbox_chan_ops { · 37 unmodified lines
54 62
55/**63/**
56 * struct mbox_controller - Controller of a class of communication channels64 * struct mbox_controller - Controller of a class of communication channels
57 * @dev: Device backing this controller65 * @dev: Device backing this controller. Required.
58 * @ops: Operators that work on each communication chan66 * @ops: Operators that work on each communication chan. Required.
59 * @chans: Array of channels67 * @chans: Array of channels. Required.
60 * @num_chans: Number of channels in the 'chans' array.68 * @num_chans: Number of channels in the 'chans' array. Required.
61 * @txdone_irq: Indicates if the controller can report to API when69 * @txdone_irq: Indicates if the controller can report to API when
62 * the last transmitted data was read by the remote.70 * the last transmitted data was read by the remote.
63 * Eg, if it has some TX ACK irq.71 * Eg, if it has some TX ACK irq.
@@ -70,6 +78,7 @@ struct mbox_chan_ops { · 6 unmodified lines
70 * @of_xlate: Controller driver specific mapping of channel via DT78 * @of_xlate: Controller driver specific mapping of channel via DT
71 * @poll_hrt: API private. hrtimer used to poll for TXDONE on all79 * @poll_hrt: API private. hrtimer used to poll for TXDONE on all
72 * channels.80 * channels.
81 * @poll_hrt_lock: API private. Lock protecting access to poll_hrt.
73 * @node: API private. To hook into list of controllers.82 * @node: API private. To hook into list of controllers.
74 */83 */
75struct mbox_controller {84struct mbox_controller {
include/linux/maple_tree.h+1−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
4/*4/*
5 * Maple Tree - An RCU-safe adaptive tree for storing ranges5 * Maple Tree - An RCU-safe adaptive tree for storing ranges
6 * Copyright (c) 2018-2022 Oracle6 * Copyright (c) 2018-2022 Oracle
7 * Authors: Liam R. Howlett <Liam.Howlett@Oracle.com>7 * Authors: Liam R. Howlett <liam@infradead.org>
8 * Matthew Wilcox <willy@infradead.org>8 * Matthew Wilcox <willy@infradead.org>
9 */9 */
10 10
include/linux/mm.h+1−1
@@ -4391,7 +4391,7 @@ static inline void mmap_action_map_kernel_pages_full(struct vm_area_desc *desc, · 4390 unmodified lines
4391 4391
4392int mmap_action_prepare(struct vm_area_desc *desc);4392int mmap_action_prepare(struct vm_area_desc *desc);
4393int mmap_action_complete(struct vm_area_struct *vma,4393int mmap_action_complete(struct vm_area_struct *vma,
4394 struct mmap_action *action);4394 struct mmap_action *action, bool is_compat);
4395 4395
4396/* Look up the first VMA which exactly match the interval vm_start ... vm_end */4396/* Look up the first VMA which exactly match the interval vm_start ... vm_end */
4397static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,4397static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
include/linux/mroute_base.h+3−0
@@ -226,6 +226,7 @@ struct mr_table_ops { · 225 unmodified lines
226 226
227/**227/**
228 * struct mr_table - a multicast routing table228 * struct mr_table - a multicast routing table
229 * @work: used for table destruction
229 * @list: entry within a list of multicast routing tables230 * @list: entry within a list of multicast routing tables
230 * @net: net where this table belongs231 * @net: net where this table belongs
231 * @ops: protocol specific operations232 * @ops: protocol specific operations
@@ -243,6 +244,7 @@ struct mr_table_ops { · 11 unmodified lines
243 * @mroute_reg_vif_num: PIM-device vif index244 * @mroute_reg_vif_num: PIM-device vif index
244 */245 */
245struct mr_table {246struct mr_table {
247 struct rcu_work work;
246 struct list_head list;248 struct list_head list;
247 possible_net_t net;249 possible_net_t net;
248 struct mr_table_ops ops;250 struct mr_table_ops ops;
@@ -274,6 +276,7 @@ void vif_device_init(struct vif_device *v, · 25 unmodified lines
274 unsigned short flags,276 unsigned short flags,
275 unsigned short get_iflink_mask);277 unsigned short get_iflink_mask);
276 278
279void mr_table_free(struct mr_table *mrt);
277struct mr_table *280struct mr_table *
278mr_table_alloc(struct net *net, u32 id,281mr_table_alloc(struct net *net, u32 id,
279 struct mr_table_ops *ops,282 struct mr_table_ops *ops,
include/linux/mtd/nand-qpic-common.h+3−1
@@ -9,6 +9,8 @@ · 8 unmodified lines
9#ifndef __MTD_NAND_QPIC_COMMON_H__9#ifndef __MTD_NAND_QPIC_COMMON_H__
10#define __MTD_NAND_QPIC_COMMON_H__10#define __MTD_NAND_QPIC_COMMON_H__
11 11
12#include <linux/mtd/rawnand.h>
13
12/* NANDc reg offsets */14/* NANDc reg offsets */
13#define NAND_FLASH_CMD 0x0015#define NAND_FLASH_CMD 0x00
14#define NAND_ADDR0 0x0416#define NAND_ADDR0 0x04
@@ -394,7 +396,7 @@ struct qcom_nand_controller { · 379 unmodified lines
394 396
395 const struct qcom_nandc_props *props;397 const struct qcom_nandc_props *props;
396 398
397 struct nand_controller *controller;399 struct nand_controller controller;
398 struct qpic_spi_nand *qspi;400 struct qpic_spi_nand *qspi;
399 struct list_head host_list;401 struct list_head host_list;
400 402
include/linux/mtd/spinand.h+30−2
@@ -290,6 +290,12 @@ · 289 unmodified lines
290 SPI_MEM_OP_NO_DUMMY, \290 SPI_MEM_OP_NO_DUMMY, \
291 SPI_MEM_OP_NO_DATA)291 SPI_MEM_OP_NO_DATA)
292 292
293#define SPINAND_PAGE_READ_PACKED_8D_8D_0_OP(addr) \
294 SPI_MEM_OP(SPI_MEM_DTR_OP_PACKED_CMD(0x13, addr >> 16, 8), \
295 SPI_MEM_DTR_OP_ADDR(2, addr & 0xffff, 8), \
296 SPI_MEM_OP_NO_DUMMY, \
297 SPI_MEM_OP_NO_DATA)
298
293#define SPINAND_PAGE_READ_FROM_CACHE_8D_8D_8D_OP(addr, ndummy, buf, len, freq) \299#define SPINAND_PAGE_READ_FROM_CACHE_8D_8D_8D_OP(addr, ndummy, buf, len, freq) \
294 SPI_MEM_OP(SPI_MEM_DTR_OP_RPT_CMD(0x9d, 8), \300 SPI_MEM_OP(SPI_MEM_DTR_OP_RPT_CMD(0x9d, 8), \
295 SPI_MEM_DTR_OP_ADDR(2, addr, 8), \301 SPI_MEM_DTR_OP_ADDR(2, addr, 8), \
@@ -483,6 +489,7 @@ struct spinand_ecc_info { · 187 unmodified lines
483#define SPINAND_HAS_PROG_PLANE_SELECT_BIT BIT(2)489#define SPINAND_HAS_PROG_PLANE_SELECT_BIT BIT(2)
484#define SPINAND_HAS_READ_PLANE_SELECT_BIT BIT(3)490#define SPINAND_HAS_READ_PLANE_SELECT_BIT BIT(3)
485#define SPINAND_NO_RAW_ACCESS BIT(4)491#define SPINAND_NO_RAW_ACCESS BIT(4)
492#define SPINAND_ODTR_PACKED_PAGE_READ BIT(5)
486 493
487/**494/**
488 * struct spinand_ondie_ecc_conf - private SPI-NAND on-die ECC engine structure495 * struct spinand_ondie_ecc_conf - private SPI-NAND on-die ECC engine structure
@@ -576,6 +583,7 @@ enum spinand_bus_interface { · 87 unmodified lines
576 * @op_variants.read_cache: variants of the read-cache operation583 * @op_variants.read_cache: variants of the read-cache operation
577 * @op_variants.write_cache: variants of the write-cache operation584 * @op_variants.write_cache: variants of the write-cache operation
578 * @op_variants.update_cache: variants of the update-cache operation585 * @op_variants.update_cache: variants of the update-cache operation
586 * @op_variants.cont_read_cache: variants of the continuous read-cache operation
579 * @vendor_ops: vendor specific operations587 * @vendor_ops: vendor specific operations
580 * @select_target: function used to select a target/die. Required only for588 * @select_target: function used to select a target/die. Required only for
581 * multi-die chips589 * multi-die chips
@@ -585,6 +593,7 @@ enum spinand_bus_interface { · 3 unmodified lines
585 * @user_otp: SPI NAND user OTP info.593 * @user_otp: SPI NAND user OTP info.
586 * @read_retries: the number of read retry modes supported594 * @read_retries: the number of read retry modes supported
587 * @set_read_retry: enable/disable read retry for data recovery595 * @set_read_retry: enable/disable read retry for data recovery
596 * @set_randomizer: enable/disable randomizer support
588 *597 *
589 * Each SPI NAND manufacturer driver should have a spinand_info table598 * Each SPI NAND manufacturer driver should have a spinand_info table
590 * describing all the chips supported by the driver.599 * describing all the chips supported by the driver.
@@ -600,6 +609,7 @@ struct spinand_info { · 9 unmodified lines
600 const struct spinand_op_variants *read_cache;609 const struct spinand_op_variants *read_cache;
601 const struct spinand_op_variants *write_cache;610 const struct spinand_op_variants *write_cache;
602 const struct spinand_op_variants *update_cache;611 const struct spinand_op_variants *update_cache;
612 const struct spinand_op_variants *cont_read_cache;
603 } op_variants;613 } op_variants;
604 const struct spinand_op_variants *vendor_ops;614 const struct spinand_op_variants *vendor_ops;
605 int (*select_target)(struct spinand_device *spinand,615 int (*select_target)(struct spinand_device *spinand,
@@ -613,6 +623,8 @@ struct spinand_info { · 7 unmodified lines
613 unsigned int read_retries;623 unsigned int read_retries;
614 int (*set_read_retry)(struct spinand_device *spinand,624 int (*set_read_retry)(struct spinand_device *spinand,
615 unsigned int read_retry);625 unsigned int read_retry);
626 int (*set_randomizer)(struct spinand_device *spinand,
627 bool enable);
616};628};
617 629
618#define SPINAND_ID(__method, ...) \630#define SPINAND_ID(__method, ...) \
@@ -629,6 +641,14 @@ struct spinand_info { · 10 unmodified lines
629 .update_cache = __update, \641 .update_cache = __update, \
630 }642 }
631 643
644#define SPINAND_INFO_OP_VARIANTS_WITH_CONT(__read, __write, __update, __cont_read) \
645 { \
646 .read_cache = __read, \
647 .write_cache = __write, \
648 .update_cache = __update, \
649 .cont_read_cache = __cont_read, \
650 }
651
632#define SPINAND_INFO_VENDOR_OPS(__ops) \652#define SPINAND_INFO_VENDOR_OPS(__ops) \
633 .vendor_ops = __ops653 .vendor_ops = __ops
634 654
@@ -669,6 +689,9 @@ struct spinand_info { · 34 unmodified lines
669 .read_retries = __read_retries, \689 .read_retries = __read_retries, \
670 .set_read_retry = __set_read_retry690 .set_read_retry = __set_read_retry
671 691
692#define SPINAND_RANDOMIZER(__set_randomizer) \
693 .set_randomizer = __set_randomizer
694
672#define SPINAND_INFO(__model, __id, __memorg, __eccreq, __op_variants, \695#define SPINAND_INFO(__model, __id, __memorg, __eccreq, __op_variants, \
673 __flags, ...) \696 __flags, ...) \
674 { \697 { \
@@ -684,8 +707,6 @@ struct spinand_info { · 9 unmodified lines
684struct spinand_dirmap {707struct spinand_dirmap {
685 struct spi_mem_dirmap_desc *wdesc;708 struct spi_mem_dirmap_desc *wdesc;
686 struct spi_mem_dirmap_desc *rdesc;709 struct spi_mem_dirmap_desc *rdesc;
687 struct spi_mem_dirmap_desc *wdesc_ecc;
688 struct spi_mem_dirmap_desc *rdesc_ecc;
689};710};
690 711
691/**712/**
@@ -702,6 +723,7 @@ struct spinand_dirmap { · 10 unmodified lines
702 * @read_cache: read cache op template723 * @read_cache: read cache op template
703 * @write_cache: write cache op template724 * @write_cache: write cache op template
704 * @update_cache: update cache op template725 * @update_cache: update cache op template
726 * @cont_read_cache: continuous read cache op template (optional)
705 */727 */
706struct spinand_mem_ops {728struct spinand_mem_ops {
707 struct spi_mem_op reset;729 struct spi_mem_op reset;
@@ -716,6 +738,7 @@ struct spinand_mem_ops { · 8 unmodified lines
716 const struct spi_mem_op *read_cache;738 const struct spi_mem_op *read_cache;
717 const struct spi_mem_op *write_cache;739 const struct spi_mem_op *write_cache;
718 const struct spi_mem_op *update_cache;740 const struct spi_mem_op *update_cache;
741 const struct spi_mem_op *cont_read_cache;
719};742};
720 743
721/**744/**
@@ -754,6 +777,7 @@ struct spinand_mem_ops { · 32 unmodified lines
754 * @user_otp: SPI NAND user OTP info.777 * @user_otp: SPI NAND user OTP info.
755 * @read_retries: the number of read retry modes supported778 * @read_retries: the number of read retry modes supported
756 * @set_read_retry: Enable/disable the read retry feature779 * @set_read_retry: Enable/disable the read retry feature
780 * @set_randomizer: Enable/disable the randomizer feature
757 */781 */
758struct spinand_device {782struct spinand_device {
759 struct nand_device base;783 struct nand_device base;
@@ -787,6 +811,8 @@ struct spinand_device { · 27 unmodified lines
787 bool cont_read_possible;811 bool cont_read_possible;
788 int (*set_cont_read)(struct spinand_device *spinand,812 int (*set_cont_read)(struct spinand_device *spinand,
789 bool enable);813 bool enable);
814 int (*set_randomizer)(struct spinand_device *spinand,
815 bool enable);
790 816
791 const struct spinand_fact_otp *fact_otp;817 const struct spinand_fact_otp *fact_otp;
792 const struct spinand_user_otp *user_otp;818 const struct spinand_user_otp *user_otp;
@@ -862,6 +888,8 @@ static inline void spinand_set_of_node(struct spinand_device *spinand, · 69 unmodified lines
862 nanddev_set_of_node(&spinand->base, np);888 nanddev_set_of_node(&spinand->base, np);
863}889}
864 890
891bool spinand_op_is_odtr(const struct spi_mem_op *op);
892
865int spinand_match_and_init(struct spinand_device *spinand,893int spinand_match_and_init(struct spinand_device *spinand,
866 const struct spinand_info *table,894 const struct spinand_info *table,
867 unsigned int table_size,895 unsigned int table_size,
include/linux/nvme-auth.h+3−3
@@ -49,9 +49,9 @@ int nvme_auth_augmented_challenge(u8 hmac_id, const u8 *skey, size_t skey_len, · 48 unmodified lines
49int nvme_auth_gen_privkey(struct crypto_kpp *dh_tfm, u8 dh_gid);49int nvme_auth_gen_privkey(struct crypto_kpp *dh_tfm, u8 dh_gid);
50int nvme_auth_gen_pubkey(struct crypto_kpp *dh_tfm,50int nvme_auth_gen_pubkey(struct crypto_kpp *dh_tfm,
51 u8 *host_key, size_t host_key_len);51 u8 *host_key, size_t host_key_len);
52int nvme_auth_gen_shared_secret(struct crypto_kpp *dh_tfm,52int nvme_auth_gen_session_key(struct crypto_kpp *dh_tfm,
53 const u8 *ctrl_key, size_t ctrl_key_len,53 const u8 *public_key, size_t public_key_len,
54 u8 *sess_key, size_t sess_key_len);54 u8 *sess_key, size_t sess_key_len, u8 hash_id);
55int nvme_auth_generate_psk(u8 hmac_id, const u8 *skey, size_t skey_len,55int nvme_auth_generate_psk(u8 hmac_id, const u8 *skey, size_t skey_len,
56 const u8 *c1, const u8 *c2, size_t hash_len,56 const u8 *c1, const u8 *c2, size_t hash_len,
57 u8 **ret_psk, size_t *ret_len);57 u8 **ret_psk, size_t *ret_len);
include/linux/rculist.h+29−0
@@ -261,6 +261,35 @@ static inline void list_replace_rcu(struct list_head *old, · 260 unmodified lines
261 old->prev = LIST_POISON2;261 old->prev = LIST_POISON2;
262}262}
263 263
264static inline void __list_splice_rcu(struct list_head *list,
265 struct list_head *prev,
266 struct list_head *next)
267{
268 struct list_head *first = list->next;
269 struct list_head *last = list->prev;
270
271 last->next = next;
272 first->prev = prev;
273 next->prev = last;
274 rcu_assign_pointer(list_next_rcu(prev), first);
275}
276
277/**
278 * list_splice_rcu - splice a non-RCU list into an RCU-protected list,
279 * designed for stacks.
280 * @list: the non RCU-protected list to splice
281 * @head: the place in the existing RCU-protected list to splice
282 *
283 * The list pointed to by @head can be RCU-read traversed concurrently with
284 * this function.
285 */
286static inline void list_splice_rcu(struct list_head *list,
287 struct list_head *head)
288{
289 if (!list_empty(list))
290 __list_splice_rcu(list, head, head->next);
291}
292
264/**293/**
265 * __list_splice_init_rcu - join an RCU-protected list into an existing list.294 * __list_splice_init_rcu - join an RCU-protected list into an existing list.
266 * @list: the RCU-protected list to splice295 * @list: the RCU-protected list to splice
include/linux/rhashtable-types.h+5−0
@@ -12,6 +12,7 @@ · 11 unmodified lines
12#include <linux/alloc_tag.h>12#include <linux/alloc_tag.h>
13#include <linux/atomic.h>13#include <linux/atomic.h>
14#include <linux/compiler.h>14#include <linux/compiler.h>
15#include <linux/irq_work_types.h>
15#include <linux/mutex.h>16#include <linux/mutex.h>
16#include <linux/workqueue_types.h>17#include <linux/workqueue_types.h>
17 18
@@ -49,6 +50,7 @@ typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg, · 31 unmodified lines
49 * @head_offset: Offset of rhash_head in struct to be hashed50 * @head_offset: Offset of rhash_head in struct to be hashed
50 * @max_size: Maximum size while expanding51 * @max_size: Maximum size while expanding
51 * @min_size: Minimum size while shrinking52 * @min_size: Minimum size while shrinking
53 * @insecure_elasticity: Set to true to disable chain length checks
52 * @automatic_shrinking: Enable automatic shrinking of tables54 * @automatic_shrinking: Enable automatic shrinking of tables
53 * @hashfn: Hash function (default: jhash2 if !(key_len % 4), or jhash)55 * @hashfn: Hash function (default: jhash2 if !(key_len % 4), or jhash)
54 * @obj_hashfn: Function to hash object56 * @obj_hashfn: Function to hash object
@@ -61,6 +63,7 @@ struct rhashtable_params { · 6 unmodified lines
61 u16 head_offset;63 u16 head_offset;
62 unsigned int max_size;64 unsigned int max_size;
63 u16 min_size;65 u16 min_size;
66 bool insecure_elasticity;
64 bool automatic_shrinking;67 bool automatic_shrinking;
65 rht_hashfn_t hashfn;68 rht_hashfn_t hashfn;
66 rht_obj_hashfn_t obj_hashfn;69 rht_obj_hashfn_t obj_hashfn;
@@ -75,6 +78,7 @@ struct rhashtable_params { · 8 unmodified lines
75 * @p: Configuration parameters78 * @p: Configuration parameters
76 * @rhlist: True if this is an rhltable79 * @rhlist: True if this is an rhltable
77 * @run_work: Deferred worker to expand/shrink asynchronously80 * @run_work: Deferred worker to expand/shrink asynchronously
81 * @run_irq_work: Bounces the @run_work kick through hard IRQ context.
78 * @mutex: Mutex to protect current/future table swapping82 * @mutex: Mutex to protect current/future table swapping
79 * @lock: Spin lock to protect walker list83 * @lock: Spin lock to protect walker list
80 * @nelems: Number of elements in table84 * @nelems: Number of elements in table
@@ -86,6 +90,7 @@ struct rhashtable { · 5 unmodified lines
86 struct rhashtable_params p;90 struct rhashtable_params p;
87 bool rhlist;91 bool rhlist;
88 struct work_struct run_work;92 struct work_struct run_work;
93 struct irq_work run_irq_work;
89 struct mutex mutex;94 struct mutex mutex;
90 spinlock_t lock;95 spinlock_t lock;
91 atomic_t nelems;96 atomic_t nelems;
include/linux/rhashtable.h+5−3
@@ -20,6 +20,7 @@ · 19 unmodified lines
20 20
21#include <linux/err.h>21#include <linux/err.h>
22#include <linux/errno.h>22#include <linux/errno.h>
23#include <linux/irq_work.h>
23#include <linux/jhash.h>24#include <linux/jhash.h>
24#include <linux/list_nulls.h>25#include <linux/list_nulls.h>
25#include <linux/workqueue.h>26#include <linux/workqueue.h>
@@ -821,14 +822,15 @@ slow_path: · 795 unmodified lines
821 goto out;822 goto out;
822 }823 }
823 824
824 if (elasticity <= 0)825 if (elasticity <= 0 && !params.insecure_elasticity)
825 goto slow_path;826 goto slow_path;
826 827
827 data = ERR_PTR(-E2BIG);828 data = ERR_PTR(-E2BIG);
828 if (unlikely(rht_grow_above_max(ht, tbl)))829 if (unlikely(rht_grow_above_max(ht, tbl)))
829 goto out_unlock;830 goto out_unlock;
830 831
831 if (unlikely(rht_grow_above_100(ht, tbl)))832 if (unlikely(rht_grow_above_100(ht, tbl)) &&
833 !params.insecure_elasticity)
832 goto slow_path;834 goto slow_path;
833 835
834 /* Inserting at head of list makes unlocking free. */836 /* Inserting at head of list makes unlocking free. */
@@ -846,7 +848,7 @@ slow_path: · 11 unmodified lines
846 rht_assign_unlock(tbl, bkt, obj, flags);848 rht_assign_unlock(tbl, bkt, obj, flags);
847 849
848 if (rht_grow_above_75(ht, tbl))850 if (rht_grow_above_75(ht, tbl))
849 schedule_work(&ht->run_work);851 irq_work_queue(&ht->run_irq_work);
850 852
851 data = NULL;853 data = NULL;
852out:854out:
include/linux/spi/spi-mem.h+11−1
@@ -227,6 +227,8 @@ struct spi_mem_op { · 226 unmodified lines
227 * struct spi_mem_dirmap_info - Direct mapping information227 * struct spi_mem_dirmap_info - Direct mapping information
228 * @op_tmpl: operation template that should be used by the direct mapping when228 * @op_tmpl: operation template that should be used by the direct mapping when
229 * the memory device is accessed229 * the memory device is accessed
230 * @secondary_op_tmpl: secondary template, may be used as an alternative to the
231 * primary template (decided by the upper layer)
230 * @offset: absolute offset this direct mapping is pointing to232 * @offset: absolute offset this direct mapping is pointing to
231 * @length: length in byte of this direct mapping233 * @length: length in byte of this direct mapping
232 *234 *
@@ -237,7 +239,9 @@ struct spi_mem_op { · 4 unmodified lines
237 * direction is directly encoded in the ->op_tmpl.data.dir field.239 * direction is directly encoded in the ->op_tmpl.data.dir field.
238 */240 */
239struct spi_mem_dirmap_info {241struct spi_mem_dirmap_info {
240 struct spi_mem_op op_tmpl;242 struct spi_mem_op *op_tmpl;
243 struct spi_mem_op primary_op_tmpl;
244 struct spi_mem_op secondary_op_tmpl;
241 u64 offset;245 u64 offset;
242 u64 length;246 u64 length;
243};247};
@@ -381,12 +385,18 @@ struct spi_controller_mem_ops { · 137 unmodified lines
381 * @swap16: Supports swapping bytes on a 16 bit boundary when configured in385 * @swap16: Supports swapping bytes on a 16 bit boundary when configured in
382 * Octal DTR386 * Octal DTR
383 * @per_op_freq: Supports per operation frequency switching387 * @per_op_freq: Supports per operation frequency switching
388 * @no_cs_assertion: The controller may automatically deassert the CS if there
389 * is a pause in the transfer (eg. internal bus contention or
390 * DMA arbitration on an interconnect). Features such as NAND
391 * continuous reads shall not be leveraged.
384 */392 */
385struct spi_controller_mem_caps {393struct spi_controller_mem_caps {
386 bool dtr;394 bool dtr;
387 bool ecc;395 bool ecc;
388 bool swap16;396 bool swap16;
389 bool per_op_freq;397 bool per_op_freq;
398 bool secondary_op_tmpl;
399 bool no_cs_assertion;
390};400};
391 401
392#define spi_mem_controller_is_capable(ctlr, cap) \402#define spi_mem_controller_is_capable(ctlr, cap) \
include/linux/tracepoint.h+1−1
@@ -202,7 +202,7 @@ static inline struct tracepoint *tracepoint_ptr_deref(tracepoint_ptr_t *p) · 201 unmodified lines
202#define TP_CONDITION(args...) args202#define TP_CONDITION(args...) args
203 203
204/*204/*
205 * Individual subsystem my have a separate configuration to205 * Individual subsystem may have a separate configuration to
206 * enable their tracepoints. By default, this file will create206 * enable their tracepoints. By default, this file will create
207 * the tracepoints if CONFIG_TRACEPOINTS is defined. If a subsystem207 * the tracepoints if CONFIG_TRACEPOINTS is defined. If a subsystem
208 * wants to be able to disable its tracepoints from being created208 * wants to be able to disable its tracepoints from being created
include/net/bond_3ad.h+1−1
@@ -243,7 +243,7 @@ typedef struct port { · 242 unmodified lines
243 churn_state_t sm_churn_actor_state;243 churn_state_t sm_churn_actor_state;
244 churn_state_t sm_churn_partner_state;244 churn_state_t sm_churn_partner_state;
245 struct slave *slave; /* pointer to the bond slave that this port belongs to */245 struct slave *slave; /* pointer to the bond slave that this port belongs to */
246 struct aggregator *aggregator; /* pointer to an aggregator that this port related to */246 struct aggregator __rcu *aggregator; /* pointer to an aggregator that this port related to */
247 struct port *next_port_in_aggregator; /* Next port on the linked list of the parent aggregator */247 struct port *next_port_in_aggregator; /* Next port on the linked list of the parent aggregator */
248 u32 transaction_id; /* continuous number for identification of Marker PDU's; */248 u32 transaction_id; /* continuous number for identification of Marker PDU's; */
249 struct lacpdu lacpdu; /* the lacpdu that will be sent for this port */249 struct lacpdu lacpdu; /* the lacpdu that will be sent for this port */
include/net/netfilter/nf_tables.h+13−0
@@ -1204,12 +1204,15 @@ struct nft_stats { · 1203 unmodified lines
1204 struct u64_stats_sync syncp;1204 struct u64_stats_sync syncp;
1205};1205};
1206 1206
1207#define NFT_HOOK_REMOVE (1 << 0)
1208
1207struct nft_hook {1209struct nft_hook {
1208 struct list_head list;1210 struct list_head list;
1209 struct list_head ops_list;1211 struct list_head ops_list;
1210 struct rcu_head rcu;1212 struct rcu_head rcu;
1211 char ifname[IFNAMSIZ];1213 char ifname[IFNAMSIZ];
1212 u8 ifnamelen;1214 u8 ifnamelen;
1215 u8 flags;
1213};1216};
1214 1217
1215struct nf_hook_ops *nft_hook_find_ops(const struct nft_hook *hook,1218struct nf_hook_ops *nft_hook_find_ops(const struct nft_hook *hook,
@@ -1664,6 +1667,16 @@ struct nft_trans { · 448 unmodified lines
1664 u8 put_net:1;1667 u8 put_net:1;
1665};1668};
1666 1669
1670/**
1671 * struct nft_trans_hook - nf_tables hook update in transaction
1672 * @list: used internally
1673 * @hook: struct nft_hook with the device hook
1674 */
1675struct nft_trans_hook {
1676 struct list_head list;
1677 struct nft_hook *hook;
1678};
1679
1667/**1680/**
1668 * struct nft_trans_binding - nf_tables object with binding support in transaction1681 * struct nft_trans_binding - nf_tables object with binding support in transaction
1669 * @nft_trans: base structure, MUST be first member1682 * @nft_trans: base structure, MUST be first member
include/net/netmem.h+15−0
@@ -127,6 +127,21 @@ static inline unsigned int net_iov_idx(const struct net_iov *niov) · 126 unmodified lines
127 return niov - net_iov_owner(niov)->niovs;127 return niov - net_iov_owner(niov)->niovs;
128}128}
129 129
130/* Initialize a niov: stamp the owning area, the memory provider type,
131 * and the page_type "no type" sentinel expected by the page-type API
132 * (see PAGE_TYPE_OPS in <linux/page-flags.h>) so that
133 * page_pool_set_pp_info() can later call __SetPageNetpp() on a niov
134 * cast to struct page.
135 */
136static inline void net_iov_init(struct net_iov *niov,
137 struct net_iov_area *owner,
138 enum net_iov_type type)
139{
140 niov->owner = owner;
141 niov->type = type;
142 niov->page_type = UINT_MAX;
143}
144
130/* netmem */145/* netmem */
131 146
132/**147/**
include/uapi/linux/io_uring.h+2−1
@@ -905,7 +905,8 @@ struct io_uring_buf_reg { · 904 unmodified lines
905 __u32 ring_entries;905 __u32 ring_entries;
906 __u16 bgid;906 __u16 bgid;
907 __u16 flags;907 __u16 flags;
908 __u64 resv[3];908 __u32 min_left;
909 __u32 resv[5];
909};910};
910 911
911/* argument for IORING_REGISTER_PBUF_STATUS */912/* argument for IORING_REGISTER_PBUF_STATUS */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t