* [Intel-wired-lan] [jkirsher-next-queue:dev-queue 108/109] drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: sparse: invalid assignment: |=
@ 2018-01-12 22:44 kbuild test robot
2018-01-12 22:44 ` [Intel-wired-lan] [RFC PATCH jkirsher-next-queue] i40evf: i40evf_print_cloud_filter() can be static kbuild test robot
0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2018-01-12 22:44 UTC (permalink / raw)
To: intel-wired-lan
tree: https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git dev-queue
head: 5a2f5288e8033ca6995630146eb61790471d9542
commit: 2b7317305ce97510ce8f1b2017869de4f7c39e79 [108/109] i40evf: Add support to apply cloud filters
reproduce:
# apt-get install sparse
git checkout 2b7317305ce97510ce8f1b2017869de4f7c39e79
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: left side has type restricted __be16
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: right side has type int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2655:59: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2655:59: left side has type restricted __be32
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2655:59: right side has type unsigned int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2659:59: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2659:59: left side has type restricted __be32
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2659:59: right side has type unsigned int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2695:67: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2695:67: left side has type restricted __be32
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2695:67: right side has type unsigned int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2702:67: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2702:67: left side has type restricted __be32
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2702:67: right side has type unsigned int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2738:58: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2738:58: left side has type restricted __be16
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2738:58: right side has type int
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2743:58: sparse: invalid assignment: |=
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2743:58: left side has type restricted __be16
drivers/net/ethernet/intel/i40evf/i40evf_main.c:2743:58: right side has type int
--
>> drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c:1050:6: sparse: symbol 'i40evf_print_cloud_filter' was not declared. Should it be
Please review and possibly fold the followup patch.
vim +2607 drivers/net/ethernet/intel/i40evf/i40evf_main.c
2461
2462 /**
2463 * i40evf_parse_cls_flower - Parse tc flower filters provided by kernel
2464 * @adapter: board private structure
2465 * @cls_flower: pointer to struct tc_cls_flower_offload
2466 * @filter: pointer to cloud filter structure
2467 */
2468 static int i40evf_parse_cls_flower(struct i40evf_adapter *adapter,
2469 struct tc_cls_flower_offload *f,
2470 struct i40evf_cloud_filter *filter)
2471 {
2472 u16 n_proto_mask = 0;
2473 u16 n_proto_key = 0;
2474 u8 field_flags = 0;
2475 u16 addr_type = 0;
2476 u16 n_proto = 0;
2477 int i = 0;
2478
2479 if (f->dissector->used_keys &
2480 ~(BIT(FLOW_DISSECTOR_KEY_CONTROL) |
2481 BIT(FLOW_DISSECTOR_KEY_BASIC) |
2482 BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) |
2483 BIT(FLOW_DISSECTOR_KEY_VLAN) |
2484 BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) |
2485 BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) |
2486 BIT(FLOW_DISSECTOR_KEY_PORTS) |
2487 BIT(FLOW_DISSECTOR_KEY_ENC_KEYID))) {
2488 dev_err(&adapter->pdev->dev, "Unsupported key used: 0x%x\n",
2489 f->dissector->used_keys);
2490 return -EOPNOTSUPP;
2491 }
2492
2493 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ENC_KEYID)) {
2494 struct flow_dissector_key_keyid *mask =
2495 skb_flow_dissector_target(f->dissector,
2496 FLOW_DISSECTOR_KEY_ENC_KEYID,
2497 f->mask);
2498
2499 if (mask->keyid != 0)
2500 field_flags |= I40EVF_CLOUD_FIELD_TEN_ID;
2501 }
2502
2503 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
2504 struct flow_dissector_key_basic *key =
2505 skb_flow_dissector_target(f->dissector,
2506 FLOW_DISSECTOR_KEY_BASIC,
2507 f->key);
2508
2509 struct flow_dissector_key_basic *mask =
2510 skb_flow_dissector_target(f->dissector,
2511 FLOW_DISSECTOR_KEY_BASIC,
2512 f->mask);
2513 n_proto_key = ntohs(key->n_proto);
2514 n_proto_mask = ntohs(mask->n_proto);
2515
2516 if (n_proto_key == ETH_P_ALL) {
2517 n_proto_key = 0;
2518 n_proto_mask = 0;
2519 }
2520 n_proto = n_proto_key & n_proto_mask;
2521 if (n_proto != ETH_P_IP && n_proto != ETH_P_IPV6)
2522 return -EINVAL;
2523 if (n_proto == ETH_P_IPV6) {
2524 /* specify flow type as TCP IPv6 */
2525 filter->f.flow_type = VIRTCHNL_TCP_V6_FLOW;
2526 }
2527
2528 if (key->ip_proto != IPPROTO_TCP) {
2529 dev_info(&adapter->pdev->dev, "Only TCP transport is supported\n");
2530 return -EINVAL;
2531 }
2532 }
2533
2534 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
2535 struct flow_dissector_key_eth_addrs *key =
2536 skb_flow_dissector_target(f->dissector,
2537 FLOW_DISSECTOR_KEY_ETH_ADDRS,
2538 f->key);
2539
2540 struct flow_dissector_key_eth_addrs *mask =
2541 skb_flow_dissector_target(f->dissector,
2542 FLOW_DISSECTOR_KEY_ETH_ADDRS,
2543 f->mask);
2544 /* use is_broadcast and is_zero to check for all 0xf or 0 */
2545 if (!is_zero_ether_addr(mask->dst)) {
2546 if (is_broadcast_ether_addr(mask->dst)) {
2547 field_flags |= I40EVF_CLOUD_FIELD_OMAC;
2548 } else {
2549 dev_err(&adapter->pdev->dev, "Bad ether dest mask %pM\n",
2550 mask->dst);
2551 return I40E_ERR_CONFIG;
2552 }
2553 }
2554
2555 if (!is_zero_ether_addr(mask->src)) {
2556 if (is_broadcast_ether_addr(mask->src)) {
2557 field_flags |= I40EVF_CLOUD_FIELD_IMAC;
2558 } else {
2559 dev_err(&adapter->pdev->dev, "Bad ether src mask %pM\n",
2560 mask->src);
2561 return I40E_ERR_CONFIG;
2562 }
2563 }
2564
2565 if (!is_zero_ether_addr(key->dst))
2566 if (is_valid_ether_addr(key->dst) ||
2567 is_multicast_ether_addr(key->dst)) {
2568 /* set the mask if a valid dst_mac address */
2569 for (i = 0; i < ETH_ALEN; i++)
2570 filter->f.mask.tcp_spec.dst_mac[i] |=
2571 0xff;
2572 ether_addr_copy(filter->f.data.tcp_spec.dst_mac,
2573 key->dst);
2574 }
2575
2576 if (!is_zero_ether_addr(key->src))
2577 if (is_valid_ether_addr(key->src) ||
2578 is_multicast_ether_addr(key->src)) {
2579 /* set the mask if a valid dst_mac address */
2580 for (i = 0; i < ETH_ALEN; i++)
2581 filter->f.mask.tcp_spec.src_mac[i] |=
2582 0xff;
2583 ether_addr_copy(filter->f.data.tcp_spec.src_mac,
2584 key->src);
2585 }
2586 }
2587
2588 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_VLAN)) {
2589 struct flow_dissector_key_vlan *key =
2590 skb_flow_dissector_target(f->dissector,
2591 FLOW_DISSECTOR_KEY_VLAN,
2592 f->key);
2593 struct flow_dissector_key_vlan *mask =
2594 skb_flow_dissector_target(f->dissector,
2595 FLOW_DISSECTOR_KEY_VLAN,
2596 f->mask);
2597
2598 if (mask->vlan_id) {
2599 if (mask->vlan_id == VLAN_VID_MASK) {
2600 field_flags |= I40EVF_CLOUD_FIELD_IVLAN;
2601 } else {
2602 dev_err(&adapter->pdev->dev, "Bad vlan mask %u\n",
2603 mask->vlan_id);
2604 return I40E_ERR_CONFIG;
2605 }
2606 }
> 2607 filter->f.mask.tcp_spec.vlan_id |= 0xffff;
2608 filter->f.data.tcp_spec.vlan_id = cpu_to_be16(key->vlan_id);
2609 }
2610
2611 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_CONTROL)) {
2612 struct flow_dissector_key_control *key =
2613 skb_flow_dissector_target(f->dissector,
2614 FLOW_DISSECTOR_KEY_CONTROL,
2615 f->key);
2616
2617 addr_type = key->addr_type;
2618 }
2619
2620 if (addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
2621 struct flow_dissector_key_ipv4_addrs *key =
2622 skb_flow_dissector_target(f->dissector,
2623 FLOW_DISSECTOR_KEY_IPV4_ADDRS,
2624 f->key);
2625 struct flow_dissector_key_ipv4_addrs *mask =
2626 skb_flow_dissector_target(f->dissector,
2627 FLOW_DISSECTOR_KEY_IPV4_ADDRS,
2628 f->mask);
2629
2630 if (mask->dst) {
2631 if (mask->dst == cpu_to_be32(0xffffffff)) {
2632 field_flags |= I40EVF_CLOUD_FIELD_IIP;
2633 } else {
2634 dev_err(&adapter->pdev->dev, "Bad ip dst mask 0x%08x\n",
2635 be32_to_cpu(mask->dst));
2636 return I40E_ERR_CONFIG;
2637 }
2638 }
2639
2640 if (mask->src) {
2641 if (mask->src == cpu_to_be32(0xffffffff)) {
2642 field_flags |= I40EVF_CLOUD_FIELD_IIP;
2643 } else {
2644 dev_err(&adapter->pdev->dev, "Bad ip src mask 0x%08x\n",
2645 be32_to_cpu(mask->dst));
2646 return I40E_ERR_CONFIG;
2647 }
2648 }
2649
2650 if (field_flags & I40EVF_CLOUD_FIELD_TEN_ID) {
2651 dev_info(&adapter->pdev->dev, "Tenant id not allowed for ip filter\n");
2652 return I40E_ERR_CONFIG;
2653 }
2654 if (key->dst) {
2655 filter->f.mask.tcp_spec.dst_ip[0] |= 0xffffffff;
2656 filter->f.data.tcp_spec.dst_ip[0] = key->dst;
2657 }
2658 if (key->src) {
2659 filter->f.mask.tcp_spec.src_ip[0] |= 0xffffffff;
2660 filter->f.data.tcp_spec.src_ip[0] = key->src;
2661 }
2662 }
2663
2664 if (addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
2665 struct flow_dissector_key_ipv6_addrs *key =
2666 skb_flow_dissector_target(f->dissector,
2667 FLOW_DISSECTOR_KEY_IPV6_ADDRS,
2668 f->key);
2669 struct flow_dissector_key_ipv6_addrs *mask =
2670 skb_flow_dissector_target(f->dissector,
2671 FLOW_DISSECTOR_KEY_IPV6_ADDRS,
2672 f->mask);
2673
2674 /* validate mask, make sure it is not IPV6_ADDR_ANY */
2675 if (ipv6_addr_any(&mask->dst)) {
2676 dev_err(&adapter->pdev->dev, "Bad ipv6 dst mask 0x%02x\n",
2677 IPV6_ADDR_ANY);
2678 return I40E_ERR_CONFIG;
2679 }
2680
2681 /* src and dest IPv6 address should not be LOOPBACK
2682 * (0:0:0:0:0:0:0:1) which can be represented as ::1
2683 */
2684 if (ipv6_addr_loopback(&key->dst) ||
2685 ipv6_addr_loopback(&key->src)) {
2686 dev_err(&adapter->pdev->dev,
2687 "ipv6 addr should not be loopback\n");
2688 return I40E_ERR_CONFIG;
2689 }
2690 if (!ipv6_addr_any(&mask->dst) || !ipv6_addr_any(&mask->src))
2691 field_flags |= I40EVF_CLOUD_FIELD_IIP;
2692
2693 if (key->dst.s6_addr) {
2694 for (i = 0; i < 4; i++)
2695 filter->f.mask.tcp_spec.dst_ip[i] |= 0xffffffff;
2696 memcpy(&filter->f.data.tcp_spec.dst_ip,
2697 &key->dst.s6_addr32,
2698 sizeof(filter->f.data.tcp_spec.dst_ip));
2699 }
2700 if (key->src.s6_addr) {
2701 for (i = 0; i < 4; i++)
2702 filter->f.mask.tcp_spec.src_ip[i] |= 0xffffffff;
2703 memcpy(&filter->f.data.tcp_spec.src_ip,
2704 &key->src.s6_addr32,
2705 sizeof(filter->f.data.tcp_spec.src_ip));
2706 }
2707 }
2708 if (dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_PORTS)) {
2709 struct flow_dissector_key_ports *key =
2710 skb_flow_dissector_target(f->dissector,
2711 FLOW_DISSECTOR_KEY_PORTS,
2712 f->key);
2713 struct flow_dissector_key_ports *mask =
2714 skb_flow_dissector_target(f->dissector,
2715 FLOW_DISSECTOR_KEY_PORTS,
2716 f->mask);
2717
2718 if (mask->src) {
2719 if (mask->src == cpu_to_be16(0xffff)) {
2720 field_flags |= I40EVF_CLOUD_FIELD_IIP;
2721 } else {
2722 dev_err(&adapter->pdev->dev, "Bad src port mask %u\n",
2723 be16_to_cpu(mask->src));
2724 return I40E_ERR_CONFIG;
2725 }
2726 }
2727
2728 if (mask->dst) {
2729 if (mask->dst == cpu_to_be16(0xffff)) {
2730 field_flags |= I40EVF_CLOUD_FIELD_IIP;
2731 } else {
2732 dev_err(&adapter->pdev->dev, "Bad dst port mask %u\n",
2733 be16_to_cpu(mask->dst));
2734 return I40E_ERR_CONFIG;
2735 }
2736 }
2737 if (key->dst) {
2738 filter->f.mask.tcp_spec.dst_port |= 0xffff;
2739 filter->f.data.tcp_spec.dst_port = key->dst;
2740 }
2741
2742 if (key->src) {
2743 filter->f.mask.tcp_spec.src_port |= 0xffff;
2744 filter->f.data.tcp_spec.src_port = key->dst;
2745 }
2746 }
2747 filter->f.field_flags = field_flags;
2748
2749 return 0;
2750 }
2751
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Intel-wired-lan] [RFC PATCH jkirsher-next-queue] i40evf: i40evf_print_cloud_filter() can be static
2018-01-12 22:44 [Intel-wired-lan] [jkirsher-next-queue:dev-queue 108/109] drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: sparse: invalid assignment: |= kbuild test robot
@ 2018-01-12 22:44 ` kbuild test robot
0 siblings, 0 replies; 2+ messages in thread
From: kbuild test robot @ 2018-01-12 22:44 UTC (permalink / raw)
To: intel-wired-lan
Fixes: 2b7317305ce9 ("i40evf: Add support to apply cloud filters")
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---
i40evf_virtchnl.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
index 3102261..ff3d681 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c
@@ -1047,8 +1047,8 @@ void i40evf_disable_channels(struct i40evf_adapter *adapter)
*
* Print the cloud filter
**/
-void i40evf_print_cloud_filter(struct i40evf_adapter *adapter,
- struct virtchnl_filter f)
+static void i40evf_print_cloud_filter(struct i40evf_adapter *adapter,
+ struct virtchnl_filter f)
{
switch (f.flow_type) {
case VIRTCHNL_TCP_V4_FLOW:
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-01-12 22:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-12 22:44 [Intel-wired-lan] [jkirsher-next-queue:dev-queue 108/109] drivers/net/ethernet/intel/i40evf/i40evf_main.c:2607:49: sparse: invalid assignment: |= kbuild test robot
2018-01-12 22:44 ` [Intel-wired-lan] [RFC PATCH jkirsher-next-queue] i40evf: i40evf_print_cloud_filter() can be static kbuild test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.