Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'fpga-for-6.12-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/fpga/linux-fpga into char-misc-next

Xu writes:

FPGA Manager changes for 6.12-rc1

FPGA unit test:

- Macro's change improves fpga tests using deferred actions

FPGA vendor drivers:

- Wolfram's change renames confusing variables for Altera & Xilinx
drivers.

All patches have been reviewed on the mailing list, and have been in the
last linux-next releases (as part of our for-next branch).

Signed-off-by: Xu Yilun <yilun.xu@intel.com>

* tag 'fpga-for-6.12-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/fpga/linux-fpga:
fpga: zynq-fpga: Rename 'timeout' variable as 'time_left'
fpga: socfpga: Rename 'timeout' variable as 'time_left'
fpga: Simplify and improve fpga region test using deferred actions
fpga: Simplify and improve fpga bridge test using deferred actions
fpga: Simplify and improve fpga mgr test using deferred actions

+60 -49
+4 -3
drivers/fpga/socfpga.c
··· 301 301 302 302 static int socfpga_fpga_wait_for_config_done(struct socfpga_fpga_priv *priv) 303 303 { 304 - int timeout, ret = 0; 304 + int ret = 0; 305 + long time_left; 305 306 306 307 socfpga_fpga_disable_irqs(priv); 307 308 init_completion(&priv->status_complete); 308 309 socfpga_fpga_enable_irqs(priv, SOCFPGA_FPGMGR_MON_CONF_DONE); 309 310 310 - timeout = wait_for_completion_interruptible_timeout( 311 + time_left = wait_for_completion_interruptible_timeout( 311 312 &priv->status_complete, 312 313 msecs_to_jiffies(10)); 313 - if (timeout == 0) 314 + if (time_left == 0) 314 315 ret = -ETIMEDOUT; 315 316 316 317 socfpga_fpga_disable_irqs(priv);
+11 -14
drivers/fpga/tests/fpga-bridge-test.c
··· 23 23 struct bridge_stats stats; 24 24 }; 25 25 26 + /* 27 + * Wrapper to avoid a cast warning when passing the action function directly 28 + * to kunit_add_action(). 29 + */ 30 + KUNIT_DEFINE_ACTION_WRAPPER(fpga_bridge_unregister_wrapper, fpga_bridge_unregister, 31 + struct fpga_bridge *); 32 + 26 33 static int op_enable_set(struct fpga_bridge *bridge, bool enable) 27 34 { 28 35 struct bridge_stats *stats = bridge->priv; ··· 57 50 static struct bridge_ctx *register_test_bridge(struct kunit *test, const char *dev_name) 58 51 { 59 52 struct bridge_ctx *ctx; 53 + int ret; 60 54 61 55 ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); 62 56 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); ··· 69 61 &ctx->stats); 70 62 KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->bridge)); 71 63 72 - return ctx; 73 - } 64 + ret = kunit_add_action_or_reset(test, fpga_bridge_unregister_wrapper, ctx->bridge); 65 + KUNIT_ASSERT_EQ(test, ret, 0); 74 66 75 - static void unregister_test_bridge(struct kunit *test, struct bridge_ctx *ctx) 76 - { 77 - fpga_bridge_unregister(ctx->bridge); 78 - kunit_device_unregister(test, ctx->dev); 67 + return ctx; 79 68 } 80 69 81 70 static void fpga_bridge_test_get(struct kunit *test) ··· 146 141 fpga_bridges_put(&bridge_list); 147 142 148 143 KUNIT_EXPECT_TRUE(test, list_empty(&bridge_list)); 149 - 150 - unregister_test_bridge(test, ctx_1); 151 144 } 152 145 153 146 static int fpga_bridge_test_init(struct kunit *test) ··· 153 150 test->priv = register_test_bridge(test, "fpga-bridge-test-dev-0"); 154 151 155 152 return 0; 156 - } 157 - 158 - static void fpga_bridge_test_exit(struct kunit *test) 159 - { 160 - unregister_test_bridge(test, test->priv); 161 153 } 162 154 163 155 static struct kunit_case fpga_bridge_test_cases[] = { ··· 165 167 static struct kunit_suite fpga_bridge_suite = { 166 168 .name = "fpga_bridge", 167 169 .init = fpga_bridge_test_init, 168 - .exit = fpga_bridge_test_exit, 169 170 .test_cases = fpga_bridge_test_cases, 170 171 }; 171 172
+17 -11
drivers/fpga/tests/fpga-mgr-test.c
··· 44 44 struct mgr_stats stats; 45 45 }; 46 46 47 + /* 48 + * Wrappers to avoid cast warnings when passing action functions directly 49 + * to kunit_add_action(). 50 + */ 51 + KUNIT_DEFINE_ACTION_WRAPPER(sg_free_table_wrapper, sg_free_table, 52 + struct sg_table *); 53 + 54 + KUNIT_DEFINE_ACTION_WRAPPER(fpga_image_info_free_wrapper, fpga_image_info_free, 55 + struct fpga_image_info *); 56 + 47 57 /** 48 58 * init_test_buffer() - Allocate and initialize a test image in a buffer. 49 59 * @test: KUnit test context object. ··· 267 257 KUNIT_ASSERT_EQ(test, ret, 0); 268 258 sg_init_one(sgt->sgl, img_buf, IMAGE_SIZE); 269 259 260 + ret = kunit_add_action_or_reset(test, sg_free_table_wrapper, sgt); 261 + KUNIT_ASSERT_EQ(test, ret, 0); 262 + 270 263 ctx->img_info->sgt = sgt; 271 264 272 265 ret = fpga_mgr_load(ctx->mgr, ctx->img_info); ··· 286 273 KUNIT_EXPECT_EQ(test, ctx->stats.op_write_init_seq, ctx->stats.op_parse_header_seq + 1); 287 274 KUNIT_EXPECT_EQ(test, ctx->stats.op_write_sg_seq, ctx->stats.op_parse_header_seq + 2); 288 275 KUNIT_EXPECT_EQ(test, ctx->stats.op_write_complete_seq, ctx->stats.op_parse_header_seq + 3); 289 - 290 - sg_free_table(ctx->img_info->sgt); 291 276 } 292 277 293 278 static int fpga_mgr_test_init(struct kunit *test) 294 279 { 295 280 struct mgr_ctx *ctx; 281 + int ret; 296 282 297 283 ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); 298 284 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); ··· 306 294 ctx->img_info = fpga_image_info_alloc(ctx->dev); 307 295 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->img_info); 308 296 297 + ret = kunit_add_action_or_reset(test, fpga_image_info_free_wrapper, ctx->img_info); 298 + KUNIT_ASSERT_EQ(test, ret, 0); 299 + 309 300 test->priv = ctx; 310 301 311 302 return 0; 312 - } 313 - 314 - static void fpga_mgr_test_exit(struct kunit *test) 315 - { 316 - struct mgr_ctx *ctx = test->priv; 317 - 318 - fpga_image_info_free(ctx->img_info); 319 - kunit_device_unregister(test, ctx->dev); 320 303 } 321 304 322 305 static struct kunit_case fpga_mgr_test_cases[] = { ··· 325 318 static struct kunit_suite fpga_mgr_suite = { 326 319 .name = "fpga_mgr", 327 320 .init = fpga_mgr_test_init, 328 - .exit = fpga_mgr_test_exit, 329 321 .test_cases = fpga_mgr_test_cases, 330 322 }; 331 323
+24 -17
drivers/fpga/tests/fpga-region-test.c
··· 35 35 struct mgr_stats mgr_stats; 36 36 }; 37 37 38 + /* 39 + * Wrappers to avoid cast warnings when passing action functions directly 40 + * to kunit_add_action(). 41 + */ 42 + KUNIT_DEFINE_ACTION_WRAPPER(fpga_image_info_free_wrapper, fpga_image_info_free, 43 + struct fpga_image_info *); 44 + 45 + KUNIT_DEFINE_ACTION_WRAPPER(fpga_bridge_unregister_wrapper, fpga_bridge_unregister, 46 + struct fpga_bridge *); 47 + 48 + KUNIT_DEFINE_ACTION_WRAPPER(fpga_region_unregister_wrapper, fpga_region_unregister, 49 + struct fpga_region *); 50 + 38 51 static int op_write(struct fpga_manager *mgr, const char *buf, size_t count) 39 52 { 40 53 struct mgr_stats *stats = mgr->priv; ··· 124 111 img_info = fpga_image_info_alloc(ctx->mgr_dev); 125 112 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, img_info); 126 113 114 + ret = kunit_add_action_or_reset(test, fpga_image_info_free_wrapper, img_info); 115 + KUNIT_ASSERT_EQ(test, ret, 0); 116 + 127 117 img_info->buf = img_buf; 128 118 img_info->count = sizeof(img_buf); 129 119 ··· 146 130 KUNIT_EXPECT_EQ(test, 2, ctx->bridge_stats.cycles_count); 147 131 148 132 fpga_bridges_put(&ctx->region->bridge_list); 149 - 150 - fpga_image_info_free(img_info); 151 133 } 152 134 153 135 /* ··· 158 144 { 159 145 struct test_ctx *ctx; 160 146 struct fpga_region_info region_info = { 0 }; 147 + int ret; 161 148 162 149 ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL); 163 150 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); ··· 179 164 180 165 ctx->bridge_stats.enable = true; 181 166 167 + ret = kunit_add_action_or_reset(test, fpga_bridge_unregister_wrapper, ctx->bridge); 168 + KUNIT_ASSERT_EQ(test, ret, 0); 169 + 182 170 ctx->region_dev = kunit_device_register(test, "fpga-region-test-dev"); 183 171 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->region_dev); 184 172 ··· 192 174 ctx->region = fpga_region_register_full(ctx->region_dev, &region_info); 193 175 KUNIT_ASSERT_FALSE(test, IS_ERR_OR_NULL(ctx->region)); 194 176 177 + ret = kunit_add_action_or_reset(test, fpga_region_unregister_wrapper, ctx->region); 178 + KUNIT_ASSERT_EQ(test, ret, 0); 179 + 195 180 test->priv = ctx; 196 181 197 182 return 0; 198 - } 199 - 200 - static void fpga_region_test_exit(struct kunit *test) 201 - { 202 - struct test_ctx *ctx = test->priv; 203 - 204 - fpga_region_unregister(ctx->region); 205 - kunit_device_unregister(test, ctx->region_dev); 206 - 207 - fpga_bridge_unregister(ctx->bridge); 208 - kunit_device_unregister(test, ctx->bridge_dev); 209 - 210 - kunit_device_unregister(test, ctx->mgr_dev); 211 183 } 212 184 213 185 static struct kunit_case fpga_region_test_cases[] = { ··· 207 199 }; 208 200 209 201 static struct kunit_suite fpga_region_suite = { 210 - .name = "fpga_mgr", 202 + .name = "fpga_region", 211 203 .init = fpga_region_test_init, 212 - .exit = fpga_region_test_exit, 213 204 .test_cases = fpga_region_test_cases, 214 205 }; 215 206
+4 -4
drivers/fpga/zynq-fpga.c
··· 387 387 const char *why; 388 388 int err; 389 389 u32 intr_status; 390 - unsigned long timeout; 390 + unsigned long time_left; 391 391 unsigned long flags; 392 392 struct scatterlist *sg; 393 393 int i; ··· 427 427 zynq_step_dma(priv); 428 428 spin_unlock_irqrestore(&priv->dma_lock, flags); 429 429 430 - timeout = wait_for_completion_timeout(&priv->dma_done, 431 - msecs_to_jiffies(DMA_TIMEOUT_MS)); 430 + time_left = wait_for_completion_timeout(&priv->dma_done, 431 + msecs_to_jiffies(DMA_TIMEOUT_MS)); 432 432 433 433 spin_lock_irqsave(&priv->dma_lock, flags); 434 434 zynq_fpga_set_irq(priv, 0); ··· 452 452 453 453 if (priv->cur_sg || 454 454 !((intr_status & IXR_D_P_DONE_MASK) == IXR_D_P_DONE_MASK)) { 455 - if (timeout == 0) 455 + if (time_left == 0) 456 456 why = "DMA timed out"; 457 457 else 458 458 why = "DMA did not complete";