mirror of
https://github.com/LuckfoxTECH/luckfox-pico.git
synced 2026-01-19 17:59:18 +01:00
project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp: Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem. sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately. sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades. sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for fastboot. Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
This commit is contained in:
@@ -467,7 +467,8 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
|
||||
|
||||
if (pmc->multiaddr == IGMP_ALL_HOSTS)
|
||||
return skb;
|
||||
if (ipv4_is_local_multicast(pmc->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
|
||||
if (ipv4_is_local_multicast(pmc->multiaddr) &&
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
return skb;
|
||||
|
||||
mtu = READ_ONCE(dev->mtu);
|
||||
@@ -593,7 +594,7 @@ static int igmpv3_send_report(struct in_device *in_dev, struct ip_mc_list *pmc)
|
||||
if (pmc->multiaddr == IGMP_ALL_HOSTS)
|
||||
continue;
|
||||
if (ipv4_is_local_multicast(pmc->multiaddr) &&
|
||||
!net->ipv4.sysctl_igmp_llm_reports)
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
continue;
|
||||
spin_lock_bh(&pmc->lock);
|
||||
if (pmc->sfcount[MCAST_EXCLUDE])
|
||||
@@ -736,7 +737,8 @@ static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc,
|
||||
if (type == IGMPV3_HOST_MEMBERSHIP_REPORT)
|
||||
return igmpv3_send_report(in_dev, pmc);
|
||||
|
||||
if (ipv4_is_local_multicast(group) && !net->ipv4.sysctl_igmp_llm_reports)
|
||||
if (ipv4_is_local_multicast(group) &&
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
return 0;
|
||||
|
||||
if (type == IGMP_HOST_LEAVE_MESSAGE)
|
||||
@@ -818,7 +820,7 @@ static void igmp_ifc_event(struct in_device *in_dev)
|
||||
struct net *net = dev_net(in_dev->dev);
|
||||
if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
|
||||
return;
|
||||
in_dev->mr_ifc_count = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
in_dev->mr_ifc_count = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
igmp_ifc_start_timer(in_dev, 1);
|
||||
}
|
||||
|
||||
@@ -913,7 +915,8 @@ static bool igmp_heard_report(struct in_device *in_dev, __be32 group)
|
||||
|
||||
if (group == IGMP_ALL_HOSTS)
|
||||
return false;
|
||||
if (ipv4_is_local_multicast(group) && !net->ipv4.sysctl_igmp_llm_reports)
|
||||
if (ipv4_is_local_multicast(group) &&
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
return false;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -999,7 +1002,7 @@ static bool igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
||||
* received value was zero, use the default or statically
|
||||
* configured value.
|
||||
*/
|
||||
in_dev->mr_qrv = ih3->qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
in_dev->mr_qrv = ih3->qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
in_dev->mr_qi = IGMPV3_QQIC(ih3->qqic)*HZ ?: IGMP_QUERY_INTERVAL;
|
||||
|
||||
/* RFC3376, 8.3. Query Response Interval:
|
||||
@@ -1038,7 +1041,7 @@ static bool igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,
|
||||
if (im->multiaddr == IGMP_ALL_HOSTS)
|
||||
continue;
|
||||
if (ipv4_is_local_multicast(im->multiaddr) &&
|
||||
!net->ipv4.sysctl_igmp_llm_reports)
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
continue;
|
||||
spin_lock_bh(&im->lock);
|
||||
if (im->tm_running)
|
||||
@@ -1179,7 +1182,7 @@ static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im,
|
||||
pmc->interface = im->interface;
|
||||
in_dev_hold(in_dev);
|
||||
pmc->multiaddr = im->multiaddr;
|
||||
pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
pmc->sfmode = im->sfmode;
|
||||
if (pmc->sfmode == MCAST_INCLUDE) {
|
||||
struct ip_sf_list *psf;
|
||||
@@ -1230,9 +1233,11 @@ static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im)
|
||||
swap(im->tomb, pmc->tomb);
|
||||
swap(im->sources, pmc->sources);
|
||||
for (psf = im->sources; psf; psf = psf->sf_next)
|
||||
psf->sf_crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
psf->sf_crcount = in_dev->mr_qrv ?:
|
||||
READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
} else {
|
||||
im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
im->crcount = in_dev->mr_qrv ?:
|
||||
READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
}
|
||||
in_dev_put(pmc->interface);
|
||||
kfree_pmc(pmc);
|
||||
@@ -1289,7 +1294,8 @@ static void __igmp_group_dropped(struct ip_mc_list *im, gfp_t gfp)
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
if (im->multiaddr == IGMP_ALL_HOSTS)
|
||||
return;
|
||||
if (ipv4_is_local_multicast(im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
|
||||
if (ipv4_is_local_multicast(im->multiaddr) &&
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
return;
|
||||
|
||||
reporter = im->reporter;
|
||||
@@ -1331,13 +1337,14 @@ static void igmp_group_added(struct ip_mc_list *im)
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
if (im->multiaddr == IGMP_ALL_HOSTS)
|
||||
return;
|
||||
if (ipv4_is_local_multicast(im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
|
||||
if (ipv4_is_local_multicast(im->multiaddr) &&
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
return;
|
||||
|
||||
if (in_dev->dead)
|
||||
return;
|
||||
|
||||
im->unsolicit_count = net->ipv4.sysctl_igmp_qrv;
|
||||
im->unsolicit_count = READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) {
|
||||
spin_lock_bh(&im->lock);
|
||||
igmp_start_timer(im, IGMP_INITIAL_REPORT_DELAY);
|
||||
@@ -1351,7 +1358,7 @@ static void igmp_group_added(struct ip_mc_list *im)
|
||||
* IN() to IN(A).
|
||||
*/
|
||||
if (im->sfmode == MCAST_EXCLUDE)
|
||||
im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
im->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
|
||||
igmp_ifc_event(in_dev);
|
||||
#endif
|
||||
@@ -1635,7 +1642,7 @@ static void ip_mc_rejoin_groups(struct in_device *in_dev)
|
||||
if (im->multiaddr == IGMP_ALL_HOSTS)
|
||||
continue;
|
||||
if (ipv4_is_local_multicast(im->multiaddr) &&
|
||||
!net->ipv4.sysctl_igmp_llm_reports)
|
||||
!READ_ONCE(net->ipv4.sysctl_igmp_llm_reports))
|
||||
continue;
|
||||
|
||||
/* a failover is happening and switches
|
||||
@@ -1742,7 +1749,7 @@ static void ip_mc_reset(struct in_device *in_dev)
|
||||
|
||||
in_dev->mr_qi = IGMP_QUERY_INTERVAL;
|
||||
in_dev->mr_qri = IGMP_QUERY_RESPONSE_INTERVAL;
|
||||
in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
|
||||
in_dev->mr_qrv = READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
}
|
||||
#else
|
||||
static void ip_mc_reset(struct in_device *in_dev)
|
||||
@@ -1876,7 +1883,7 @@ static int ip_mc_del1_src(struct ip_mc_list *pmc, int sfmode,
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
if (psf->sf_oldin &&
|
||||
!IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) {
|
||||
psf->sf_crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
psf->sf_crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
psf->sf_next = pmc->tomb;
|
||||
pmc->tomb = psf;
|
||||
rv = 1;
|
||||
@@ -1940,7 +1947,7 @@ static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
|
||||
/* filter mode change */
|
||||
pmc->sfmode = MCAST_INCLUDE;
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
in_dev->mr_ifc_count = pmc->crcount;
|
||||
for (psf = pmc->sources; psf; psf = psf->sf_next)
|
||||
psf->sf_crcount = 0;
|
||||
@@ -2119,7 +2126,7 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
|
||||
#ifdef CONFIG_IP_MULTICAST
|
||||
/* else no filters; keep old mode for reports */
|
||||
|
||||
pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
|
||||
pmc->crcount = in_dev->mr_qrv ?: READ_ONCE(net->ipv4.sysctl_igmp_qrv);
|
||||
in_dev->mr_ifc_count = pmc->crcount;
|
||||
for (psf = pmc->sources; psf; psf = psf->sf_next)
|
||||
psf->sf_crcount = 0;
|
||||
@@ -2185,7 +2192,7 @@ static int __ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr,
|
||||
count++;
|
||||
}
|
||||
err = -ENOBUFS;
|
||||
if (count >= net->ipv4.sysctl_igmp_max_memberships)
|
||||
if (count >= READ_ONCE(net->ipv4.sysctl_igmp_max_memberships))
|
||||
goto done;
|
||||
iml = sock_kmalloc(sk, sizeof(*iml), GFP_KERNEL);
|
||||
if (!iml)
|
||||
@@ -2372,7 +2379,7 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
}
|
||||
/* else, add a new source to the filter */
|
||||
|
||||
if (psl && psl->sl_count >= net->ipv4.sysctl_igmp_max_msf) {
|
||||
if (psl && psl->sl_count >= READ_ONCE(net->ipv4.sysctl_igmp_max_msf)) {
|
||||
err = -ENOBUFS;
|
||||
goto done;
|
||||
}
|
||||
@@ -2394,9 +2401,10 @@ int ip_mc_source(int add, int omode, struct sock *sk, struct
|
||||
newpsl->sl_addr[i] = psl->sl_addr[i];
|
||||
/* decrease mem now to avoid the memleak warning */
|
||||
atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
|
||||
kfree_rcu(psl, rcu);
|
||||
}
|
||||
rcu_assign_pointer(pmc->sflist, newpsl);
|
||||
if (psl)
|
||||
kfree_rcu(psl, rcu);
|
||||
psl = newpsl;
|
||||
}
|
||||
rv = 1; /* > 0 for insert logic below if sl_count is 0 */
|
||||
@@ -2494,11 +2502,13 @@ int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex)
|
||||
psl->sl_count, psl->sl_addr, 0);
|
||||
/* decrease mem now to avoid the memleak warning */
|
||||
atomic_sub(IP_SFLSIZE(psl->sl_max), &sk->sk_omem_alloc);
|
||||
kfree_rcu(psl, rcu);
|
||||
} else
|
||||
} else {
|
||||
(void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
|
||||
0, NULL, 0);
|
||||
}
|
||||
rcu_assign_pointer(pmc->sflist, newpsl);
|
||||
if (psl)
|
||||
kfree_rcu(psl, rcu);
|
||||
pmc->sfmode = msf->imsf_fmode;
|
||||
err = 0;
|
||||
done:
|
||||
|
||||
Reference in New Issue
Block a user