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
1717 #include <linux/property.h>
1818 #include <linux/types.h>
1919
20+struct notifier_block;
21+
2022 struct acpi_handle_list {
2123 u32 count;
2224 acpi_handle *handles;
include/acpi/actbl1.h+6−0
@@ -1386,6 +1386,12 @@ enum acpi_einj_command_status { · 1385 unmodified lines
13861386 #define ACPI_EINJ_CXL_MEM_FATAL (1<<17)
13871387 #define ACPI_EINJ_VENDOR_DEFINED (1<<31)
13881388
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+
13891395 /*******************************************************************************
13901396 *
13911397 * 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
273273 int drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper);
274274 bool drm_fb_helper_gem_is_fb(const struct drm_fb_helper *fb_helper,
275275 const struct drm_gem_object *obj);
276+#else
277+static 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+}
276282 #endif
277283
278284 #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
108108 extern unsigned int cdrom_check_events(struct cdrom_device_info *cdi,
109109 unsigned int clearing);
110110
111+extern void cdrom_probe_write_features(struct cdrom_device_info *cdi);
111112 extern int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi);
112113 extern void unregister_cdrom(struct cdrom_device_info *cdi);
113114
include/linux/dma-buf.h+2−2
@@ -322,13 +322,13 @@ struct dma_buf { · 321 unmodified lines
322322 * @vmapping_counter:
323323 *
324324 * Used internally to refcnt the vmaps returned by dma_buf_vmap().
325− * Protected by @lock.
325+ * Protected by @resv.
326326 */
327327 unsigned vmapping_counter;
328328
329329 /**
330330 * @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.
332332 */
333333 struct iosys_map vmap_ptr;
334334
include/linux/dpll.h+1−0
@@ -286,6 +286,7 @@ int dpll_pin_ref_sync_pair_add(struct dpll_pin *pin, · 285 unmodified lines
286286
287287 int dpll_device_change_ntf(struct dpll_device *dpll);
288288
289+int __dpll_pin_change_ntf(struct dpll_pin *pin);
289290 int dpll_pin_change_ntf(struct dpll_pin *pin);
290291
291292 int 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
915915 unsigned int obj_type);
916916 extern void fsnotify_get_mark(struct fsnotify_mark *mark);
917917 extern void fsnotify_put_mark(struct fsnotify_mark *mark);
918+struct fsnotify_mark *fsnotify_next_mark(struct fsnotify_mark *mark);
918919 extern void fsnotify_finish_user_wait(struct fsnotify_iter_info *iter_info);
919920 extern bool fsnotify_prepare_user_wait(struct fsnotify_iter_info *iter_info);
920921
include/linux/mailbox_client.h+1−0
@@ -45,6 +45,7 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg); · 44 unmodified lines
4545 int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
4646 void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
4747 bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
48+unsigned int mbox_chan_tx_slots_available(struct mbox_chan *chan); /* atomic */
4849 void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
4950
5051 #endif /* __MAILBOX_CLIENT_H */
include/linux/mailbox_controller.h+13−4
@@ -3,6 +3,7 @@ · 2 unmodified lines
33 #ifndef __MAILBOX_CONTROLLER_H
44 #define __MAILBOX_CONTROLLER_H
55
6+#include <linux/bits.h>
67 #include <linux/completion.h>
78 #include <linux/device.h>
89 #include <linux/hrtimer.h>
@@ -11,6 +12,13 @@ · 2 unmodified lines
1112
1213 struct mbox_chan;
1314
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+
1422 /**
1523 * struct mbox_chan_ops - methods to control mailbox channels
1624 * @send_data: The API asks the MBOX controller driver, in atomic
@@ -54,10 +62,10 @@ struct mbox_chan_ops { · 37 unmodified lines
5462
5563 /**
5664 * struct mbox_controller - Controller of a class of communication channels
57− * @dev: Device backing this controller
58− * @ops: Operators that work on each communication chan
59− * @chans: Array of channels
60− * @num_chans: Number of channels in the 'chans' array.
65+ * @dev: Device backing this controller. Required.
66+ * @ops: Operators that work on each communication chan. Required.
67+ * @chans: Array of channels. Required.
68+ * @num_chans: Number of channels in the 'chans' array. Required.
6169 * @txdone_irq: Indicates if the controller can report to API when
6270 * the last transmitted data was read by the remote.
6371 * Eg, if it has some TX ACK irq.
@@ -70,6 +78,7 @@ struct mbox_chan_ops { · 6 unmodified lines
7078 * @of_xlate: Controller driver specific mapping of channel via DT
7179 * @poll_hrt: API private. hrtimer used to poll for TXDONE on all
7280 * channels.
81+ * @poll_hrt_lock: API private. Lock protecting access to poll_hrt.
7382 * @node: API private. To hook into list of controllers.
7483 */
7584 struct mbox_controller {
include/linux/maple_tree.h+1−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
44 /*
55 * Maple Tree - An RCU-safe adaptive tree for storing ranges
66 * Copyright (c) 2018-2022 Oracle
7− * Authors: Liam R. Howlett <Liam.Howlett@Oracle.com>
7+ * Authors: Liam R. Howlett <liam@infradead.org>
88 * Matthew Wilcox <willy@infradead.org>
99 */
1010
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
43914391
43924392 int mmap_action_prepare(struct vm_area_desc *desc);
43934393 int mmap_action_complete(struct vm_area_struct *vma,
4394− struct mmap_action *action);
4394+ struct mmap_action *action, bool is_compat);
43954395
43964396 /* Look up the first VMA which exactly match the interval vm_start ... vm_end */
43974397 static 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
226226
227227 /**
228228 * struct mr_table - a multicast routing table
229+ * @work: used for table destruction
229230 * @list: entry within a list of multicast routing tables
230231 * @net: net where this table belongs
231232 * @ops: protocol specific operations
@@ -243,6 +244,7 @@ struct mr_table_ops { · 11 unmodified lines
243244 * @mroute_reg_vif_num: PIM-device vif index
244245 */
245246 struct mr_table {
247+ struct rcu_work work;
246248 struct list_head list;
247249 possible_net_t net;
248250 struct mr_table_ops ops;
@@ -274,6 +276,7 @@ void vif_device_init(struct vif_device *v, · 25 unmodified lines
274276 unsigned short flags,
275277 unsigned short get_iflink_mask);
276278
279+void mr_table_free(struct mr_table *mrt);
277280 struct mr_table *
278281 mr_table_alloc(struct net *net, u32 id,
279282 struct mr_table_ops *ops,
include/linux/mtd/nand-qpic-common.h+3−1
@@ -9,6 +9,8 @@ · 8 unmodified lines
99 #ifndef __MTD_NAND_QPIC_COMMON_H__
1010 #define __MTD_NAND_QPIC_COMMON_H__
1111
12+#include <linux/mtd/rawnand.h>
13+
1214 /* NANDc reg offsets */
1315 #define NAND_FLASH_CMD 0x00
1416 #define NAND_ADDR0 0x04
@@ -394,7 +396,7 @@ struct qcom_nand_controller { · 379 unmodified lines
394396
395397 const struct qcom_nandc_props *props;
396398
397− struct nand_controller *controller;
399+ struct nand_controller controller;
398400 struct qpic_spi_nand *qspi;
399401 struct list_head host_list;
400402
include/linux/mtd/spinand.h+30−2
@@ -290,6 +290,12 @@ · 289 unmodified lines
290290 SPI_MEM_OP_NO_DUMMY, \
291291 SPI_MEM_OP_NO_DATA)
292292
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+
293299 #define SPINAND_PAGE_READ_FROM_CACHE_8D_8D_8D_OP(addr, ndummy, buf, len, freq) \
294300 SPI_MEM_OP(SPI_MEM_DTR_OP_RPT_CMD(0x9d, 8), \
295301 SPI_MEM_DTR_OP_ADDR(2, addr, 8), \
@@ -483,6 +489,7 @@ struct spinand_ecc_info { · 187 unmodified lines
483489 #define SPINAND_HAS_PROG_PLANE_SELECT_BIT BIT(2)
484490 #define SPINAND_HAS_READ_PLANE_SELECT_BIT BIT(3)
485491 #define SPINAND_NO_RAW_ACCESS BIT(4)
492+#define SPINAND_ODTR_PACKED_PAGE_READ BIT(5)
486493
487494 /**
488495 * struct spinand_ondie_ecc_conf - private SPI-NAND on-die ECC engine structure
@@ -576,6 +583,7 @@ enum spinand_bus_interface { · 87 unmodified lines
576583 * @op_variants.read_cache: variants of the read-cache operation
577584 * @op_variants.write_cache: variants of the write-cache operation
578585 * @op_variants.update_cache: variants of the update-cache operation
586+ * @op_variants.cont_read_cache: variants of the continuous read-cache operation
579587 * @vendor_ops: vendor specific operations
580588 * @select_target: function used to select a target/die. Required only for
581589 * multi-die chips
@@ -585,6 +593,7 @@ enum spinand_bus_interface { · 3 unmodified lines
585593 * @user_otp: SPI NAND user OTP info.
586594 * @read_retries: the number of read retry modes supported
587595 * @set_read_retry: enable/disable read retry for data recovery
596+ * @set_randomizer: enable/disable randomizer support
588597 *
589598 * Each SPI NAND manufacturer driver should have a spinand_info table
590599 * describing all the chips supported by the driver.
@@ -600,6 +609,7 @@ struct spinand_info { · 9 unmodified lines
600609 const struct spinand_op_variants *read_cache;
601610 const struct spinand_op_variants *write_cache;
602611 const struct spinand_op_variants *update_cache;
612+ const struct spinand_op_variants *cont_read_cache;
603613 } op_variants;
604614 const struct spinand_op_variants *vendor_ops;
605615 int (*select_target)(struct spinand_device *spinand,
@@ -613,6 +623,8 @@ struct spinand_info { · 7 unmodified lines
613623 unsigned int read_retries;
614624 int (*set_read_retry)(struct spinand_device *spinand,
615625 unsigned int read_retry);
626+ int (*set_randomizer)(struct spinand_device *spinand,
627+ bool enable);
616628 };
617629
618630 #define SPINAND_ID(__method, ...) \
@@ -629,6 +641,14 @@ struct spinand_info { · 10 unmodified lines
629641 .update_cache = __update, \
630642 }
631643
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+
632652 #define SPINAND_INFO_VENDOR_OPS(__ops) \
633653 .vendor_ops = __ops
634654
@@ -669,6 +689,9 @@ struct spinand_info { · 34 unmodified lines
669689 .read_retries = __read_retries, \
670690 .set_read_retry = __set_read_retry
671691
692+#define SPINAND_RANDOMIZER(__set_randomizer) \
693+ .set_randomizer = __set_randomizer
694+
672695 #define SPINAND_INFO(__model, __id, __memorg, __eccreq, __op_variants, \
673696 __flags, ...) \
674697 { \
@@ -684,8 +707,6 @@ struct spinand_info { · 9 unmodified lines
684707 struct spinand_dirmap {
685708 struct spi_mem_dirmap_desc *wdesc;
686709 struct spi_mem_dirmap_desc *rdesc;
687− struct spi_mem_dirmap_desc *wdesc_ecc;
688− struct spi_mem_dirmap_desc *rdesc_ecc;
689710 };
690711
691712 /**
@@ -702,6 +723,7 @@ struct spinand_dirmap { · 10 unmodified lines
702723 * @read_cache: read cache op template
703724 * @write_cache: write cache op template
704725 * @update_cache: update cache op template
726+ * @cont_read_cache: continuous read cache op template (optional)
705727 */
706728 struct spinand_mem_ops {
707729 struct spi_mem_op reset;
@@ -716,6 +738,7 @@ struct spinand_mem_ops { · 8 unmodified lines
716738 const struct spi_mem_op *read_cache;
717739 const struct spi_mem_op *write_cache;
718740 const struct spi_mem_op *update_cache;
741+ const struct spi_mem_op *cont_read_cache;
719742 };
720743
721744 /**
@@ -754,6 +777,7 @@ struct spinand_mem_ops { · 32 unmodified lines
754777 * @user_otp: SPI NAND user OTP info.
755778 * @read_retries: the number of read retry modes supported
756779 * @set_read_retry: Enable/disable the read retry feature
780+ * @set_randomizer: Enable/disable the randomizer feature
757781 */
758782 struct spinand_device {
759783 struct nand_device base;
@@ -787,6 +811,8 @@ struct spinand_device { · 27 unmodified lines
787811 bool cont_read_possible;
788812 int (*set_cont_read)(struct spinand_device *spinand,
789813 bool enable);
814+ int (*set_randomizer)(struct spinand_device *spinand,
815+ bool enable);
790816
791817 const struct spinand_fact_otp *fact_otp;
792818 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
862888 nanddev_set_of_node(&spinand->base, np);
863889 }
864890
891+bool spinand_op_is_odtr(const struct spi_mem_op *op);
892+
865893 int spinand_match_and_init(struct spinand_device *spinand,
866894 const struct spinand_info *table,
867895 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
4949 int nvme_auth_gen_privkey(struct crypto_kpp *dh_tfm, u8 dh_gid);
5050 int nvme_auth_gen_pubkey(struct crypto_kpp *dh_tfm,
5151 u8 *host_key, size_t host_key_len);
52−int nvme_auth_gen_shared_secret(struct crypto_kpp *dh_tfm,
53− const u8 *ctrl_key, size_t ctrl_key_len,
54− u8 *sess_key, size_t sess_key_len);
52+int nvme_auth_gen_session_key(struct crypto_kpp *dh_tfm,
53+ const u8 *public_key, size_t public_key_len,
54+ u8 *sess_key, size_t sess_key_len, u8 hash_id);
5555 int nvme_auth_generate_psk(u8 hmac_id, const u8 *skey, size_t skey_len,
5656 const u8 *c1, const u8 *c2, size_t hash_len,
5757 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
261261 old->prev = LIST_POISON2;
262262 }
263263
264+static 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+ */
286+static 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+
264293 /**
265294 * __list_splice_init_rcu - join an RCU-protected list into an existing list.
266295 * @list: the RCU-protected list to splice
include/linux/rhashtable-types.h+5−0
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <linux/alloc_tag.h>
1313 #include <linux/atomic.h>
1414 #include <linux/compiler.h>
15+#include <linux/irq_work_types.h>
1516 #include <linux/mutex.h>
1617 #include <linux/workqueue_types.h>
1718
@@ -49,6 +50,7 @@ typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg, · 31 unmodified lines
4950 * @head_offset: Offset of rhash_head in struct to be hashed
5051 * @max_size: Maximum size while expanding
5152 * @min_size: Minimum size while shrinking
53+ * @insecure_elasticity: Set to true to disable chain length checks
5254 * @automatic_shrinking: Enable automatic shrinking of tables
5355 * @hashfn: Hash function (default: jhash2 if !(key_len % 4), or jhash)
5456 * @obj_hashfn: Function to hash object
@@ -61,6 +63,7 @@ struct rhashtable_params { · 6 unmodified lines
6163 u16 head_offset;
6264 unsigned int max_size;
6365 u16 min_size;
66+ bool insecure_elasticity;
6467 bool automatic_shrinking;
6568 rht_hashfn_t hashfn;
6669 rht_obj_hashfn_t obj_hashfn;
@@ -75,6 +78,7 @@ struct rhashtable_params { · 8 unmodified lines
7578 * @p: Configuration parameters
7679 * @rhlist: True if this is an rhltable
7780 * @run_work: Deferred worker to expand/shrink asynchronously
81+ * @run_irq_work: Bounces the @run_work kick through hard IRQ context.
7882 * @mutex: Mutex to protect current/future table swapping
7983 * @lock: Spin lock to protect walker list
8084 * @nelems: Number of elements in table
@@ -86,6 +90,7 @@ struct rhashtable { · 5 unmodified lines
8690 struct rhashtable_params p;
8791 bool rhlist;
8892 struct work_struct run_work;
93+ struct irq_work run_irq_work;
8994 struct mutex mutex;
9095 spinlock_t lock;
9196 atomic_t nelems;
include/linux/rhashtable.h+5−3
@@ -20,6 +20,7 @@ · 19 unmodified lines
2020
2121 #include <linux/err.h>
2222 #include <linux/errno.h>
23+#include <linux/irq_work.h>
2324 #include <linux/jhash.h>
2425 #include <linux/list_nulls.h>
2526 #include <linux/workqueue.h>
@@ -821,14 +822,15 @@ slow_path: · 795 unmodified lines
821822 goto out;
822823 }
823824
824− if (elasticity <= 0)
825+ if (elasticity <= 0 && !params.insecure_elasticity)
825826 goto slow_path;
826827
827828 data = ERR_PTR(-E2BIG);
828829 if (unlikely(rht_grow_above_max(ht, tbl)))
829830 goto out_unlock;
830831
831− if (unlikely(rht_grow_above_100(ht, tbl)))
832+ if (unlikely(rht_grow_above_100(ht, tbl)) &&
833+ !params.insecure_elasticity)
832834 goto slow_path;
833835
834836 /* Inserting at head of list makes unlocking free. */
@@ -846,7 +848,7 @@ slow_path: · 11 unmodified lines
846848 rht_assign_unlock(tbl, bkt, obj, flags);
847849
848850 if (rht_grow_above_75(ht, tbl))
849− schedule_work(&ht->run_work);
851+ irq_work_queue(&ht->run_irq_work);
850852
851853 data = NULL;
852854 out:
include/linux/spi/spi-mem.h+11−1
@@ -227,6 +227,8 @@ struct spi_mem_op { · 226 unmodified lines
227227 * struct spi_mem_dirmap_info - Direct mapping information
228228 * @op_tmpl: operation template that should be used by the direct mapping when
229229 * 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)
230232 * @offset: absolute offset this direct mapping is pointing to
231233 * @length: length in byte of this direct mapping
232234 *
@@ -237,7 +239,9 @@ struct spi_mem_op { · 4 unmodified lines
237239 * direction is directly encoded in the ->op_tmpl.data.dir field.
238240 */
239241 struct 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;
241245 u64 offset;
242246 u64 length;
243247 };
@@ -381,12 +385,18 @@ struct spi_controller_mem_ops { · 137 unmodified lines
381385 * @swap16: Supports swapping bytes on a 16 bit boundary when configured in
382386 * Octal DTR
383387 * @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.
384392 */
385393 struct spi_controller_mem_caps {
386394 bool dtr;
387395 bool ecc;
388396 bool swap16;
389397 bool per_op_freq;
398+ bool secondary_op_tmpl;
399+ bool no_cs_assertion;
390400 };
391401
392402 #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
202202 #define TP_CONDITION(args...) args
203203
204204 /*
205− * Individual subsystem my have a separate configuration to
205+ * Individual subsystem may have a separate configuration to
206206 * enable their tracepoints. By default, this file will create
207207 * the tracepoints if CONFIG_TRACEPOINTS is defined. If a subsystem
208208 * 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
243243 churn_state_t sm_churn_actor_state;
244244 churn_state_t sm_churn_partner_state;
245245 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 */
247247 struct port *next_port_in_aggregator; /* Next port on the linked list of the parent aggregator */
248248 u32 transaction_id; /* continuous number for identification of Marker PDU's; */
249249 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
12041204 struct u64_stats_sync syncp;
12051205 };
12061206
1207+#define NFT_HOOK_REMOVE (1 << 0)
1208+
12071209 struct nft_hook {
12081210 struct list_head list;
12091211 struct list_head ops_list;
12101212 struct rcu_head rcu;
12111213 char ifname[IFNAMSIZ];
12121214 u8 ifnamelen;
1215+ u8 flags;
12131216 };
12141217
12151218 struct nf_hook_ops *nft_hook_find_ops(const struct nft_hook *hook,
@@ -1664,6 +1667,16 @@ struct nft_trans { · 448 unmodified lines
16641667 u8 put_net:1;
16651668 };
16661669
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+ */
1675+struct nft_trans_hook {
1676+ struct list_head list;
1677+ struct nft_hook *hook;
1678+};
1679+
16671680 /**
16681681 * struct nft_trans_binding - nf_tables object with binding support in transaction
16691682 * @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
127127 return niov - net_iov_owner(niov)->niovs;
128128 }
129129
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+ */
136+static 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+
130145 /* netmem */
131146
132147 /**
include/uapi/linux/io_uring.h+2−1
@@ -905,7 +905,8 @@ struct io_uring_buf_reg { · 904 unmodified lines
905905 __u32 ring_entries;
906906 __u16 bgid;
907907 __u16 flags;
908− __u64 resv[3];
908+ __u32 min_left;
909+ __u32 resv[5];
909910 };
910911
911912 /* 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