mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-30 19:48:19 +00:00 
			
		
		
		
	Merge git://git.denx.de/u-boot-ubi
This commit is contained in:
		
						commit
						ede52d0482
					
				| @ -1060,15 +1060,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, | |||||||
| #ifndef __UBOOT__ | #ifndef __UBOOT__ | ||||||
| 	wake_up_process(ubi->bgt_thread); | 	wake_up_process(ubi->bgt_thread); | ||||||
| #else | #else | ||||||
| 	/*
 | 	ubi_do_worker(ubi); | ||||||
| 	 * U-Boot special: We have no bgt_thread in U-Boot! |  | ||||||
| 	 * So just call do_work() here directly. |  | ||||||
| 	 */ |  | ||||||
| 	err = do_work(ubi); |  | ||||||
| 	if (err) { |  | ||||||
| 		ubi_err(ubi, "%s: work failed with error code %d", |  | ||||||
| 			ubi->bgt_name, err); |  | ||||||
| 	} |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	spin_unlock(&ubi->wl_lock); | 	spin_unlock(&ubi->wl_lock); | ||||||
|  | |||||||
| @ -1119,6 +1119,6 @@ static inline int idx2vol_id(const struct ubi_device *ubi, int idx) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef __UBOOT__ | #ifdef __UBOOT__ | ||||||
| int do_work(struct ubi_device *ubi); | void ubi_do_worker(struct ubi_device *ubi); | ||||||
| #endif | #endif | ||||||
| #endif /* !__UBI_UBI_H__ */ | #endif /* !__UBI_UBI_H__ */ | ||||||
|  | |||||||
| @ -191,11 +191,7 @@ static void wl_entry_destroy(struct ubi_device *ubi, struct ubi_wl_entry *e) | |||||||
|  * This function returns zero in case of success and a negative error code in |  * This function returns zero in case of success and a negative error code in | ||||||
|  * case of failure. |  * case of failure. | ||||||
|  */ |  */ | ||||||
| #ifndef __UBOOT__ |  | ||||||
| static int do_work(struct ubi_device *ubi) | static int do_work(struct ubi_device *ubi) | ||||||
| #else |  | ||||||
| int do_work(struct ubi_device *ubi) |  | ||||||
| #endif |  | ||||||
| { | { | ||||||
| 	int err; | 	int err; | ||||||
| 	struct ubi_work *wrk; | 	struct ubi_work *wrk; | ||||||
| @ -528,6 +524,33 @@ repeat: | |||||||
| 	spin_unlock(&ubi->wl_lock); | 	spin_unlock(&ubi->wl_lock); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef __UBOOT__ | ||||||
|  | void ubi_do_worker(struct ubi_device *ubi) | ||||||
|  | { | ||||||
|  | 	int err; | ||||||
|  | 
 | ||||||
|  | 	if (list_empty(&ubi->works) || ubi->ro_mode || | ||||||
|  | 	    !ubi->thread_enabled || ubi_dbg_is_bgt_disabled(ubi)) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	spin_lock(&ubi->wl_lock); | ||||||
|  | 	while (!list_empty(&ubi->works)) { | ||||||
|  | 		/*
 | ||||||
|  | 		 * call do_work, which executes exactly one work form the queue, | ||||||
|  | 		 * including removeing it from the work queue. | ||||||
|  | 		 */ | ||||||
|  | 		spin_unlock(&ubi->wl_lock); | ||||||
|  | 		err = do_work(ubi); | ||||||
|  | 		spin_lock(&ubi->wl_lock); | ||||||
|  | 		if (err) { | ||||||
|  | 			ubi_err(ubi, "%s: work failed with error code %d", | ||||||
|  | 				ubi->bgt_name, err); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	spin_unlock(&ubi->wl_lock); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * __schedule_ubi_work - schedule a work. |  * __schedule_ubi_work - schedule a work. | ||||||
|  * @ubi: UBI device description object |  * @ubi: UBI device description object | ||||||
| @ -545,17 +568,6 @@ static void __schedule_ubi_work(struct ubi_device *ubi, struct ubi_work *wrk) | |||||||
| #ifndef __UBOOT__ | #ifndef __UBOOT__ | ||||||
| 	if (ubi->thread_enabled && !ubi_dbg_is_bgt_disabled(ubi)) | 	if (ubi->thread_enabled && !ubi_dbg_is_bgt_disabled(ubi)) | ||||||
| 		wake_up_process(ubi->bgt_thread); | 		wake_up_process(ubi->bgt_thread); | ||||||
| #else |  | ||||||
| 	int err; |  | ||||||
| 	/*
 |  | ||||||
| 	 * U-Boot special: We have no bgt_thread in U-Boot! |  | ||||||
| 	 * So just call do_work() here directly. |  | ||||||
| 	 */ |  | ||||||
| 	err = do_work(ubi); |  | ||||||
| 	if (err) { |  | ||||||
| 		ubi_err(ubi, "%s: work failed with error code %d", |  | ||||||
| 			ubi->bgt_name, err); |  | ||||||
| 	} |  | ||||||
| #endif | #endif | ||||||
| 	spin_unlock(&ubi->wl_lock); | 	spin_unlock(&ubi->wl_lock); | ||||||
| } | } | ||||||
| @ -610,6 +622,10 @@ static int schedule_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, | |||||||
| 	wl_wrk->torture = torture; | 	wl_wrk->torture = torture; | ||||||
| 
 | 
 | ||||||
| 	schedule_ubi_work(ubi, wl_wrk); | 	schedule_ubi_work(ubi, wl_wrk); | ||||||
|  | 
 | ||||||
|  | #ifdef __UBOOT__ | ||||||
|  | 	ubi_do_worker(ubi); | ||||||
|  | #endif | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -1011,8 +1027,15 @@ static int ensure_wear_leveling(struct ubi_device *ubi, int nested) | |||||||
| 	wrk->func = &wear_leveling_worker; | 	wrk->func = &wear_leveling_worker; | ||||||
| 	if (nested) | 	if (nested) | ||||||
| 		__schedule_ubi_work(ubi, wrk); | 		__schedule_ubi_work(ubi, wrk); | ||||||
|  | #ifndef __UBOOT__ | ||||||
| 	else | 	else | ||||||
| 		schedule_ubi_work(ubi, wrk); | 		schedule_ubi_work(ubi, wrk); | ||||||
|  | #else | ||||||
|  | 	else { | ||||||
|  | 		schedule_ubi_work(ubi, wrk); | ||||||
|  | 		ubi_do_worker(ubi); | ||||||
|  | 	} | ||||||
|  | #endif | ||||||
| 	return err; | 	return err; | ||||||
| 
 | 
 | ||||||
| out_cancel: | out_cancel: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user